Copy disabled (too large)
Download .txt
Showing preview only (12,824K chars total). Download the full file to get everything.
Repository: vueComponent/ant-design-vue
Branch: main
Commit: f0c2a92f9357
Files: 2992
Total size: 33.7 MB
Directory structure:
gitextract_nemjdp9h/
├── .antd-tools.config.js
├── .codecov.yml
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE/
│ │ ├── pr_cn.md
│ │ └── pr_en.md
│ ├── issue-close-app.yml
│ └── workflows/
│ ├── cloudflare.yml
│ ├── codecov.yml
│ ├── emoji-helper.yml
│ ├── issue-close-require.yml
│ ├── issue-labeled.yml
│ ├── issue-open-check.yml
│ ├── lock-issue.yml
│ ├── stale.yml
│ └── test.yml
├── .gitignore
├── .husky/
│ ├── .gitignore
│ └── pre-commit
├── .huskyrc
├── .jest.js
├── .npmrc
├── .prettierignore
├── .prettierrc
├── .stylelintrc
├── .stylelintrc.json
├── .vcmrc
├── BACKERS.md
├── CHANGELOG.en-US.md
├── CHANGELOG.zh-CN.md
├── LICENSE
├── README-zh_CN.md
├── README.md
├── SECURITY.md
├── antd-tools/
│ ├── apiCollection.js
│ ├── cli/
│ │ ├── index.js
│ │ └── run.js
│ ├── generator-types/
│ │ ├── README.md
│ │ ├── index.js
│ │ ├── src/
│ │ │ ├── formatter.ts
│ │ │ ├── index.ts
│ │ │ ├── parser.ts
│ │ │ ├── type.ts
│ │ │ ├── utils.ts
│ │ │ └── web-types.ts
│ │ └── tsconfig.json
│ ├── getBabelCommonConfig.js
│ ├── getNpm.js
│ ├── getTSCommonConfig.js
│ ├── getWebpackConfig.js
│ ├── gulpfile.js
│ ├── replaceLib.js
│ ├── runCmd.js
│ ├── sortApiTable.js
│ └── utils/
│ ├── CleanUpStatsPlugin.js
│ ├── get-npm-args.js
│ ├── getChangelog.js
│ ├── getRunCmdEnv.js
│ └── projectHelper.js
├── babel.config.js
├── build.sh
├── components/
│ ├── __tests__/
│ │ └── util/
│ │ └── domHook.js
│ ├── _util/
│ │ ├── ActionButton.tsx
│ │ ├── BaseInput.tsx
│ │ ├── BaseInputInner.tsx
│ │ ├── BaseMixin.ts
│ │ ├── EventInterface.ts
│ │ ├── KeyCode.ts
│ │ ├── Portal.tsx
│ │ ├── PortalWrapper.tsx
│ │ ├── __mocks__/
│ │ │ ├── Portal.tsx
│ │ │ └── RenderSlot.tsx
│ │ ├── __tests__/
│ │ │ ├── easings.test.js
│ │ │ ├── scrollTo.test.js
│ │ │ ├── unreachableException.test.js
│ │ │ └── vNode.test.js
│ │ ├── canUseDom.ts
│ │ ├── classNames.ts
│ │ ├── collapseMotion.tsx
│ │ ├── colors.ts
│ │ ├── component-classes.ts
│ │ ├── copy-to-clipboard/
│ │ │ ├── index.ts
│ │ │ └── toggle-selection.ts
│ │ ├── createContext.ts
│ │ ├── createRef.ts
│ │ ├── cssinjs/
│ │ │ ├── Cache.ts
│ │ │ ├── Keyframes.ts
│ │ │ ├── StyleContext.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── useCacheToken.tsx
│ │ │ │ ├── useGlobalCache.tsx
│ │ │ │ ├── useHMR.ts
│ │ │ │ └── useStyleRegister/
│ │ │ │ ├── cacheMapUtil.ts
│ │ │ │ └── index.tsx
│ │ │ ├── index.ts
│ │ │ ├── linters/
│ │ │ │ ├── contentQuotesLinter.ts
│ │ │ │ ├── hashedAnimationLinter.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── interface.ts
│ │ │ │ ├── legacyNotSelectorLinter.ts
│ │ │ │ ├── logicalPropertiesLinter.ts
│ │ │ │ ├── parentSelectorLinter.ts
│ │ │ │ └── utils.ts
│ │ │ ├── theme/
│ │ │ │ ├── Theme.ts
│ │ │ │ ├── ThemeCache.ts
│ │ │ │ ├── createTheme.ts
│ │ │ │ ├── index.ts
│ │ │ │ └── interface.ts
│ │ │ ├── transformers/
│ │ │ │ ├── interface.ts
│ │ │ │ ├── legacyLogicalProperties.ts
│ │ │ │ └── px2rem.ts
│ │ │ └── util.ts
│ │ ├── debouncedWatch.ts
│ │ ├── eagerComputed.ts
│ │ ├── easings.ts
│ │ ├── env.ts
│ │ ├── extendsObject.ts
│ │ ├── firstNotUndefined.ts
│ │ ├── gapSize.ts
│ │ ├── getRequestAnimationFrame.ts
│ │ ├── getScroll.ts
│ │ ├── getScrollBarSize.ts
│ │ ├── hooks/
│ │ │ ├── _vueuse/
│ │ │ │ ├── _configurable.ts
│ │ │ │ ├── is.ts
│ │ │ │ ├── resolveUnref.ts
│ │ │ │ ├── tryOnMounted.ts
│ │ │ │ ├── tryOnScopeDispose.ts
│ │ │ │ ├── types.ts
│ │ │ │ ├── unrefElement.ts
│ │ │ │ ├── useElementSize.ts
│ │ │ │ ├── useMutationObserver.ts
│ │ │ │ ├── useResizeObserver.ts
│ │ │ │ └── useSupported.ts
│ │ │ ├── useBreakpoint.ts
│ │ │ ├── useDestroyed.ts
│ │ │ ├── useFlexGapSupport.ts
│ │ │ ├── useId.ts
│ │ │ ├── useLayoutState.ts
│ │ │ ├── useMemo.ts
│ │ │ ├── useMergedState.ts
│ │ │ ├── useRefs.ts
│ │ │ ├── useScrollLocker.ts
│ │ │ └── useState.ts
│ │ ├── isNumeric.ts
│ │ ├── isValid.ts
│ │ ├── isValidValue.ts
│ │ ├── json2mq.ts
│ │ ├── omit.ts
│ │ ├── pickAttrs.ts
│ │ ├── placements.ts
│ │ ├── props-util/
│ │ │ ├── index.ts
│ │ │ └── initDefaultProps.ts
│ │ ├── raf.ts
│ │ ├── reactivePick.ts
│ │ ├── requestAnimationTimeout.ts
│ │ ├── responsiveObserve.ts
│ │ ├── scrollTo.ts
│ │ ├── setStyle.ts
│ │ ├── shallowequal.ts
│ │ ├── static-style-extract/
│ │ │ ├── __tests__/
│ │ │ │ ├── __snapshots__/
│ │ │ │ │ └── index.test.js.snap
│ │ │ │ └── index.test.js
│ │ │ ├── index.tsx
│ │ │ └── interface.ts
│ │ ├── statusUtils.tsx
│ │ ├── styleChecker.ts
│ │ ├── supportsPassive.js
│ │ ├── throttleByAnimationFrame.ts
│ │ ├── toReactive.ts
│ │ ├── transButton.tsx
│ │ ├── transKeys.ts
│ │ ├── transition.tsx
│ │ ├── type.ts
│ │ ├── unreachableException.ts
│ │ ├── util.ts
│ │ ├── vnode.ts
│ │ ├── vue-types/
│ │ │ └── index.ts
│ │ ├── warning.ts
│ │ └── wave/
│ │ ├── WaveEffect.tsx
│ │ ├── index.tsx
│ │ ├── style.ts
│ │ ├── useWave.ts
│ │ └── util.ts
│ ├── affix/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── index.vue
│ │ │ ├── on-change.vue
│ │ │ └── target.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── utils.ts
│ ├── alert/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── action.vue
│ │ │ ├── banner.vue
│ │ │ ├── basic.vue
│ │ │ ├── closable.vue
│ │ │ ├── close-text.vue
│ │ │ ├── custom-icon.vue
│ │ │ ├── description.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── smooth-closed.vue
│ │ │ └── style.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── anchor/
│ │ ├── Anchor.tsx
│ │ ├── AnchorLink.tsx
│ │ ├── __tests__/
│ │ │ ├── Anchor.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── customizeHighlight.vue
│ │ │ ├── horizontal.vue
│ │ │ ├── index.vue
│ │ │ ├── onChange.vue
│ │ │ ├── onClick.vue
│ │ │ ├── static.vue
│ │ │ └── targetOffset.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── app/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── index.vue
│ │ │ └── myPage.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── auto-complete/
│ │ ├── OptGroup.tsx
│ │ ├── Option.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── allow-clear.vue
│ │ │ ├── basic.vue
│ │ │ ├── border-less.vue
│ │ │ ├── certain-category.vue
│ │ │ ├── custom.vue
│ │ │ ├── index.vue
│ │ │ ├── non-case-sensitive.vue
│ │ │ ├── options.vue
│ │ │ ├── status.vue
│ │ │ └── uncertain-category.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ └── index.zh-CN.md
│ ├── avatar/
│ │ ├── Avatar.tsx
│ │ ├── AvatarContext.ts
│ │ ├── Group.tsx
│ │ ├── __tests__/
│ │ │ ├── Avatar.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Avatar.test.js.snap
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── demo/
│ │ │ ├── badge.vue
│ │ │ ├── basic.vue
│ │ │ ├── dynamic.vue
│ │ │ ├── group.vue
│ │ │ ├── index.vue
│ │ │ ├── responsive.vue
│ │ │ └── type.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── badge/
│ │ ├── Badge.tsx
│ │ ├── Ribbon.tsx
│ │ ├── ScrollNumber.tsx
│ │ ├── SingleNumber.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── change.vue
│ │ │ ├── colors.vue
│ │ │ ├── dot.vue
│ │ │ ├── index.vue
│ │ │ ├── link.vue
│ │ │ ├── no-wrapper.vue
│ │ │ ├── overflow.vue
│ │ │ ├── ribbon.vue
│ │ │ ├── status.vue
│ │ │ └── title.vue
│ │ ├── index.en_US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── breadcrumb/
│ │ ├── Breadcrumb.tsx
│ │ ├── BreadcrumbItem.tsx
│ │ ├── BreadcrumbSeparator.tsx
│ │ ├── __tests__/
│ │ │ ├── Breadcrumb.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Breadcrumb.test.js.snap
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── index.vue
│ │ │ ├── overlay.vue
│ │ │ ├── router.vue
│ │ │ ├── separator-indepent.vue
│ │ │ ├── separator.vue
│ │ │ └── withIcon.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── button/
│ │ ├── LoadingIcon.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── index.test.js
│ │ │ └── wave.test.js
│ │ ├── button-group.tsx
│ │ ├── button.tsx
│ │ ├── buttonTypes.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── block.vue
│ │ │ ├── button-group.vue
│ │ │ ├── danger.vue
│ │ │ ├── disabled.vue
│ │ │ ├── ghost.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── loading.vue
│ │ │ ├── multiple.vue
│ │ │ └── size.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ ├── group.ts
│ │ └── index.ts
│ ├── calendar/
│ │ ├── Header.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── date-fns.tsx
│ │ ├── dayjs.tsx
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── card.vue
│ │ │ ├── customize-header.vue
│ │ │ ├── index.vue
│ │ │ ├── notice-calendar.vue
│ │ │ └── select.vue
│ │ ├── generateCalendar.tsx
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── locale/
│ │ │ ├── ar_EG.ts
│ │ │ ├── az_AZ.ts
│ │ │ ├── bg_BG.ts
│ │ │ ├── bn_BD.ts
│ │ │ ├── by_BY.ts
│ │ │ ├── ca_ES.ts
│ │ │ ├── ckb_IQ.ts
│ │ │ ├── cs_CZ.ts
│ │ │ ├── da_DK.ts
│ │ │ ├── de_DE.ts
│ │ │ ├── el_GR.ts
│ │ │ ├── en_GB.ts
│ │ │ ├── en_US.ts
│ │ │ ├── es_ES.ts
│ │ │ ├── et_EE.ts
│ │ │ ├── fa_IR.ts
│ │ │ ├── fi_FI.ts
│ │ │ ├── fr_BE.ts
│ │ │ ├── fr_CA.ts
│ │ │ ├── fr_FR.ts
│ │ │ ├── ga_IE.ts
│ │ │ ├── gl_ES.ts
│ │ │ ├── he_IL.ts
│ │ │ ├── hi_IN.ts
│ │ │ ├── hr_HR.ts
│ │ │ ├── hu_HU.ts
│ │ │ ├── id_ID.ts
│ │ │ ├── is_IS.ts
│ │ │ ├── it_IT.ts
│ │ │ ├── ja_JP.ts
│ │ │ ├── ka_GE.ts
│ │ │ ├── kk_KZ.ts
│ │ │ ├── km_KH.ts
│ │ │ ├── kmr_IQ.ts
│ │ │ ├── kn_IN.ts
│ │ │ ├── ko_KR.ts
│ │ │ ├── lt_LT.ts
│ │ │ ├── lv_LV.ts
│ │ │ ├── mk_MK.ts
│ │ │ ├── ml_IN.ts
│ │ │ ├── mn_MN.ts
│ │ │ ├── ms_MY.ts
│ │ │ ├── nb_NO.ts
│ │ │ ├── nl_BE.ts
│ │ │ ├── nl_NL.ts
│ │ │ ├── pl_PL.ts
│ │ │ ├── pt_BR.ts
│ │ │ ├── pt_PT.ts
│ │ │ ├── ro_RO.ts
│ │ │ ├── ru_RU.ts
│ │ │ ├── sk_SK.ts
│ │ │ ├── sl_SI.ts
│ │ │ ├── sr_RS.ts
│ │ │ ├── sv_SE.ts
│ │ │ ├── ta_IN.ts
│ │ │ ├── th_TH.ts
│ │ │ ├── tr_TR.ts
│ │ │ ├── uk_UA.ts
│ │ │ ├── ur_PK.ts
│ │ │ ├── vi_VN.ts
│ │ │ ├── zh_CN.ts
│ │ │ └── zh_TW.ts
│ │ ├── moment.tsx
│ │ └── style/
│ │ └── index.tsx
│ ├── card/
│ │ ├── Card.tsx
│ │ ├── Grid.tsx
│ │ ├── Meta.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── border-less.vue
│ │ │ ├── flexible-content.vue
│ │ │ ├── grid-card.vue
│ │ │ ├── in-column.vue
│ │ │ ├── index.vue
│ │ │ ├── inner.vue
│ │ │ ├── loading.vue
│ │ │ ├── meta.vue
│ │ │ ├── simple.vue
│ │ │ └── tabs.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── carousel/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── autoplay.vue
│ │ │ ├── basic.vue
│ │ │ ├── customArrows.vue
│ │ │ ├── customPaging.vue
│ │ │ ├── fade.vue
│ │ │ ├── index.vue
│ │ │ └── position.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── cascader/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── change-on-select.vue
│ │ │ ├── custom-render.vue
│ │ │ ├── custom-trigger.vue
│ │ │ ├── disabled-option.vue
│ │ │ ├── fields-name.vue
│ │ │ ├── hover.vue
│ │ │ ├── index.vue
│ │ │ ├── lazy.vue
│ │ │ ├── multiple.vue
│ │ │ ├── search.vue
│ │ │ ├── size.vue
│ │ │ ├── suffix.vue
│ │ │ └── tagRender.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── checkbox/
│ │ ├── Checkbox.tsx
│ │ ├── Group.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── group.test.js.snap
│ │ │ ├── checkbox.test.js
│ │ │ ├── demo.test.js
│ │ │ └── group.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── check-all.vue
│ │ │ ├── controller.vue
│ │ │ ├── disabled.vue
│ │ │ ├── group.vue
│ │ │ ├── index.vue
│ │ │ └── layout.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ └── style/
│ │ └── index.ts
│ ├── col/
│ │ ├── index.ts
│ │ └── style/
│ │ └── index.ts
│ ├── collapse/
│ │ ├── Collapse.tsx
│ │ ├── CollapsePanel.tsx
│ │ ├── PanelContent.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── commonProps.ts
│ │ ├── demo/
│ │ │ ├── accordion.vue
│ │ │ ├── basic.vue
│ │ │ ├── borderless.vue
│ │ │ ├── collapsible.vue
│ │ │ ├── custom.vue
│ │ │ ├── extra.vue
│ │ │ ├── ghost.vue
│ │ │ ├── index.vue
│ │ │ ├── mix.vue
│ │ │ └── noarrow.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── comment/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── editor.vue
│ │ │ ├── index.vue
│ │ │ ├── list.vue
│ │ │ └── nested.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── components.ts
│ ├── config-provider/
│ │ ├── DisabledContext.ts
│ │ ├── SizeContext.ts
│ │ ├── __tests__/
│ │ │ └── index.test.js
│ │ ├── context.ts
│ │ ├── cssVariables.ts
│ │ ├── demo/
│ │ │ ├── direction.vue
│ │ │ ├── index.vue
│ │ │ ├── locale.vue
│ │ │ ├── size.vue
│ │ │ └── theme.vue
│ │ ├── hooks/
│ │ │ ├── useConfigInject.ts
│ │ │ └── useTheme.ts
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── renderEmpty.tsx
│ │ └── style/
│ │ └── index.ts
│ ├── date-picker/
│ │ ├── PickerButton.tsx
│ │ ├── PickerTag.tsx
│ │ ├── __tests__/
│ │ │ ├── DatePicker.test.js
│ │ │ ├── QuarterPicker.test.js
│ │ │ ├── RangePicker.test.js
│ │ │ ├── WeekPicker.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── DatePicker.test.js.snap
│ │ │ │ ├── QuarterPicker.test.js.snap
│ │ │ │ ├── RangePicker.test.js.snap
│ │ │ │ ├── WeekPicker.test.js.snap
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── other.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── mount.test.js
│ │ │ ├── other.test.js
│ │ │ └── utils.js
│ │ ├── date-fns.tsx
│ │ ├── dayjs.tsx
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── bordered.vue
│ │ │ ├── date-render.vue
│ │ │ ├── disabled-date.vue
│ │ │ ├── disabled.vue
│ │ │ ├── extra-footer.vue
│ │ │ ├── format.vue
│ │ │ ├── index.vue
│ │ │ ├── mode.vue
│ │ │ ├── placement.vue
│ │ │ ├── presetted-ranges.vue
│ │ │ ├── range-picker.vue
│ │ │ ├── select-in-range.vue
│ │ │ ├── size.vue
│ │ │ ├── start-end.vue
│ │ │ ├── status.vue
│ │ │ ├── suffix.vue
│ │ │ ├── switchable.vue
│ │ │ ├── text.vue
│ │ │ └── time.vue
│ │ ├── generatePicker/
│ │ │ ├── generateRangePicker.tsx
│ │ │ ├── generateSinglePicker.tsx
│ │ │ ├── index.tsx
│ │ │ ├── interface.ts
│ │ │ └── props.ts
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── locale/
│ │ │ ├── ar_EG.ts
│ │ │ ├── az_AZ.ts
│ │ │ ├── bg_BG.ts
│ │ │ ├── bn_BD.ts
│ │ │ ├── by_BY.ts
│ │ │ ├── ca_ES.ts
│ │ │ ├── ckb_IQ.ts
│ │ │ ├── cs_CZ.ts
│ │ │ ├── da_DK.ts
│ │ │ ├── de_DE.ts
│ │ │ ├── el_GR.ts
│ │ │ ├── en_GB.ts
│ │ │ ├── en_US.ts
│ │ │ ├── es_ES.ts
│ │ │ ├── et_EE.ts
│ │ │ ├── example.json
│ │ │ ├── fa_IR.ts
│ │ │ ├── fi_FI.ts
│ │ │ ├── fr_BE.ts
│ │ │ ├── fr_CA.ts
│ │ │ ├── fr_FR.ts
│ │ │ ├── ga_IE.ts
│ │ │ ├── gl_ES.ts
│ │ │ ├── he_IL.ts
│ │ │ ├── hi_IN.ts
│ │ │ ├── hr_HR.ts
│ │ │ ├── hu_HU.ts
│ │ │ ├── id_ID.ts
│ │ │ ├── is_IS.ts
│ │ │ ├── it_IT.ts
│ │ │ ├── ja_JP.ts
│ │ │ ├── ka_GE.ts
│ │ │ ├── kk_KZ.ts
│ │ │ ├── km_KH.ts
│ │ │ ├── kmr_IQ.ts
│ │ │ ├── kn_IN.ts
│ │ │ ├── ko_KR.ts
│ │ │ ├── lt_LT.ts
│ │ │ ├── lv_LV.ts
│ │ │ ├── mk_MK.ts
│ │ │ ├── ml_IN.ts
│ │ │ ├── mn_MN.ts
│ │ │ ├── ms_MY.ts
│ │ │ ├── nb_NO.ts
│ │ │ ├── nl_BE.ts
│ │ │ ├── nl_NL.ts
│ │ │ ├── pl_PL.ts
│ │ │ ├── pt_BR.ts
│ │ │ ├── pt_PT.ts
│ │ │ ├── ro_RO.ts
│ │ │ ├── ru_RU.ts
│ │ │ ├── sk_SK.ts
│ │ │ ├── sl_SI.ts
│ │ │ ├── sr_RS.ts
│ │ │ ├── sv_SE.ts
│ │ │ ├── ta_IN.ts
│ │ │ ├── th_TH.ts
│ │ │ ├── tr_TR.ts
│ │ │ ├── uk_UA.ts
│ │ │ ├── ur_PK.ts
│ │ │ ├── vi_VN.ts
│ │ │ ├── zh_CN.ts
│ │ │ └── zh_TW.ts
│ │ ├── moment.tsx
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── util.ts
│ ├── descriptions/
│ │ ├── Cell.tsx
│ │ ├── Row.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── border.vue
│ │ │ ├── index.vue
│ │ │ ├── responsive.vue
│ │ │ ├── size.vue
│ │ │ ├── vertical-border.vue
│ │ │ └── vertical.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── divider/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── customize-style.vue
│ │ │ ├── horizontal.vue
│ │ │ ├── index.vue
│ │ │ ├── vertical.vue
│ │ │ └── with-text.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── drawer/
│ │ ├── __tests__/
│ │ │ ├── Drawer.test.js
│ │ │ ├── DrawerEvent.test.js
│ │ │ ├── MultiDrawer.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Drawer.test.js.snap
│ │ │ │ ├── DrawerEvent.test.js.snap
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── descriptionItem/
│ │ │ │ └── index.vue
│ │ │ ├── extra.vue
│ │ │ ├── form-in-drawer.vue
│ │ │ ├── index.vue
│ │ │ ├── multi-level-drawer.vue
│ │ │ ├── placement.vue
│ │ │ ├── render-in-current.vue
│ │ │ ├── size.vue
│ │ │ └── user-profile.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ ├── index.ts
│ │ └── motion.ts
│ ├── dropdown/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── dropdown-button.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── dropdown-button.test.js
│ │ ├── demo/
│ │ │ ├── arrow-center.vue
│ │ │ ├── arrow.vue
│ │ │ ├── basic.vue
│ │ │ ├── context-menu.vue
│ │ │ ├── dropdown-button.vue
│ │ │ ├── event.vue
│ │ │ ├── index.vue
│ │ │ ├── item.vue
│ │ │ ├── loading.vue
│ │ │ ├── overlay-visible.vue
│ │ │ ├── placement.vue
│ │ │ ├── sub-menu.vue
│ │ │ └── trigger.vue
│ │ ├── dropdown-button.tsx
│ │ ├── dropdown.tsx
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── props.ts
│ │ └── style/
│ │ ├── button.ts
│ │ ├── index.ts
│ │ └── status.ts
│ ├── empty/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── config-provider.vue
│ │ │ ├── customize.vue
│ │ │ ├── description.vue
│ │ │ ├── index.vue
│ │ │ └── simple.vue
│ │ ├── empty.tsx
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── simple.tsx
│ │ └── style/
│ │ └── index.ts
│ ├── flex/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── align.vue
│ │ │ ├── basic.vue
│ │ │ ├── combination.vue
│ │ │ ├── gap.vue
│ │ │ ├── index.vue
│ │ │ └── wrap.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── utils.ts
│ ├── float-button/
│ │ ├── BackTop.tsx
│ │ ├── FloatButton.tsx
│ │ ├── FloatButtonContent.tsx
│ │ ├── FloatButtonGroup.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── index.test.js
│ │ │ └── wave.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── back-top.vue
│ │ │ ├── badge.vue
│ │ │ ├── basic.vue
│ │ │ ├── description.vue
│ │ │ ├── group-menu.vue
│ │ │ ├── group.vue
│ │ │ ├── index.vue
│ │ │ ├── shape.vue
│ │ │ ├── tooltip.vue
│ │ │ └── type.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── util.ts
│ ├── form/
│ │ ├── ErrorList.tsx
│ │ ├── Form.tsx
│ │ ├── FormItem.tsx
│ │ ├── FormItemContext.ts
│ │ ├── FormItemInput.tsx
│ │ ├── FormItemLabel.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── advanced-search.vue
│ │ │ ├── basic.vue
│ │ │ ├── custom-validation.vue
│ │ │ ├── customized-form-controls.vue
│ │ │ ├── disabled.vue
│ │ │ ├── dynamic-form-item.vue
│ │ │ ├── dynamic-form-items-complex.vue
│ │ │ ├── dynamic-form-items.vue
│ │ │ ├── dynamic-rule.vue
│ │ │ ├── form-context.vue
│ │ │ ├── form-in-modal.vue
│ │ │ ├── horizontal-login.vue
│ │ │ ├── index.vue
│ │ │ ├── inline-login.vue
│ │ │ ├── label-width.vue
│ │ │ ├── layout.vue
│ │ │ ├── nest-messages.vue
│ │ │ ├── normal-login.vue
│ │ │ ├── price-input.vue
│ │ │ ├── time-related-controls.vue
│ │ │ ├── useForm-basic.vue
│ │ │ ├── useForm-merge.vue
│ │ │ ├── useForm-nested.vue
│ │ │ ├── useForm-trigger.vue
│ │ │ ├── validate-other.vue
│ │ │ ├── validate-static.vue
│ │ │ └── validation.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── style/
│ │ │ ├── explain.ts
│ │ │ └── index.ts
│ │ ├── useForm.ts
│ │ └── utils/
│ │ ├── asyncUtil.ts
│ │ ├── messages.ts
│ │ ├── typeUtil.ts
│ │ ├── useDebounce.ts
│ │ ├── validateUtil.ts
│ │ └── valueUtil.ts
│ ├── grid/
│ │ ├── Col.tsx
│ │ ├── Row.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── flex-align.vue
│ │ │ ├── flex-order.vue
│ │ │ ├── flex-stretch.vue
│ │ │ ├── flex.vue
│ │ │ ├── gutter.vue
│ │ │ ├── index.vue
│ │ │ ├── offset.vue
│ │ │ ├── playfround.vue
│ │ │ ├── responsive-more.vue
│ │ │ ├── responsive.vue
│ │ │ ├── sort.vue
│ │ │ └── use-breakpoint.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── icon/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ └── demo.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── custom.vue
│ │ │ ├── iconfont.vue
│ │ │ ├── index.vue
│ │ │ └── two-tone.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ └── index.zh-CN.md
│ ├── image/
│ │ ├── PreviewGroup.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── controlled-preview.vue
│ │ │ ├── fallback.vue
│ │ │ ├── index.vue
│ │ │ ├── placeholder.vue
│ │ │ ├── preview-group-visible.vue
│ │ │ ├── preview-group.vue
│ │ │ └── preview-src.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── index.ts
│ ├── input/
│ │ ├── ClearableLabeledInput.tsx
│ │ ├── Group.tsx
│ │ ├── Input.tsx
│ │ ├── Password.tsx
│ │ ├── ResizableTextArea.tsx
│ │ ├── Search.tsx
│ │ ├── TextArea.tsx
│ │ ├── __tests__/
│ │ │ ├── Search.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Search.test.js.snap
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── calculateNodeHeight.tsx
│ │ ├── demo/
│ │ │ ├── addon.vue
│ │ │ ├── allow-clear.vue
│ │ │ ├── autosize-textarea.vue
│ │ │ ├── basic.vue
│ │ │ ├── borderless.vue
│ │ │ ├── group.vue
│ │ │ ├── index.vue
│ │ │ ├── password-input.vue
│ │ │ ├── presuffix.vue
│ │ │ ├── search-input-loading.vue
│ │ │ ├── search-input.vue
│ │ │ ├── show-count.vue
│ │ │ ├── size.vue
│ │ │ ├── status.vue
│ │ │ ├── textarea.vue
│ │ │ └── tooltip.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── inputProps.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── util.ts
│ ├── input-number/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── addon.vue
│ │ │ ├── basic.vue
│ │ │ ├── borderless.vue
│ │ │ ├── digit.vue
│ │ │ ├── disabled.vue
│ │ │ ├── formatter.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── keyboard.vue
│ │ │ ├── out-of-range.vue
│ │ │ ├── prefix.vue
│ │ │ ├── size.vue
│ │ │ └── status.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── src/
│ │ │ ├── InputNumber.tsx
│ │ │ ├── StepHandler.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── useCursor.ts
│ │ │ │ └── useFrame.ts
│ │ │ └── utils/
│ │ │ ├── MiniDecimal.ts
│ │ │ ├── numberUtil.ts
│ │ │ └── supportUtil.ts
│ │ └── style/
│ │ └── index.tsx
│ ├── layout/
│ │ ├── Sider.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── custom-trigger.vue
│ │ │ ├── fixed-sider.vue
│ │ │ ├── fixed.vue
│ │ │ ├── index.vue
│ │ │ ├── responsive.vue
│ │ │ ├── side.vue
│ │ │ ├── top-side-2.vue
│ │ │ ├── top-side.vue
│ │ │ └── top.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── injectionKey.ts
│ │ ├── layout.tsx
│ │ └── style/
│ │ ├── index.ts
│ │ └── light.ts
│ ├── list/
│ │ ├── Item.tsx
│ │ ├── ItemMeta.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── empty.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── empty.test.js
│ │ │ ├── index.test.js
│ │ │ └── loading.test.js
│ │ ├── contextKey.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── grid.vue
│ │ │ ├── index.vue
│ │ │ ├── loadmore.vue
│ │ │ ├── resposive.vue
│ │ │ ├── simple.vue
│ │ │ └── vertical.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── locale/
│ │ ├── LocaleReceiver.tsx
│ │ ├── ar_EG.ts
│ │ ├── az_AZ.ts
│ │ ├── bg_BG.ts
│ │ ├── bn_BD.ts
│ │ ├── by_BY.ts
│ │ ├── ca_ES.ts
│ │ ├── ckb_IQ.ts
│ │ ├── cs_CZ.ts
│ │ ├── da_DK.ts
│ │ ├── de_DE.ts
│ │ ├── el_GR.ts
│ │ ├── en_GB.ts
│ │ ├── en_US.ts
│ │ ├── es_ES.ts
│ │ ├── et_EE.ts
│ │ ├── fa_IR.ts
│ │ ├── fi_FI.ts
│ │ ├── fr_BE.ts
│ │ ├── fr_CA.ts
│ │ ├── fr_FR.ts
│ │ ├── ga_IE.ts
│ │ ├── gl_ES.ts
│ │ ├── he_IL.ts
│ │ ├── hi_IN.ts
│ │ ├── hr_HR.ts
│ │ ├── hu_HU.ts
│ │ ├── hy_AM.ts
│ │ ├── id_ID.ts
│ │ ├── index.tsx
│ │ ├── is_IS.ts
│ │ ├── it_IT.ts
│ │ ├── ja_JP.ts
│ │ ├── ka_GE.ts
│ │ ├── kk_KZ.ts
│ │ ├── km_KH.ts
│ │ ├── kmr_IQ.ts
│ │ ├── kn_IN.ts
│ │ ├── ko_KR.ts
│ │ ├── ku_IQ.ts
│ │ ├── lt_LT.ts
│ │ ├── lv_LV.ts
│ │ ├── mk_MK.ts
│ │ ├── ml_IN.ts
│ │ ├── mn_MN.ts
│ │ ├── ms_MY.ts
│ │ ├── nb_NO.ts
│ │ ├── ne_NP.ts
│ │ ├── nl_BE.ts
│ │ ├── nl_NL.ts
│ │ ├── pl_PL.ts
│ │ ├── pt_BR.ts
│ │ ├── pt_PT.ts
│ │ ├── ro_RO.ts
│ │ ├── ru_RU.ts
│ │ ├── sk_SK.ts
│ │ ├── sl_SI.ts
│ │ ├── sr_RS.ts
│ │ ├── sv_SE.ts
│ │ ├── ta_IN.ts
│ │ ├── th_TH.ts
│ │ ├── tr_TR.ts
│ │ ├── uk_UA.ts
│ │ ├── ur_PK.ts
│ │ ├── vi_VN.ts
│ │ ├── zh_CN.ts
│ │ ├── zh_HK.ts
│ │ └── zh_TW.ts
│ ├── locale-provider/
│ │ ├── LocaleReceiver.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── index.test.js.snap
│ │ │ └── index.test.js
│ │ └── index.ts
│ ├── mentions/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── async.vue
│ │ │ ├── basic.vue
│ │ │ ├── form.vue
│ │ │ ├── index.vue
│ │ │ ├── placement.vue
│ │ │ ├── prefix.vue
│ │ │ ├── readonly.vue
│ │ │ └── status.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── menu/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── horizontal.vue
│ │ │ ├── index.vue
│ │ │ ├── inline-collapsed.vue
│ │ │ ├── inline.vue
│ │ │ ├── sider-current.vue
│ │ │ ├── submenu-theme.vue
│ │ │ ├── switch-mode.vue
│ │ │ ├── theme.vue
│ │ │ └── vertical.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── src/
│ │ │ ├── Divider.tsx
│ │ │ ├── InlineSubMenuList.tsx
│ │ │ ├── ItemGroup.tsx
│ │ │ ├── Menu.tsx
│ │ │ ├── MenuItem.tsx
│ │ │ ├── OverrideContext.ts
│ │ │ ├── PopupTrigger.tsx
│ │ │ ├── SubMenu.tsx
│ │ │ ├── SubMenuList.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── useDirectionStyle.ts
│ │ │ │ ├── useItems.tsx
│ │ │ │ ├── useKeyPath.ts
│ │ │ │ └── useMenuContext.ts
│ │ │ ├── interface.ts
│ │ │ └── placements.ts
│ │ └── style/
│ │ ├── horizontal.ts
│ │ ├── index.ts
│ │ ├── rtl.ts
│ │ ├── theme.ts
│ │ └── vertical.ts
│ ├── message/
│ │ ├── PurePanel.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── custom-style.vue
│ │ │ ├── duration.vue
│ │ │ ├── hook.vue
│ │ │ ├── index.vue
│ │ │ ├── info.vue
│ │ │ ├── loading.vue
│ │ │ ├── other.vue
│ │ │ ├── thenable.vue
│ │ │ └── update.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── useMessage.tsx
│ ├── modal/
│ │ ├── ConfirmDialog.tsx
│ │ ├── Modal.tsx
│ │ ├── __tests__/
│ │ │ ├── Modal.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Modal.test.js.snap
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── confirm.test.js
│ │ │ └── demo.test.js
│ │ ├── confirm.tsx
│ │ ├── demo/
│ │ │ ├── async.vue
│ │ │ ├── basic.vue
│ │ │ ├── button-props.vue
│ │ │ ├── confirm-promise.vue
│ │ │ ├── confirm-router.vue
│ │ │ ├── confirm.vue
│ │ │ ├── footer.vue
│ │ │ ├── fullscreen.vue
│ │ │ ├── hook-modal.vue
│ │ │ ├── index.vue
│ │ │ ├── info.vue
│ │ │ ├── locale.vue
│ │ │ ├── manual.vue
│ │ │ ├── modal-render.vue
│ │ │ ├── position.vue
│ │ │ └── width.vue
│ │ ├── destroyFns.ts
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── locale.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── useModal/
│ │ ├── HookModal.tsx
│ │ └── index.tsx
│ ├── notification/
│ │ ├── PurePanel.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── index.test.js
│ │ │ └── placement.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── custom-icon.vue
│ │ │ ├── custom-style.vue
│ │ │ ├── duration.vue
│ │ │ ├── hook.vue
│ │ │ ├── index.vue
│ │ │ ├── placement.vue
│ │ │ ├── update.vue
│ │ │ ├── with-btn.vue
│ │ │ └── with-icon.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── style/
│ │ │ ├── index.ts
│ │ │ └── placement.ts
│ │ ├── useNotification.tsx
│ │ └── util.ts
│ ├── page-header/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── actions.vue
│ │ │ ├── basic.vue
│ │ │ ├── breadcrumb.vue
│ │ │ ├── content.vue
│ │ │ ├── ghost.vue
│ │ │ ├── index.vue
│ │ │ └── responsive.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── pagination/
│ │ ├── Pagination.tsx
│ │ ├── Select.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── changer.vue
│ │ │ ├── custom-changer.vue
│ │ │ ├── index.vue
│ │ │ ├── itemRender.vue
│ │ │ ├── jump.vue
│ │ │ ├── mini.vue
│ │ │ ├── more.vue
│ │ │ ├── simple.vue
│ │ │ └── total.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── popconfirm/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── dynamic-trigger.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── local.vue
│ │ │ ├── placement.vue
│ │ │ └── promise.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── popover/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── arrow-point-at-center.vue
│ │ │ ├── basic.vue
│ │ │ ├── control.vue
│ │ │ ├── hover-with-click.vue
│ │ │ ├── index.vue
│ │ │ ├── placement.vue
│ │ │ └── triggerType.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── progress/
│ │ ├── Circle.tsx
│ │ ├── Line.tsx
│ │ ├── Steps.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── circle-dynamic.vue
│ │ │ ├── circle-micro.vue
│ │ │ ├── circle-mini.vue
│ │ │ ├── circle.vue
│ │ │ ├── dashboard.vue
│ │ │ ├── dynamic.vue
│ │ │ ├── format.vue
│ │ │ ├── gradient-line.vue
│ │ │ ├── index.vue
│ │ │ ├── line-mini.vue
│ │ │ ├── line.vue
│ │ │ ├── linecap.vue
│ │ │ ├── segment.vue
│ │ │ ├── size.vue
│ │ │ └── steps.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── progress.tsx
│ │ ├── props.ts
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── utils.ts
│ ├── qrcode/
│ │ ├── QRCode.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── base.vue
│ │ │ ├── customColor.vue
│ │ │ ├── customSize.vue
│ │ │ ├── customType.vue
│ │ │ ├── download.vue
│ │ │ ├── errorLevel.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── popover.vue
│ │ │ └── status.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── qrcodegen.ts
│ │ └── style/
│ │ └── index.ts
│ ├── radio/
│ │ ├── Group.tsx
│ │ ├── Radio.tsx
│ │ ├── RadioButton.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ ├── group.test.js.snap
│ │ │ │ └── radio.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── group.test.js
│ │ │ └── radio.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── disabled.vue
│ │ │ ├── index.vue
│ │ │ ├── radioButton-solid.vue
│ │ │ ├── radioButton.vue
│ │ │ ├── radioGroup-more.vue
│ │ │ ├── radioGroup-options.vue
│ │ │ ├── radioGroup-with-name.vue
│ │ │ ├── radioGroup.vue
│ │ │ └── size.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ └── style/
│ │ └── index.tsx
│ ├── rate/
│ │ ├── Star.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── character.vue
│ │ │ ├── clear.vue
│ │ │ ├── disabled.vue
│ │ │ ├── half.vue
│ │ │ ├── index.vue
│ │ │ └── text.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── util.ts
│ ├── result/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── 403.vue
│ │ │ ├── 404.vue
│ │ │ ├── 500.vue
│ │ │ ├── customIcon.vue
│ │ │ ├── error.vue
│ │ │ ├── index.vue
│ │ │ ├── info.vue
│ │ │ ├── success.vue
│ │ │ └── warning.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── noFound.tsx
│ │ ├── serverError.tsx
│ │ ├── style/
│ │ │ └── index.tsx
│ │ └── unauthorized.tsx
│ ├── row/
│ │ ├── index.ts
│ │ └── style/
│ │ └── index.ts
│ ├── segmented/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── block.vue
│ │ │ ├── custom.vue
│ │ │ ├── disabled.vue
│ │ │ ├── dynamic.vue
│ │ │ ├── index.vue
│ │ │ └── size.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── src/
│ │ │ ├── MotionThumb.tsx
│ │ │ ├── index.ts
│ │ │ └── segmented.tsx
│ │ └── style/
│ │ └── index.ts
│ ├── select/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── automatic-tokenization.vue
│ │ │ ├── basic.vue
│ │ │ ├── big-data.vue
│ │ │ ├── coordinate.vue
│ │ │ ├── custom-dropdown-menu.vue
│ │ │ ├── field-names.vue
│ │ │ ├── hide-selected.vue
│ │ │ ├── index.vue
│ │ │ ├── label-in-value.vue
│ │ │ ├── multiple.vue
│ │ │ ├── optgroup.vue
│ │ │ ├── option-label-prop.vue
│ │ │ ├── placement.vue
│ │ │ ├── responsive.vue
│ │ │ ├── search-box.vue
│ │ │ ├── search.vue
│ │ │ ├── select-users.vue
│ │ │ ├── size.vue
│ │ │ ├── status.vue
│ │ │ ├── suffix.vue
│ │ │ └── tags.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ ├── dropdown.ts
│ │ │ ├── index.ts
│ │ │ ├── multiple.ts
│ │ │ └── single.ts
│ │ └── utils/
│ │ └── iconUtil.tsx
│ ├── skeleton/
│ │ ├── Avatar.tsx
│ │ ├── Button.tsx
│ │ ├── Element.tsx
│ │ ├── Image.tsx
│ │ ├── Input.tsx
│ │ ├── Paragraph.tsx
│ │ ├── Skeleton.tsx
│ │ ├── Title.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── active.vue
│ │ │ ├── basic.vue
│ │ │ ├── children.vue
│ │ │ ├── complex.vue
│ │ │ ├── element.vue
│ │ │ ├── index.vue
│ │ │ └── list.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── slider/
│ │ ├── SliderTooltip.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── event.vue
│ │ │ ├── icon-slider.vue
│ │ │ ├── index.vue
│ │ │ ├── input-number.vue
│ │ │ ├── mark.vue
│ │ │ ├── reverse.vue
│ │ │ ├── show-tooltip.vue
│ │ │ ├── tip-formatter.vue
│ │ │ └── vertical.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── space/
│ │ ├── Compact.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── align.vue
│ │ │ ├── base.vue
│ │ │ ├── compact-button-vertical.vue
│ │ │ ├── compact-buttons.vue
│ │ │ ├── compact.vue
│ │ │ ├── customize.vue
│ │ │ ├── index.vue
│ │ │ ├── size.vue
│ │ │ ├── split.vue
│ │ │ ├── vertical.vue
│ │ │ └── wrap.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ ├── compact.tsx
│ │ └── index.tsx
│ ├── spin/
│ │ ├── Spin.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── delay.test.js
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── custom-indicator.vue
│ │ │ ├── delay.vue
│ │ │ ├── index.vue
│ │ │ ├── inside.vue
│ │ │ ├── nested.vue
│ │ │ ├── size.vue
│ │ │ └── tip.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── statistic/
│ │ ├── Countdown.tsx
│ │ ├── Number.tsx
│ │ ├── Statistic.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── card.vue
│ │ │ ├── countdown-slot.vue
│ │ │ ├── countdown.vue
│ │ │ ├── index.vue
│ │ │ └── unit.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ └── index.tsx
│ │ └── utils.ts
│ ├── steps/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── clickable.vue
│ │ │ ├── customized-progress-dot.vue
│ │ │ ├── error.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── inline.vue
│ │ │ ├── label-placement.vue
│ │ │ ├── nav.vue
│ │ │ ├── progress-dot.vue
│ │ │ ├── progress.vue
│ │ │ ├── simple.vue
│ │ │ ├── small-size.vue
│ │ │ ├── step-next.vue
│ │ │ ├── vertical-small.vue
│ │ │ └── vertical.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ ├── custom-icon.ts
│ │ ├── index.tsx
│ │ ├── inline.ts
│ │ ├── label-placement.ts
│ │ ├── nav.ts
│ │ ├── progress-dot.ts
│ │ ├── progress.ts
│ │ ├── rtl.ts
│ │ ├── small.ts
│ │ └── vertical.ts
│ ├── style/
│ │ ├── compact-item-vertical.ts
│ │ ├── compact-item.ts
│ │ ├── index.ts
│ │ ├── motion/
│ │ │ ├── collapse.ts
│ │ │ ├── fade.ts
│ │ │ ├── index.ts
│ │ │ ├── motion.ts
│ │ │ ├── move.ts
│ │ │ ├── slide.ts
│ │ │ └── zoom.ts
│ │ ├── operationUnit.ts
│ │ ├── placementArrow.ts
│ │ ├── presetColor.tsx
│ │ ├── reset.css
│ │ └── roundedArrow.ts
│ ├── switch/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── disabled.vue
│ │ │ ├── index.vue
│ │ │ ├── loading.vue
│ │ │ ├── size.vue
│ │ │ └── text.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── table/
│ │ ├── Column.tsx
│ │ ├── ColumnGroup.tsx
│ │ ├── ExpandIcon.tsx
│ │ ├── Table.tsx
│ │ ├── __tests__/
│ │ │ ├── Table.filter.test.js
│ │ │ ├── Table.pagination.test.js
│ │ │ ├── Table.rowSelection.test.js
│ │ │ ├── Table.sorter.test.js
│ │ │ ├── Table.test.js
│ │ │ ├── __snapshots__/
│ │ │ │ ├── Table.filter.test.js.snap
│ │ │ │ ├── Table.pagination.test.js.snap
│ │ │ │ ├── Table.rowSelection.test.js.snap
│ │ │ │ ├── Table.sorter.test.js.snap
│ │ │ │ ├── Table.test.js.snap
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── empty.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── empty.test.js
│ │ ├── context.ts
│ │ ├── demo/
│ │ │ ├── ajax.vue
│ │ │ ├── basic.vue
│ │ │ ├── big-data.vue
│ │ │ ├── bordered.vue
│ │ │ ├── colspan-rowspan.vue
│ │ │ ├── custom-filter-panel.vue
│ │ │ ├── edit-cell.vue
│ │ │ ├── edit-row.vue
│ │ │ ├── ellipsis.vue
│ │ │ ├── expand-children.vue
│ │ │ ├── expand.vue
│ │ │ ├── filter-in-tree.vue
│ │ │ ├── filter-search.vue
│ │ │ ├── fixed-columns-header.vue
│ │ │ ├── fixed-columns.vue
│ │ │ ├── fixed-header.vue
│ │ │ ├── grouping-columns.vue
│ │ │ ├── head.vue
│ │ │ ├── index.vue
│ │ │ ├── multiple-sorter.vue
│ │ │ ├── nested-table.vue
│ │ │ ├── order-column.vue
│ │ │ ├── reset-filter.vue
│ │ │ ├── resizable-column.vue
│ │ │ ├── responsive.vue
│ │ │ ├── row-selection-and-operation.vue
│ │ │ ├── row-selection-custom.vue
│ │ │ ├── row-selection.vue
│ │ │ ├── size.vue
│ │ │ ├── sticky.vue
│ │ │ ├── stripe.vue
│ │ │ ├── summary.vue
│ │ │ └── template.vue
│ │ ├── hooks/
│ │ │ ├── useColumns.tsx
│ │ │ ├── useFilter/
│ │ │ │ ├── FilterDropdown.tsx
│ │ │ │ ├── FilterSearch.tsx
│ │ │ │ ├── FilterWrapper.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── useLazyKVMap.ts
│ │ │ ├── usePagination.ts
│ │ │ ├── useSelection.tsx
│ │ │ ├── useSorter.tsx
│ │ │ └── useTitleColumns.tsx
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.tsx
│ │ ├── style/
│ │ │ ├── bordered.ts
│ │ │ ├── ellipsis.ts
│ │ │ ├── empty.ts
│ │ │ ├── expand.ts
│ │ │ ├── filter.ts
│ │ │ ├── fixed.ts
│ │ │ ├── index.ts
│ │ │ ├── pagination.ts
│ │ │ ├── radius.ts
│ │ │ ├── resize.ts
│ │ │ ├── rtl.ts
│ │ │ ├── selection.ts
│ │ │ ├── size.ts
│ │ │ ├── sorter.ts
│ │ │ ├── sticky.ts
│ │ │ └── summary.ts
│ │ └── util.ts
│ ├── tabs/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── card-top.vue
│ │ │ ├── card.vue
│ │ │ ├── centered.vue
│ │ │ ├── custom-add-trigger.vue
│ │ │ ├── custom-tab-bar.vue
│ │ │ ├── disabled.vue
│ │ │ ├── editable-card.vue
│ │ │ ├── extra.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ ├── position.vue
│ │ │ ├── size.vue
│ │ │ └── slide.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── src/
│ │ │ ├── TabContext.ts
│ │ │ ├── TabNavList/
│ │ │ │ ├── AddButton.tsx
│ │ │ │ ├── OperationNode.tsx
│ │ │ │ ├── TabNode.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── TabPanelList/
│ │ │ │ ├── TabPane.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Tabs.tsx
│ │ │ ├── hooks/
│ │ │ │ ├── useOffsets.ts
│ │ │ │ ├── useRaf.ts
│ │ │ │ ├── useSyncState.ts
│ │ │ │ └── useTouchMove.ts
│ │ │ ├── index.ts
│ │ │ └── interface.ts
│ │ └── style/
│ │ ├── index.ts
│ │ └── motion.ts
│ ├── tag/
│ │ ├── CheckableTag.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── border-less.vue
│ │ │ ├── checkable.vue
│ │ │ ├── colorful.vue
│ │ │ ├── control.vue
│ │ │ ├── hot-tags.vue
│ │ │ ├── icon.vue
│ │ │ ├── index.vue
│ │ │ └── status.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.ts
│ ├── theme/
│ │ ├── __tests__/
│ │ │ └── util.test.js
│ │ ├── convertLegacyToken.ts
│ │ ├── index.ts
│ │ ├── interface/
│ │ │ ├── alias.ts
│ │ │ ├── components.ts
│ │ │ ├── index.ts
│ │ │ ├── maps/
│ │ │ │ ├── colors.ts
│ │ │ │ ├── font.ts
│ │ │ │ ├── index.ts
│ │ │ │ ├── size.ts
│ │ │ │ └── style.ts
│ │ │ ├── presetColors.ts
│ │ │ └── seeds.ts
│ │ ├── internal.ts
│ │ ├── themes/
│ │ │ ├── ColorMap.ts
│ │ │ ├── compact/
│ │ │ │ ├── genCompactSizeMapToken.ts
│ │ │ │ └── index.ts
│ │ │ ├── dark/
│ │ │ │ ├── colorAlgorithm.ts
│ │ │ │ ├── colors.ts
│ │ │ │ └── index.ts
│ │ │ ├── default/
│ │ │ │ ├── colorAlgorithm.ts
│ │ │ │ ├── colors.ts
│ │ │ │ └── index.ts
│ │ │ ├── seed.ts
│ │ │ └── shared/
│ │ │ ├── genColorMapToken.ts
│ │ │ ├── genCommonMapToken.ts
│ │ │ ├── genControlHeight.ts
│ │ │ ├── genFontMapToken.ts
│ │ │ ├── genFontSizes.ts
│ │ │ ├── genRadius.ts
│ │ │ └── genSizeMapToken.ts
│ │ └── util/
│ │ ├── alias.ts
│ │ ├── genComponentStyleHook.ts
│ │ ├── getAlphaColor.ts
│ │ └── statistic.ts
│ ├── time-picker/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── index.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── date-fns.tsx
│ │ ├── dayjs.tsx
│ │ ├── demo/
│ │ │ ├── 12hours.vue
│ │ │ ├── addon.vue
│ │ │ ├── basic.vue
│ │ │ ├── bordered.vue
│ │ │ ├── disabled.vue
│ │ │ ├── hide-column.vue
│ │ │ ├── index.vue
│ │ │ ├── interval-options.vue
│ │ │ ├── placement.vue
│ │ │ ├── range-picker.vue
│ │ │ ├── size.vue
│ │ │ ├── status.vue
│ │ │ ├── suffix.vue
│ │ │ └── value.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── locale/
│ │ │ ├── ar_EG.ts
│ │ │ ├── az_AZ.ts
│ │ │ ├── bg_BG.ts
│ │ │ ├── bn_BD.ts
│ │ │ ├── by_BY.ts
│ │ │ ├── ca_ES.ts
│ │ │ ├── ckb_IQ.ts
│ │ │ ├── cs_CZ.ts
│ │ │ ├── da_DK.ts
│ │ │ ├── de_DE.ts
│ │ │ ├── el_GR.ts
│ │ │ ├── en_GB.ts
│ │ │ ├── en_US.ts
│ │ │ ├── es_ES.ts
│ │ │ ├── et_EE.ts
│ │ │ ├── fa_IR.ts
│ │ │ ├── fi_FI.ts
│ │ │ ├── fr_BE.ts
│ │ │ ├── fr_CA.ts
│ │ │ ├── fr_FR.ts
│ │ │ ├── ga_IE.ts
│ │ │ ├── gl_ES.ts
│ │ │ ├── he_IL.ts
│ │ │ ├── hi_IN.ts
│ │ │ ├── hr_HR.ts
│ │ │ ├── hu_HU.ts
│ │ │ ├── id_ID.ts
│ │ │ ├── is_IS.ts
│ │ │ ├── it_IT.ts
│ │ │ ├── ja_JP.ts
│ │ │ ├── ka_GE.ts
│ │ │ ├── kk_KZ.ts
│ │ │ ├── km_KH.ts
│ │ │ ├── kmr_IQ.ts
│ │ │ ├── kn_IN.ts
│ │ │ ├── ko_KR.ts
│ │ │ ├── lt_LT.ts
│ │ │ ├── lv_LV.ts
│ │ │ ├── mk_MK.ts
│ │ │ ├── ml_IN.ts
│ │ │ ├── mn_MN.ts
│ │ │ ├── ms_MY.ts
│ │ │ ├── nb_NO.ts
│ │ │ ├── nl_BE.ts
│ │ │ ├── nl_NL.ts
│ │ │ ├── pl_PL.ts
│ │ │ ├── pt_BR.ts
│ │ │ ├── pt_PT.ts
│ │ │ ├── ro_RO.ts
│ │ │ ├── ru_RU.ts
│ │ │ ├── sk_SK.ts
│ │ │ ├── sl_SI.ts
│ │ │ ├── sr_RS.ts
│ │ │ ├── sv_SE.ts
│ │ │ ├── ta_IN.ts
│ │ │ ├── th_TH.ts
│ │ │ ├── tr_TR.ts
│ │ │ ├── uk_UA.ts
│ │ │ ├── ur_PK.ts
│ │ │ ├── vi_VN.ts
│ │ │ ├── zh_CN.ts
│ │ │ └── zh_TW.ts
│ │ ├── moment.tsx
│ │ └── time-picker.tsx
│ ├── timeline/
│ │ ├── Timeline.tsx
│ │ ├── TimelineItem.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── alternate.vue
│ │ │ ├── basic.vue
│ │ │ ├── color.vue
│ │ │ ├── custom.vue
│ │ │ ├── index.vue
│ │ │ ├── label.vue
│ │ │ ├── pending.vue
│ │ │ └── right.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── tooltip/
│ │ ├── Tooltip.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── tooltip.test.js
│ │ ├── abstractTooltipProps.ts
│ │ ├── demo/
│ │ │ ├── arrow-point-at-center.vue
│ │ │ ├── arrow.vue
│ │ │ ├── auto-adjust-overflow.vue
│ │ │ ├── basic.vue
│ │ │ ├── color.vue
│ │ │ ├── index.vue
│ │ │ └── placement.vue
│ │ ├── index.en-US.md
│ │ ├── index.ts
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── util.ts
│ ├── tour/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── index.vue
│ │ │ ├── indicator.vue
│ │ │ ├── mask.vue
│ │ │ ├── non-modal.vue
│ │ │ └── placement.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── panelRender.tsx
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── useMergedType.ts
│ ├── transfer/
│ │ ├── ListBody.tsx
│ │ ├── ListItem.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ ├── index.test.js.snap
│ │ │ │ ├── list.test.js.snap
│ │ │ │ └── search.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── index.test.js
│ │ │ ├── list.test.js
│ │ │ └── search.test.js
│ │ ├── demo/
│ │ │ ├── advanced.vue
│ │ │ ├── basic.vue
│ │ │ ├── custom-item.vue
│ │ │ ├── custom-select-all-labels.vue
│ │ │ ├── index.vue
│ │ │ ├── oneway.vue
│ │ │ ├── pagination.vue
│ │ │ ├── search.vue
│ │ │ ├── status.vue
│ │ │ ├── table-transfer.vue
│ │ │ └── tree-transfer.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.ts
│ │ ├── list.tsx
│ │ ├── operation.tsx
│ │ ├── search.tsx
│ │ └── style/
│ │ └── index.tsx
│ ├── tree/
│ │ ├── DirectoryTree.tsx
│ │ ├── Tree.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── util.test.js
│ │ ├── breakchange.md
│ │ ├── demo/
│ │ │ ├── accordion.vue
│ │ │ ├── basic.vue
│ │ │ ├── context-menu.vue
│ │ │ ├── customized-icon.vue
│ │ │ ├── directory.vue
│ │ │ ├── draggable.vue
│ │ │ ├── dynamic.vue
│ │ │ ├── index.vue
│ │ │ ├── line.vue
│ │ │ ├── replaceFields.vue
│ │ │ ├── search.vue
│ │ │ ├── switcher-icon.vue
│ │ │ └── virtual-scroll.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ └── index.ts
│ │ └── utils/
│ │ ├── dictUtil.ts
│ │ ├── dropIndicator.tsx
│ │ └── iconUtil.tsx
│ ├── tree-select/
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── async.vue
│ │ │ ├── basic.vue
│ │ │ ├── checkable.vue
│ │ │ ├── custom-tag-render.vue
│ │ │ ├── highlight.vue
│ │ │ ├── index.vue
│ │ │ ├── multiple.vue
│ │ │ ├── placement.vue
│ │ │ ├── replaceFields.vue
│ │ │ ├── status.vue
│ │ │ ├── suffix.vue
│ │ │ ├── tree-line.vue
│ │ │ └── virtual-scroll.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ └── style/
│ │ └── index.tsx
│ ├── typography/
│ │ ├── Base.tsx
│ │ ├── Editable.tsx
│ │ ├── Link.tsx
│ │ ├── Paragraph.tsx
│ │ ├── Text.tsx
│ │ ├── Title.tsx
│ │ ├── Typography.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ └── demo.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ └── index.test.js
│ │ ├── demo/
│ │ │ ├── basic.vue
│ │ │ ├── ellipsis.vue
│ │ │ ├── index.vue
│ │ │ ├── interactive.vue
│ │ │ ├── suffix.vue
│ │ │ ├── text.vue
│ │ │ └── title.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── style/
│ │ │ ├── index.tsx
│ │ │ └── mixins.tsx
│ │ └── util.tsx
│ ├── upload/
│ │ ├── Dragger.tsx
│ │ ├── Upload.tsx
│ │ ├── UploadList/
│ │ │ ├── ListItem.tsx
│ │ │ └── index.tsx
│ │ ├── __tests__/
│ │ │ ├── __snapshots__/
│ │ │ │ ├── demo.test.js.snap
│ │ │ │ └── uploadlist.test.js.snap
│ │ │ ├── demo.test.js
│ │ │ ├── mock.js
│ │ │ ├── requests.js
│ │ │ ├── upload.test.js
│ │ │ └── uploadlist.test.js
│ │ ├── demo/
│ │ │ ├── avatar.vue
│ │ │ ├── basic.vue
│ │ │ ├── custom-render.vue
│ │ │ ├── customize-progress-bar.vue
│ │ │ ├── defaultFileList.vue
│ │ │ ├── directory.vue
│ │ │ ├── drag.vue
│ │ │ ├── fileList.vue
│ │ │ ├── index.vue
│ │ │ ├── max-count.vue
│ │ │ ├── picture-card.vue
│ │ │ ├── picture-style.vue
│ │ │ ├── preview-file.vue
│ │ │ ├── transform-file.vue
│ │ │ ├── upload-custom-action-icon.vue
│ │ │ ├── upload-manually.vue
│ │ │ └── upload-png-only.vue
│ │ ├── index.en-US.md
│ │ ├── index.tsx
│ │ ├── index.zh-CN.md
│ │ ├── interface.tsx
│ │ ├── style/
│ │ │ ├── dragger.ts
│ │ │ ├── index.ts
│ │ │ ├── list.ts
│ │ │ ├── motion.ts
│ │ │ ├── picture.ts
│ │ │ └── rtl.ts
│ │ └── utils.tsx
│ ├── vc-align/
│ │ ├── Align.tsx
│ │ ├── hooks/
│ │ │ └── useBuffer.tsx
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ └── util.ts
│ ├── vc-cascader/
│ │ ├── Cascader.tsx
│ │ ├── OptionList/
│ │ │ ├── Checkbox.tsx
│ │ │ ├── Column.tsx
│ │ │ ├── index.tsx
│ │ │ ├── useActive.ts
│ │ │ └── useKeyboard.ts
│ │ ├── context.ts
│ │ ├── hooks/
│ │ │ ├── useDisplayValues.ts
│ │ │ ├── useEntities.ts
│ │ │ ├── useMissingValues.ts
│ │ │ ├── useSearchConfig.ts
│ │ │ └── useSearchOptions.ts
│ │ ├── index.tsx
│ │ └── utils/
│ │ ├── commonUtil.ts
│ │ └── treeUtil.ts
│ ├── vc-checkbox/
│ │ └── Checkbox.tsx
│ ├── vc-dialog/
│ │ ├── Content.tsx
│ │ ├── Dialog.tsx
│ │ ├── DialogWrap.tsx
│ │ ├── IDialogPropTypes.ts
│ │ ├── Mask.tsx
│ │ ├── index.ts
│ │ └── util.ts
│ ├── vc-drawer/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── DrawerChild.tsx
│ │ ├── DrawerWrapper.tsx
│ │ ├── IDrawerPropTypes.ts
│ │ └── utils.ts
│ ├── vc-dropdown/
│ │ ├── Dropdown.tsx
│ │ ├── index.ts
│ │ └── placements.ts
│ ├── vc-image/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── Image.tsx
│ │ ├── Preview.tsx
│ │ ├── PreviewGroup.tsx
│ │ ├── getFixScaleEleTransPosition.ts
│ │ └── hooks/
│ │ └── useFrameSetState.ts
│ ├── vc-input/
│ │ ├── BaseInput.tsx
│ │ ├── Input.tsx
│ │ ├── inputProps.ts
│ │ └── utils/
│ │ ├── commonUtils.ts
│ │ └── types.ts
│ ├── vc-mentions/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── DropdownMenu.tsx
│ │ ├── KeywordTrigger.tsx
│ │ ├── Mentions.tsx
│ │ ├── MentionsContext.ts
│ │ ├── Option.tsx
│ │ ├── mentionsProps.ts
│ │ └── util.ts
│ ├── vc-notification/
│ │ ├── HookNotification.tsx
│ │ ├── Notice.tsx
│ │ ├── Notification.tsx
│ │ ├── index.ts
│ │ └── useNotification.tsx
│ ├── vc-overflow/
│ │ ├── Item.tsx
│ │ ├── Overflow.tsx
│ │ ├── RawItem.tsx
│ │ ├── context.ts
│ │ └── index.ts
│ ├── vc-pagination/
│ │ ├── KeyCode.ts
│ │ ├── Options.tsx
│ │ ├── Pager.tsx
│ │ ├── Pagination.tsx
│ │ ├── index.ts
│ │ └── locale/
│ │ ├── ar_EG.ts
│ │ ├── az_AZ.ts
│ │ ├── bg_BG.ts
│ │ ├── bn_BD.ts
│ │ ├── by_BY.ts
│ │ ├── ca_ES.ts
│ │ ├── ckb_IQ.ts
│ │ ├── cs_CZ.ts
│ │ ├── da_DK.ts
│ │ ├── de_DE.ts
│ │ ├── el_GR.ts
│ │ ├── en_GB.ts
│ │ ├── en_US.ts
│ │ ├── es_ES.ts
│ │ ├── et_EE.ts
│ │ ├── fa_IR.ts
│ │ ├── fi_FI.ts
│ │ ├── fr_BE.ts
│ │ ├── fr_CA.ts
│ │ ├── fr_FR.ts
│ │ ├── ga_IE.ts
│ │ ├── gl_ES.ts
│ │ ├── he_IL.ts
│ │ ├── hi_IN.ts
│ │ ├── hr_HR.ts
│ │ ├── hu_HU.ts
│ │ ├── id_ID.ts
│ │ ├── is_IS.ts
│ │ ├── it_IT.ts
│ │ ├── ja_JP.ts
│ │ ├── ka_GE.ts
│ │ ├── kk_KZ.ts
│ │ ├── km_KH.ts
│ │ ├── kmr_IQ.ts
│ │ ├── kn_IN.ts
│ │ ├── ko_KR.ts
│ │ ├── lt_LT.ts
│ │ ├── lv_LV.ts
│ │ ├── mk_MK.ts
│ │ ├── ml_IN.ts
│ │ ├── mm_MM.ts
│ │ ├── mn_MN.ts
│ │ ├── ms_MY.ts
│ │ ├── nb_NO.ts
│ │ ├── nl_BE.ts
│ │ ├── nl_NL.ts
│ │ ├── pa_IN.ts
│ │ ├── pb_IN.ts
│ │ ├── pl_PL.ts
│ │ ├── pt_BR.ts
│ │ ├── pt_PT.ts
│ │ ├── ro_RO.ts
│ │ ├── ru_RU.ts
│ │ ├── sk_SK.ts
│ │ ├── sl_SI.ts
│ │ ├── sr_RS.ts
│ │ ├── sv_SE.ts
│ │ ├── ta_IN.ts
│ │ ├── th_TH.ts
│ │ ├── tr_TR.ts
│ │ ├── ug_CN.ts
│ │ ├── uk_UA.ts
│ │ ├── ur_PK.ts
│ │ ├── vi_VN.ts
│ │ ├── zh_CN.ts
│ │ └── zh_TW.ts
│ ├── vc-picker/
│ │ ├── PanelContext.tsx
│ │ ├── Picker.tsx
│ │ ├── PickerPanel.tsx
│ │ ├── PickerTrigger.tsx
│ │ ├── PresetPanel.tsx
│ │ ├── RangeContext.tsx
│ │ ├── RangePicker.tsx
│ │ ├── generate/
│ │ │ ├── dateFns.ts
│ │ │ ├── dayjs.ts
│ │ │ ├── index.ts
│ │ │ └── moment.ts
│ │ ├── hooks/
│ │ │ ├── useCellClassName.ts
│ │ │ ├── useHoverValue.ts
│ │ │ ├── useMergeProps.ts
│ │ │ ├── usePickerInput.ts
│ │ │ ├── usePresets.ts
│ │ │ ├── useRangeDisabled.ts
│ │ │ ├── useRangeViewDates.ts
│ │ │ ├── useTextValueMapping.ts
│ │ │ └── useValueTexts.ts
│ │ ├── index.tsx
│ │ ├── interface.ts
│ │ ├── locale/
│ │ │ ├── ar_EG.ts
│ │ │ ├── az_AZ.ts
│ │ │ ├── bg_BG.ts
│ │ │ ├── bn_BD.ts
│ │ │ ├── by_BY.ts
│ │ │ ├── ca_ES.ts
│ │ │ ├── ckb_IQ.ts
│ │ │ ├── cs_CZ.ts
│ │ │ ├── da_DK.ts
│ │ │ ├── de_DE.ts
│ │ │ ├── el_GR.ts
│ │ │ ├── en_GB.ts
│ │ │ ├── en_US.ts
│ │ │ ├── es_ES.ts
│ │ │ ├── es_MX.ts
│ │ │ ├── et_EE.ts
│ │ │ ├── fa_IR.ts
│ │ │ ├── fi_FI.ts
│ │ │ ├── fr_BE.ts
│ │ │ ├── fr_CA.ts
│ │ │ ├── fr_FR.ts
│ │ │ ├── ga_IE.ts
│ │ │ ├── gl_ES.ts
│ │ │ ├── he_IL.ts
│ │ │ ├── hi_IN.ts
│ │ │ ├── hr_HR.ts
│ │ │ ├── hu_HU.ts
│ │ │ ├── id_ID.ts
│ │ │ ├── is_IS.ts
│ │ │ ├── it_IT.ts
│ │ │ ├── ja_JP.ts
│ │ │ ├── ka_GE.ts
│ │ │ ├── kk_KZ.ts
│ │ │ ├── km_KH.ts
│ │ │ ├── kmr_IQ.ts
│ │ │ ├── kn_IN.ts
│ │ │ ├── ko_KR.ts
│ │ │ ├── lt_LT.ts
│ │ │ ├── lv_LV.ts
│ │ │ ├── mk_MK.ts
│ │ │ ├── ml_IN.ts
│ │ │ ├── mm_MM.ts
│ │ │ ├── mn_MN.ts
│ │ │ ├── ms_MY.ts
│ │ │ ├── nb_NO.ts
│ │ │ ├── nl_BE.ts
│ │ │ ├── nl_NL.ts
│ │ │ ├── pl_PL.ts
│ │ │ ├── pt_BR.ts
│ │ │ ├── pt_PT.ts
│ │ │ ├── ro_RO.ts
│ │ │ ├── ru_RU.ts
│ │ │ ├── sk_SK.ts
│ │ │ ├── sl_SI.ts
│ │ │ ├── sr_RS.ts
│ │ │ ├── sv_SE.ts
│ │ │ ├── ta_IN.ts
│ │ │ ├── th_TH.ts
│ │ │ ├── tr_TR.ts
│ │ │ ├── ug_CN.ts
│ │ │ ├── uk_UA.ts
│ │ │ ├── ur_PK.ts
│ │ │ ├── vi_VN.ts
│ │ │ ├── zh_CN.ts
│ │ │ └── zh_TW.ts
│ │ ├── panels/
│ │ │ ├── DatePanel/
│ │ │ │ ├── DateBody.tsx
│ │ │ │ ├── DateHeader.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── DatetimePanel/
│ │ │ │ └── index.tsx
│ │ │ ├── DecadePanel/
│ │ │ │ ├── DecadeBody.tsx
│ │ │ │ ├── DecadeHeader.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── Header.tsx
│ │ │ ├── MonthPanel/
│ │ │ │ ├── MonthBody.tsx
│ │ │ │ ├── MonthHeader.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── PanelBody.tsx
│ │ │ ├── QuarterPanel/
│ │ │ │ ├── QuarterBody.tsx
│ │ │ │ ├── QuarterHeader.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── TimePanel/
│ │ │ │ ├── TimeBody.tsx
│ │ │ │ ├── TimeHeader.tsx
│ │ │ │ ├── TimeUnitColumn.tsx
│ │ │ │ └── index.tsx
│ │ │ ├── WeekPanel/
│ │ │ │ └── index.tsx
│ │ │ └── YearPanel/
│ │ │ ├── YearBody.tsx
│ │ │ ├── YearHeader.tsx
│ │ │ └── index.tsx
│ │ └── utils/
│ │ ├── dateUtil.ts
│ │ ├── getExtraFooter.tsx
│ │ ├── getRanges.tsx
│ │ ├── miscUtil.ts
│ │ ├── timeUtil.ts
│ │ ├── uiUtil.ts
│ │ └── warnUtil.ts
│ ├── vc-progress/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── Circle.tsx
│ │ ├── Line.tsx
│ │ ├── common.ts
│ │ ├── index.ts
│ │ └── types.ts
│ ├── vc-resize-observer/
│ │ └── index.tsx
│ ├── vc-select/
│ │ ├── BaseSelect.tsx
│ │ ├── OptGroup.tsx
│ │ ├── Option.tsx
│ │ ├── OptionList.tsx
│ │ ├── Select.tsx
│ │ ├── SelectContext.ts
│ │ ├── SelectTrigger.tsx
│ │ ├── Selector/
│ │ │ ├── Input.tsx
│ │ │ ├── MultipleSelector.tsx
│ │ │ ├── SingleSelector.tsx
│ │ │ ├── index.tsx
│ │ │ └── interface.ts
│ │ ├── TransBtn.tsx
│ │ ├── hooks/
│ │ │ ├── useBaseProps.ts
│ │ │ ├── useCache.ts
│ │ │ ├── useDelayReset.ts
│ │ │ ├── useFilterOptions.ts
│ │ │ ├── useId.ts
│ │ │ ├── useLock.ts
│ │ │ ├── useOptions.ts
│ │ │ └── useSelectTriggerControl.ts
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ └── utils/
│ │ ├── commonUtil.ts
│ │ ├── keyUtil.ts
│ │ ├── legacyUtil.ts
│ │ ├── platformUtil.ts
│ │ ├── valueUtil.ts
│ │ └── warningPropsUtil.ts
│ ├── vc-slick/
│ │ ├── arrows.jsx
│ │ ├── default-props.js
│ │ ├── dots.jsx
│ │ ├── index.js
│ │ ├── initial-state.js
│ │ ├── inner-slider.jsx
│ │ ├── slider.jsx
│ │ ├── track.jsx
│ │ └── utils/
│ │ └── innerSliderUtils.js
│ ├── vc-slider/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── Handle.tsx
│ │ ├── Range.tsx
│ │ ├── Slider.tsx
│ │ ├── common/
│ │ │ ├── Marks.tsx
│ │ │ ├── Steps.tsx
│ │ │ ├── Track.tsx
│ │ │ └── createSlider.tsx
│ │ ├── index.ts
│ │ └── utils.ts
│ ├── vc-steps/
│ │ ├── Step.tsx
│ │ ├── Steps.tsx
│ │ ├── index.ts
│ │ └── interface.ts
│ ├── vc-table/
│ │ ├── Body/
│ │ │ ├── BodyRow.tsx
│ │ │ ├── ExpandedRow.tsx
│ │ │ ├── MeasureCell.tsx
│ │ │ └── index.tsx
│ │ ├── Cell/
│ │ │ └── index.tsx
│ │ ├── ColGroup.tsx
│ │ ├── FixedHolder/
│ │ │ └── index.tsx
│ │ ├── Footer/
│ │ │ ├── Cell.tsx
│ │ │ ├── Row.tsx
│ │ │ ├── Summary.tsx
│ │ │ └── index.tsx
│ │ ├── Header/
│ │ │ ├── DragHandle.tsx
│ │ │ ├── Header.tsx
│ │ │ └── HeaderRow.tsx
│ │ ├── Panel/
│ │ │ └── index.tsx
│ │ ├── Table.tsx
│ │ ├── constant.ts
│ │ ├── context/
│ │ │ ├── BodyContext.tsx
│ │ │ ├── ExpandedRowContext.tsx
│ │ │ ├── HoverContext.tsx
│ │ │ ├── ResizeContext.tsx
│ │ │ ├── StickyContext.tsx
│ │ │ ├── SummaryContext.tsx
│ │ │ └── TableContext.tsx
│ │ ├── hooks/
│ │ │ ├── useColumns.tsx
│ │ │ ├── useFlattenRecords.ts
│ │ │ ├── useFrame.ts
│ │ │ ├── useSticky.ts
│ │ │ └── useStickyOffsets.ts
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ ├── stickyScrollBar.tsx
│ │ ├── sugar/
│ │ │ ├── Column.tsx
│ │ │ └── ColumnGroup.tsx
│ │ └── utils/
│ │ ├── expandUtil.tsx
│ │ ├── fixUtil.ts
│ │ ├── legacyUtil.ts
│ │ └── valueUtil.tsx
│ ├── vc-tooltip/
│ │ ├── index.ts
│ │ └── src/
│ │ ├── Content.tsx
│ │ ├── Tooltip.tsx
│ │ └── placements.ts
│ ├── vc-tour/
│ │ ├── Mask.tsx
│ │ ├── Tour.tsx
│ │ ├── TourStep/
│ │ │ ├── DefaultPanel.tsx
│ │ │ └── index.tsx
│ │ ├── hooks/
│ │ │ └── useTarget.ts
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ ├── placements.tsx
│ │ └── util.ts
│ ├── vc-tree/
│ │ ├── DropIndicator.tsx
│ │ ├── Indent.tsx
│ │ ├── MotionTreeNode.tsx
│ │ ├── NodeList.tsx
│ │ ├── Tree.tsx
│ │ ├── TreeNode.tsx
│ │ ├── contextTypes.ts
│ │ ├── index.ts
│ │ ├── interface.tsx
│ │ ├── props.ts
│ │ ├── useMaxLevel.ts
│ │ ├── util.tsx
│ │ └── utils/
│ │ ├── conductUtil.ts
│ │ ├── diffUtil.ts
│ │ └── treeUtil.ts
│ ├── vc-tree-select/
│ │ ├── LegacyContext.tsx
│ │ ├── OptionList.tsx
│ │ ├── TreeNode.tsx
│ │ ├── TreeSelect.tsx
│ │ ├── TreeSelectContext.ts
│ │ ├── hooks/
│ │ │ ├── useCache.ts
│ │ │ ├── useCheckedKeys.ts
│ │ │ ├── useDataEntities.ts
│ │ │ ├── useFilterTreeData.ts
│ │ │ └── useTreeData.ts
│ │ ├── index.tsx
│ │ ├── interface.ts
│ │ └── utils/
│ │ ├── legacyUtil.tsx
│ │ ├── strategyUtil.ts
│ │ ├── valueUtil.ts
│ │ └── warningPropsUtil.ts
│ ├── vc-trigger/
│ │ ├── Popup/
│ │ │ ├── Mask.tsx
│ │ │ ├── MobilePopupInner.tsx
│ │ │ ├── PopupInner.tsx
│ │ │ ├── index.tsx
│ │ │ ├── interface.ts
│ │ │ ├── useStretchStyle.ts
│ │ │ └── useVisibleStatus.ts
│ │ ├── Trigger.tsx
│ │ ├── context.ts
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ └── utils/
│ │ ├── alignUtil.ts
│ │ └── motionUtil.ts
│ ├── vc-upload/
│ │ ├── AjaxUploader.tsx
│ │ ├── Upload.tsx
│ │ ├── attr-accept.ts
│ │ ├── index.ts
│ │ ├── interface.tsx
│ │ ├── request.ts
│ │ ├── traverseFileTree.ts
│ │ └── uid.ts
│ ├── vc-util/
│ │ ├── Children/
│ │ │ └── toArray.ts
│ │ ├── Dom/
│ │ │ ├── addEventListener.js
│ │ │ ├── class.js
│ │ │ ├── contains.ts
│ │ │ ├── css.ts
│ │ │ ├── dynamicCSS.ts
│ │ │ ├── isVisible.ts
│ │ │ └── scrollLocker.ts
│ │ ├── devWarning.ts
│ │ ├── get.ts
│ │ ├── isEqual.ts
│ │ ├── isMobile.ts
│ │ ├── set.ts
│ │ └── warning.ts
│ ├── vc-virtual-list/
│ │ ├── Filler.tsx
│ │ ├── Item.tsx
│ │ ├── List.tsx
│ │ ├── ScrollBar.tsx
│ │ ├── hooks/
│ │ │ ├── useFrameWheel.ts
│ │ │ ├── useHeights.tsx
│ │ │ ├── useMobileTouchMove.ts
│ │ │ ├── useOriginScroll.ts
│ │ │ └── useScrollTo.tsx
│ │ ├── index.ts
│ │ ├── interface.ts
│ │ └── utils/
│ │ ├── algorithmUtil.js
│ │ ├── isFirefox.ts
│ │ └── itemUtil.js
│ ├── version/
│ │ └── index.ts
│ └── watermark/
│ ├── __tests__/
│ │ ├── __snapshots__/
│ │ │ ├── demo.test.js.snap
│ │ │ └── index.test.js.snap
│ │ ├── demo.test.js
│ │ └── index.test.js
│ ├── demo/
│ │ ├── basic.vue
│ │ ├── custom.vue
│ │ ├── image.vue
│ │ ├── index.vue
│ │ └── multi-line.vue
│ ├── index.en-US.md
│ ├── index.tsx
│ ├── index.zh-CN.md
│ └── utils.ts
├── index-style-only.js
├── index-with-locales.js
├── index.esm.js
├── index.js
├── package.json
├── plugin/
│ ├── docs/
│ │ ├── index.ts
│ │ └── vueToMarkdown.ts
│ ├── md/
│ │ ├── index.ts
│ │ ├── markdown/
│ │ │ ├── markdown.ts
│ │ │ └── plugins/
│ │ │ ├── component.ts
│ │ │ ├── containers.ts
│ │ │ ├── header.ts
│ │ │ ├── highlight.ts
│ │ │ ├── highlightLines.ts
│ │ │ ├── hoist.ts
│ │ │ ├── lineNumbers.ts
│ │ │ ├── link.ts
│ │ │ ├── preWrapper.ts
│ │ │ ├── slugify.ts
│ │ │ └── snippet.ts
│ │ ├── markdownToVue.ts
│ │ └── utils/
│ │ ├── fetchCode.ts
│ │ ├── parseHeader.ts
│ │ ├── query.ts
│ │ └── tsToJs.ts
│ └── shared.ts
├── postcss.config.js
├── renovate.json
├── scripts/
│ ├── .npmrc.template
│ ├── collect-token-statistic.js
│ ├── commitizen.js
│ ├── compact-vars.js
│ ├── css-variable-sync.js
│ ├── deploy-to-gh-pages.sh
│ ├── generate-token-meta.js
│ ├── generate-version.js
│ ├── gulpfile.js
│ ├── prepub.js
│ ├── prettier.js
│ └── run.js
├── site/
│ ├── 404.html
│ ├── debugger/
│ │ ├── demo/
│ │ │ └── demo.vue
│ │ └── index.tsx
│ ├── index.html
│ ├── public/
│ │ └── docsearch.min_2.6.3.js
│ ├── scripts/
│ │ ├── genrateRoutes.js
│ │ └── pushToOSS.js
│ ├── src/
│ │ ├── App.vue
│ │ ├── SiteToken.vue
│ │ ├── SymbolKey.ts
│ │ ├── components/
│ │ │ ├── ColorChunk/
│ │ │ │ └── index.tsx
│ │ │ ├── ComponentTokenTable/
│ │ │ │ └── index.tsx
│ │ │ ├── Contributors/
│ │ │ │ ├── constants.ts
│ │ │ │ └── index.vue
│ │ │ ├── DemoBox.vue
│ │ │ ├── SimpleLayout.vue
│ │ │ ├── TokenTable/
│ │ │ │ └── index.tsx
│ │ │ ├── antdv-token-previewer/
│ │ │ │ ├── ColorPanel.tsx
│ │ │ │ ├── ColorPreview.tsx
│ │ │ │ ├── FilterPanel.tsx
│ │ │ │ ├── IconSwitch.tsx
│ │ │ │ ├── PreviewDemo.tsx
│ │ │ │ ├── ThemeEditor.tsx
│ │ │ │ ├── ThemeSelect.tsx
│ │ │ │ ├── TokenInput.tsx
│ │ │ │ ├── component-demos/
│ │ │ │ │ ├── alert/
│ │ │ │ │ │ ├── alert.tsx
│ │ │ │ │ │ ├── error.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── anchor/
│ │ │ │ │ │ ├── anchor.tsx
│ │ │ │ │ │ ├── anchorInLayout.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── autoComplete/
│ │ │ │ │ │ ├── auto-complete.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── avatar/
│ │ │ │ │ │ ├── avatar.tsx
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ ├── badge/
│ │ │ │ │ │ ├── badge.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── progress.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── breadcrumb/
│ │ │ │ │ │ ├── breadcrumb.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── button/
│ │ │ │ │ │ ├── button-icon.tsx
│ │ │ │ │ │ ├── button.tsx
│ │ │ │ │ │ ├── dangerButton.tsx
│ │ │ │ │ │ ├── defaultButton.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── calendar/
│ │ │ │ │ │ ├── calendar.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── card/
│ │ │ │ │ │ ├── card.tsx
│ │ │ │ │ │ ├── cardGrid.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── inner.tsx
│ │ │ │ │ ├── carousel/
│ │ │ │ │ │ ├── carousel.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── cascader/
│ │ │ │ │ │ ├── cascader.tsx
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ ├── disable.tsx
│ │ │ │ │ │ ├── highlight.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── checkbox/
│ │ │ │ │ │ ├── checkbox.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── collapse/
│ │ │ │ │ │ ├── collapse.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── datePicker/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── date-picker.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── icon.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── descriptions/
│ │ │ │ │ │ ├── descriptions.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── divider/
│ │ │ │ │ │ ├── divider.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── drawer/
│ │ │ │ │ │ ├── drawer.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── dropdown/
│ │ │ │ │ │ ├── dropdown.tsx
│ │ │ │ │ │ ├── dropdownError.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── menu.tsx
│ │ │ │ │ ├── empty/
│ │ │ │ │ │ ├── empty.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── form/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── form.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── grid/
│ │ │ │ │ │ ├── grid.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── icon/
│ │ │ │ │ │ ├── icon.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── image/
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── image.tsx
│ │ │ │ │ │ └── index.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── input/
│ │ │ │ │ │ ├── clearIcon.tsx
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── input.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ ├── warning.tsx
│ │ │ │ │ │ └── withAddon.tsx
│ │ │ │ │ ├── inputNumber/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── inputNumber.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── list/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── list.tsx
│ │ │ │ │ ├── mentions/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── mentions.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── menu/
│ │ │ │ │ │ ├── data.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── menu.tsx
│ │ │ │ │ │ ├── menuDanger.tsx
│ │ │ │ │ │ └── menuInLayout.tsx
│ │ │ │ │ ├── message/
│ │ │ │ │ │ ├── error.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── message.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── modal/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── modal.tsx
│ │ │ │ │ │ ├── modalWithButton.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── notification/
│ │ │ │ │ │ ├── error.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── notification.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── pagination/
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── outline.tsx
│ │ │ │ │ │ └── pagination.tsx
│ │ │ │ │ ├── popconfirm/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── popconfirm.tsx
│ │ │ │ │ ├── popover/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── popover.tsx
│ │ │ │ │ ├── progress/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── progress.tsx
│ │ │ │ │ │ ├── progressInBg.tsx
│ │ │ │ │ │ └── success.tsx
│ │ │ │ │ ├── radio/
│ │ │ │ │ │ ├── button.tsx
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── radio.tsx
│ │ │ │ │ ├── rate/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── rate.tsx
│ │ │ │ │ ├── result/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── result.tsx
│ │ │ │ │ │ ├── resultWithDesc.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── segmented/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── segmented.tsx
│ │ │ │ │ ├── select/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── icon.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── select.tsx
│ │ │ │ │ │ ├── selectTag.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── skeleton/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── skeleton.tsx
│ │ │ │ │ ├── slider/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── slider.tsx
│ │ │ │ │ │ └── sliderInBg.tsx
│ │ │ │ │ ├── space/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── space.tsx
│ │ │ │ │ ├── spin/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── spin.tsx
│ │ │ │ │ ├── statistic/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── statistic.tsx
│ │ │ │ │ ├── steps/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── steps.tsx
│ │ │ │ │ ├── switch/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── switch.tsx
│ │ │ │ │ ├── table/
│ │ │ │ │ │ ├── filterTable.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── table.tsx
│ │ │ │ │ ├── tabs/
│ │ │ │ │ │ ├── cardTabs.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── tabs.tsx
│ │ │ │ │ ├── tag/
│ │ │ │ │ │ ├── closable.tsx
│ │ │ │ │ │ ├── error.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── info.tsx
│ │ │ │ │ │ ├── multiTags.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ ├── tag.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── timePicker/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── time-picker.tsx
│ │ │ │ │ ├── timeline/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ └── timeline.tsx
│ │ │ │ │ ├── tooltip/
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── tooltip.tsx
│ │ │ │ │ ├── transfer/
│ │ │ │ │ │ ├── danger.tsx
│ │ │ │ │ │ ├── data.ts
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ ├── transfer.tsx
│ │ │ │ │ │ └── warning.tsx
│ │ │ │ │ ├── tree/
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── tree.tsx
│ │ │ │ │ ├── treeSelect/
│ │ │ │ │ │ ├── disabled.tsx
│ │ │ │ │ │ ├── index.ts
│ │ │ │ │ │ └── tree-select.tsx
│ │ │ │ │ ├── typography/
│ │ │ │ │ │ ├── Heading4.tsx
│ │ │ │ │ │ ├── error.tsx
│ │ │ │ │ │ ├── index.tsx
│ │ │ │ │ │ ├── success.tsx
│ │ │ │ │ │ ├── typography.tsx
│ │ │ │ │ │ ├── typographyFull.tsx
│ │ │ │ │ │ ├── warning.tsx
│ │ │ │ │ │ ├── warningText.tsx
│ │ │ │ │ │ └── warningTitle.tsx
│ │ │ │ │ └── upload/
│ │ │ │ │ ├── avatar.tsx
│ │ │ │ │ ├── danger.tsx
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── upload.tsx
│ │ │ │ ├── component-panel/
│ │ │ │ │ ├── ComponentCard.tsx
│ │ │ │ │ ├── ComponentDemoGroup.tsx
│ │ │ │ │ ├── ComponentTokenDrawer.tsx
│ │ │ │ │ ├── ComponentTree.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── hooks/
│ │ │ │ │ └── useControlledTheme.tsx
│ │ │ │ ├── icons/
│ │ │ │ │ ├── Arrow.tsx
│ │ │ │ │ ├── Brush.tsx
│ │ │ │ │ ├── Compact.tsx
│ │ │ │ │ ├── Control.tsx
│ │ │ │ │ ├── Dark.tsx
│ │ │ │ │ ├── Light.tsx
│ │ │ │ │ ├── Margin.tsx
│ │ │ │ │ ├── Motion.tsx
│ │ │ │ │ ├── Pick.tsx
│ │ │ │ │ ├── SearchDropdown.tsx
│ │ │ │ │ ├── ShapeLine.tsx
│ │ │ │ │ ├── TokenPanel.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── index.tsx
│ │ │ │ ├── interface.ts
│ │ │ │ ├── locale/
│ │ │ │ │ ├── context.ts
│ │ │ │ │ ├── en-US.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ ├── interface.tsx
│ │ │ │ │ └── zh-CN.ts
│ │ │ │ ├── meta/
│ │ │ │ │ ├── TokenRelation.ts
│ │ │ │ │ ├── category.ts
│ │ │ │ │ ├── index.ts
│ │ │ │ │ └── interface.ts
│ │ │ │ ├── overviews/
│ │ │ │ │ ├── Error.tsx
│ │ │ │ │ ├── Primary.tsx
│ │ │ │ │ ├── Success.tsx
│ │ │ │ │ ├── Warning.tsx
│ │ │ │ │ └── index.ts
│ │ │ │ ├── previewer.tsx
│ │ │ │ ├── token-panel/
│ │ │ │ │ ├── index.tsx
│ │ │ │ │ ├── token-card/
│ │ │ │ │ │ └── index.tsx
│ │ │ │ │ └── token-item/
│ │ │ │ │ └── index.tsx
│ │ │ │ ├── token-panel-pro/
│ │ │ │ │ ├── AliasPanel.tsx
│ │ │ │ │ ├── ComponentDemoPro.tsx
│ │ │ │ │ ├── InputNumberPlus.tsx
│ │ │ │ │ ├── TokenContent.tsx
│ │ │ │ │ ├── TokenDetail.tsx
│ │ │ │ │ ├── TokenPreview.tsx
│ │ │ │ │ └── index.tsx
│ │ │ │ └── utils/
│ │ │ │ ├── classifyToken.ts
│ │ │ │ ├── deepUpdateObj.ts
│ │ │ │ ├── getColorBgImg.ts
│ │ │ │ ├── getDesignToken.ts
│ │ │ │ ├── getValueByPath.ts
│ │ │ │ ├── isColor.ts
│ │ │ │ ├── makeStyle.tsx
│ │ │ │ └── statistic.ts
│ │ │ ├── demoContainer.vue
│ │ │ ├── demoSort.jsx
│ │ │ ├── rice/
│ │ │ │ ├── CarbonAds.vue
│ │ │ │ ├── GoogleAds.vue
│ │ │ │ ├── GoogleAdsMin.vue
│ │ │ │ ├── GoogleAdsTop.vue
│ │ │ │ ├── WWAds.vue
│ │ │ │ ├── right_bottom_rice.vue
│ │ │ │ ├── sponsors.vue
│ │ │ │ └── top_rice.vue
│ │ │ ├── surelyVue.vue
│ │ │ └── vue-colorful/
│ │ │ ├── components/
│ │ │ │ ├── HexColorPicker.tsx
│ │ │ │ ├── RgbaColorPicker.tsx
│ │ │ │ └── common/
│ │ │ │ ├── Alpha.tsx
│ │ │ │ ├── AlphaColorPicker.tsx
│ │ │ │ ├── ColorInput.tsx
│ │ │ │ ├── ColorPicker.tsx
│ │ │ │ ├── Hue.tsx
│ │ │ │ ├── Interactive.tsx
│ │ │ │ ├── Pointer.tsx
│ │ │ │ └── Saturation.tsx
│ │ │ ├── css/
│ │ │ │ ├── styles.css
│ │ │ │ └── styles.css.d.ts
│ │ │ ├── hooks/
│ │ │ │ ├── useColorManipulation.ts
│ │ │ │ ├── useEventCallback.ts
│ │ │ │ └── useStyleSheet.ts
│ │ │ ├── index.ts
│ │ │ ├── types.ts
│ │ │ └── utils/
│ │ │ ├── clamp.ts
│ │ │ ├── compare.ts
│ │ │ ├── convert.ts
│ │ │ ├── format.ts
│ │ │ ├── nonce.ts
│ │ │ ├── round.ts
│ │ │ └── validate.ts
│ │ ├── demo.js
│ │ ├── directives/
│ │ │ └── clipboard/
│ │ │ ├── clipboard-action.js
│ │ │ ├── clipboard.js
│ │ │ ├── closest.js
│ │ │ ├── delegate.js
│ │ │ ├── index.js
│ │ │ ├── is.js
│ │ │ ├── listen.js
│ │ │ ├── select.js
│ │ │ └── tiny-emitter.js
│ │ ├── hooks/
│ │ │ ├── useMediaQuery.ts
│ │ │ ├── useMenus.ts
│ │ │ └── useSiteToken.ts
│ │ ├── i18n.js
│ │ ├── index.less
│ │ ├── layouts/
│ │ │ ├── BaseLayout.vue
│ │ │ ├── Demo.vue
│ │ │ ├── Footer.vue
│ │ │ ├── Iframe.vue
│ │ │ ├── Menu.vue
│ │ │ ├── PrevAndNext.vue
│ │ │ ├── header/
│ │ │ │ ├── Ecosystem.vue
│ │ │ │ ├── Github.less
│ │ │ │ ├── Github.vue
│ │ │ │ ├── Logo.vue
│ │ │ │ ├── Menu.vue
│ │ │ │ ├── More.vue
│ │ │ │ ├── Navigation.vue
│ │ │ │ ├── SearchBox.less
│ │ │ │ ├── SearchBox.vue
│ │ │ │ ├── index.less
│ │ │ │ └── index.vue
│ │ │ ├── icons/
│ │ │ │ ├── Compact.tsx
│ │ │ │ ├── Dark.tsx
│ │ │ │ ├── Light.tsx
│ │ │ │ ├── ThemeEditorIcon.tsx
│ │ │ │ └── ThemeIcon.vue
│ │ │ └── index.vue
│ │ ├── locale/
│ │ │ ├── en-US.js
│ │ │ └── zh-CN.js
│ │ ├── main.js
│ │ ├── mock/
│ │ │ └── user.js
│ │ ├── router/
│ │ │ └── index.js
│ │ ├── services/
│ │ │ ├── login.js
│ │ │ └── user.js
│ │ ├── theme/
│ │ │ ├── en-US.js
│ │ │ ├── static/
│ │ │ │ ├── common.less
│ │ │ │ ├── demo.less
│ │ │ │ ├── docsearch.less
│ │ │ │ ├── footer.less
│ │ │ │ ├── header.less
│ │ │ │ ├── highlight.dark.less
│ │ │ │ ├── highlight.less
│ │ │ │ ├── icons.less
│ │ │ │ ├── index.less
│ │ │ │ ├── markdown.less
│ │ │ │ ├── mock-browser.less
│ │ │ │ ├── not-found.less
│ │ │ │ ├── nprogress.less
│ │ │ │ ├── page-nav.less
│ │ │ │ ├── preview-img.less
│ │ │ │ ├── reset.css
│ │ │ │ ├── resource.less
│ │ │ │ ├── responsive.less
│ │ │ │ ├── toc.less
│ │ │ │ └── var.less
│ │ │ ├── template/
│ │ │ │ └── IconDisplay/
│ │ │ │ ├── Category.jsx
│ │ │ │ ├── CopyableIcon.vue
│ │ │ │ ├── fields.js
│ │ │ │ ├── index.jsx
│ │ │ │ └── themeIcons.jsx
│ │ │ └── zh-CN.js
│ │ ├── type.ts
│ │ ├── typings.d.ts
│ │ ├── utils/
│ │ │ ├── generateOnlineDemo.ts
│ │ │ ├── request.js
│ │ │ └── util.ts
│ │ ├── views/
│ │ │ ├── ComponentOverview.less
│ │ │ ├── ComponentOverview.vue
│ │ │ └── theme-editor/
│ │ │ ├── JSONEditor/
│ │ │ │ └── index.vue
│ │ │ ├── index.vue
│ │ │ └── locales.ts
│ │ └── vueDocs/
│ │ ├── compatible-style.en-US.md
│ │ ├── compatible-style.zh-CN.md
│ │ ├── customize-theme.en-US.md
│ │ ├── customize-theme.zh-CN.md
│ │ ├── download.en-US.md
│ │ ├── download.zh-CN.md
│ │ ├── extract-ssr.en-US.md
│ │ ├── extract-ssr.zh-CN.md
│ │ ├── faq.en-US.md
│ │ ├── faq.zh-CN.md
│ │ ├── getting-started.en-US.md
│ │ ├── getting-started.zh-CN.md
│ │ ├── i18n.en-US.md
│ │ ├── i18n.zh-CN.md
│ │ ├── introduce.en-US.md
│ │ ├── introduce.zh-CN.md
│ │ ├── migration-v2.en-US.md
│ │ ├── migration-v2.zh-CN.md
│ │ ├── migration-v3.en-US.md
│ │ ├── migration-v3.zh-CN.md
│ │ ├── migration-v4.en-US.md
│ │ ├── migration-v4.zh-CN.md
│ │ ├── replace-date.en-US.md
│ │ ├── replace-date.zh-CN.md
│ │ ├── sponsor.en-US.md
│ │ ├── sponsor.zh-CN.md
│ │ ├── use-with-vue-cli.en-US.md
│ │ └── use-with-vue-cli.zh-CN.md
│ ├── typings/
│ │ └── shared.d.ts
│ ├── typings.d.ts
│ └── vite.config.ts
├── test.html
├── tests/
│ ├── __mocks__/
│ │ └── copy-to-clipboard.js
│ ├── __snapshots__/
│ │ └── index.test.js.snap
│ ├── index.test.js
│ ├── setup.js
│ ├── setupAfterEnv.ts
│ ├── shared/
│ │ ├── demoTest.js
│ │ ├── focusTest.js
│ │ └── mountTest.js
│ └── utils.js
├── tsconfig.json
├── typings/
│ └── global.d.ts
├── webpack.build.conf.js
└── wrangler.jsonc
================================================
FILE CONTENTS
================================================
================================================
FILE: .antd-tools.config.js
================================================
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,
};
================================================
FILE: .codecov.yml
================================================
codecov:
branch: master
================================================
FILE: .editorconfig
================================================
# 🎨 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
================================================
FILE: .eslintignore
================================================
node_modules/
**/*.spec.*
**/style/
*.html
/components/test/*
es/
lib/
_site/
dist/
site/dist/
components/version/version.ts
site/src/router/demoRoutes.js
locale/
================================================
FILE: .eslintrc.js
================================================
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',
},
};
================================================
FILE: .gitattributes
================================================
*.jsx linguist-language=Vue
*.tsx linguist-language=Vue
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # [tangjinzhou]
open_collective: ant-design-vue
patreon: tangjinzhou
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: true
contact_links:
- name: Create new issue
url: https://vuecomponent.github.io/issue-helper/
about: Please use the following link to create a new issue.
- name: Patreon
url: https://www.patreon.com/tangjinzhou
about: Love Ant Design Vue? Please consider supporting us via Patreon.
- name: Open Collective
url: https://opencollective.com/ant-design-vue/donate
about: Love Ant Design Vue? Please consider supporting us via Open Collective.
- name: Paypal
url: https://www.paypal.me/tangjinzhou
about: Love Ant Design Vue? Please consider supporting us via Paypal.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pr_cn.md
================================================
首先,感谢你的贡献! 😄
新特性请提交至 feature 分支,其余可提交至 main 分支。在一个维护者审核通过后合并。请确保填写以下 pull request 的信息,谢谢!~
[[English Template / 英文模板](./pr_en.md)]
### 这个变动的性质是
- [ ] 新特性提交
- [ ] 日常 bug 修复
- [ ] 站点、文档改进
- [ ] 组件样式改进
- [ ] TypeScript 定义更新
- [ ] 重构
- [ ] 代码风格优化
- [ ] 分支合并
- [ ] 其他改动(是关于什么的改动?)
### 需求背景
> 1. 描述相关需求的来源。
> 2. 要解决的问题。
> 3. 相关的 issue 讨论链接。
### 实现方案和 API(非新功能可选)
> 1. 基本的解决思路和其他可选方案。
> 2. 列出最终的 API 实现和用法。
> 3. 涉及 UI/交互变动需要有截图或 GIF。
### 对用户的影响和可能的风险(非新功能可选)
> 1. 这个改动对用户端是否有影响?影响的方面有哪些?
> 2. 是否有可能隐含的 break change 和其他风险?
### Changelog 描述(非新功能可选)
> 1. 英文描述
> 2. 中文描述(可选)
### 请求合并前的自查清单
- [ ] 文档已补充或无须补充
- [ ] 代码演示已提供或无须提供
- [ ] TypeScript 定义已补充或无须补充
- [ ] Changelog 已提供或无须提供
### 后续计划(非新功能可选)
> 如果这个提交后面还有相关的其他提交和跟进信息,可以写在这里。
================================================
FILE: .github/PULL_REQUEST_TEMPLATE/pr_en.md
================================================
First of all, thank you for your contribution! 😄
New feature please send pull request to feature branch, and rest to main branch. Pull request will be merged after one of collaborators approve. Please makes sure that these form are filled before submitting your pull request, thank you!
[[中文版模板 / Chinese template](./pr_cn.md)]
### This is a ...
- [ ] New feature
- [ ] Bug fix
- [ ] Site / document update
- [ ] Component style update
- [ ] TypeScript definition update
- [ ] Refactoring
- [ ] Code style optimization
- [ ] Branch merge
- [ ] Other (about what?)
### What's the background?
> 1. Describe the source of requirement.
> 2. Resolve what problem.
> 3. Related issue link.
### API Realization (Optional if not new feature)
> 1. Basic thought of solution and other optional proposal.
> 2. List final API realization and usage sample.
> 3. GIF or snapshot should be provided if includes UI/interactive modification.
### What's the effect? (Optional if not new feature)
> 1. Does this PR affect user? Which part will be affected?
> 2. What will say in changelog?
> 3. Does this PR contains potential break change or other risk?
### Changelog description (Optional if not new feature)
> 1. English description
> 2. Chinese description (optional)
### Self Check before Merge
- [ ] Doc is updated/provided or not needed
- [ ] Demo is updated/provided or not needed
- [ ] TypeScript definition is updated/provided or not needed
- [ ] Changelog is provided or not needed
### Additional Plan? (Optional if not new feature)
> If this PR related with other PR or following info. You can type here.
================================================
FILE: .github/issue-close-app.yml
================================================
comment: "Your issue has been closed because it does not conform to our issue requirements. Please use the [Issue Helper](https://vuecomponent.github.io/issue-helper/) to create an issue, thank you! <br/><br/> 为了能够进行高效沟通,我们对 issue 有一定的格式要求,你的 issue 因为不符合要求而被自动关闭。你可以通过 [issue 助手](https://vuecomponent.github.io/issue-helper/) 来创建 issue 以方便我们定位错误。谢谢配合!"
issueConfigs:
- content:
- "<!-- generated by issue-helper. DO NOT REMOVE -->"
- content:
- "Version"
- "Environment"
- "Reproduction link"
- "Steps to reproduce"
- "What is expected"
- "What is actually happening"
- content:
- "What problem does this feature solve"
- "What does the proposed API look like"
================================================
FILE: .github/workflows/cloudflare.yml
================================================
name: Build and Deploy to Cloudflare
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
name: Build Application
permissions:
contents: read
steps:
- name: Checkout
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies
run: npm install --force
- name: Build application
run: npm run build
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-files
path: site/dist/
retention-days: 1
deploy:
runs-on: ubuntu-latest
name: Deploy to Cloudflare
needs: build
permissions:
contents: read
deployments: write
steps:
- name: Checkout (for config files)
uses: actions/checkout@v5
with:
sparse-checkout: |
wrangler.jsonc
sparse-checkout-cone-mode: false
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
name: build-files
path: site/dist/
- name: Deploy (Workers + Static Assets)
uses: cloudflare/wrangler-action@v3.14.1
with:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
command: deploy --config wrangler.jsonc
gitHubToken: ${{ secrets.GITHUB_TOKEN }}
================================================
FILE: .github/workflows/codecov.yml
================================================
name: codecov
on: [push]
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: cache package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: create package-lock.json
run: npm i --package-lock-only --ignore-scripts
- name: hack for singe file
run: |
if [ ! -d "package-temp-dir" ]; then
mkdir package-temp-dir
fi
cp package-lock.json package-temp-dir
- name: cache node_modules
id: node_modules_cache_id
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: install
if: steps.node_modules_cache_id.outputs.cache-hit != 'true'
run: npm ci
node:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
# with:
# token: ${{ secrets.ACCESS_TOKEN }}
# - name: Checkout submodules
# uses: actions/checkout@v2
# with:
# repository: tangjinzhou/antdv-demo
# token: ${{ secrets.ACCESS_TOKEN }}
# path: antdv-demo
# submodules: true
- name: restore cache from package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: Generate coverage report
run: npm test
env:
COVERAGE: "true"
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v1
with:
token: ${{ secrets.CODECOV_TOKEN }}
needs: setup
================================================
FILE: .github/workflows/emoji-helper.yml
================================================
name: Emoji Helper
on:
release:
types: [published]
jobs:
emoji:
runs-on: ubuntu-latest
steps:
- uses: actions-cool/emoji-helper@v1.0.0
with:
type: 'release'
emoji: '+1, laugh, heart, hooray, rocket, eyes'
================================================
FILE: .github/workflows/issue-close-require.yml
================================================
name: Issue Close Require
on:
schedule:
- cron: "0 0 * * *"
permissions:
contents: read
jobs:
close-issues:
runs-on: ubuntu-latest
steps:
- name: need reproduce
uses: actions-cool/issues-helper@v3
with:
actions: 'close-issues'
labels: '🤔 Need Reproduce'
inactive-day: 7
body: |
Since the issue was labeled with `Need Reproduce`, but no response in 7 days. This issue will be closed. If you have any questions, you can comment and reply.
由于该 issue 被标记为需要复现信息,却 7 天未收到回应。现关闭 issue,若有任何问题,可评论回复。
================================================
FILE: .github/workflows/issue-labeled.yml
================================================
name: Issue Labeled
on:
issues:
types: [labeled]
permissions:
contents: read
jobs:
issue-labeled:
permissions:
issues: write # for actions-cool/issues-helper to update issues
pull-requests: write # for actions-cool/issues-helper to update PRs
runs-on: ubuntu-latest
steps:
- name: Need Reproduce
if: github.event.label.name == '🤔 Need Reproduce'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}. Please provide a online reproduction by forking this [link for vue2](https://codesandbox.io/s/2wpk21kzvr)、 [link for vue3](https://codesandbox.io/s/agitated-franklin-1w72v) or a minimal GitHub repository. Make sure to choose the correct version.
你好 @${{ github.event.issue.user.login }}, 我们需要你提供一个在线的重现实例以便于我们帮你排查问题。你可以通过点击 [此处 for vue2](https://codesandbox.io/s/2wpk21kzvr)、 [此处 for vue3](https://codesandbox.io/s/agitated-franklin-1w72v) 创建一个 codesandbox 或者提供一个最小化的 GitHub 仓库。请确保选择准确的版本。
- name: help wanted
if: github.event.label.name == 'help wanted'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}. We totally like your proposal/feedback, welcome to send us a Pull Request for it. Please send your Pull Request to proper branch, fill the Pull Request Template here, provide changelog/TypeScript/documentation/test cases if needed and make sure CI passed, we will review it soon. We appreciate your effort in advance and looking forward to your contribution!
你好 @${{ github.event.issue.user.login }},我们完全同意你的提议/反馈,欢迎直接在此仓库创建一个 Pull Request 来解决这个问题。请将 Pull Request 发到正确的分支,务必填写 Pull Request 内的预设模板,提供改动所需相应的 changelog、TypeScript 定义、测试用例、文档等,并确保 CI 通过,我们会尽快进行 Review,提前感谢和期待您的贡献。
- name: Usage
if: github.event.label.name == 'Usage'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment, close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hello @${{ github.event.issue.user.login }}, we use GitHub issues to trace bugs or discuss plans of Ant Design Vue. So, please don't ask usage questions here. You can try to open a new discussion in [antdv discussions](https://github.com/vueComponent/ant-design-vue/discussions), select `Q&A` to ask questions, also can ask questions on [Stack Overflow](http://stackoverflow.com/questions/) or [Segment Fault](https://segmentfault.com).
你好 @${{ github.event.issue.user.login }},Ant Design Vue Issue 板块是用于 bug 反馈与需求讨论的地方。请勿询问如何使用的问题,你可以试着在 [antdv discussions](https://github.com/vueComponent/ant-design-vue/discussions) 新开一个 discussion,选择 `Q&A` 类别进行提问,也可以在 [Stack Overflow](http://stackoverflow.com/questions/) 或者 [Segment Fault](https://segmentfault.com/) 中提问。
- name: 1.x
if: github.event.label.name == '1.x'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment,close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hi @${{ github.event.issue.user.login }}. Current version (1.x) is off the maintenance period. We may not accept pull request or fix bug with it anymore. This topic will be auto closed.
你好 @${{ github.event.issue.user.login }},当前版本(1.x)已经过了维护期。我们不会再接受对其的相关 PR 与 issue。当前 topic 会被自动关闭。
- name: 2.x
if: github.event.label.name == '2.x'
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment,close-issue'
token: ${{ secrets.GITHUB_TOKEN }}
issue-number: ${{ github.event.issue.number }}
body: |
Hi @${{ github.event.issue.user.login }}. Current version (2.x) is off the maintenance period. We may not accept pull request or fix bug with it anymore. This topic will be auto closed.
你好 @${{ github.event.issue.user.login }},当前版本(2.x)已经过了维护期。我们不会再接受对其的相关 PR 与 issue。当前 topic 会被自动关闭。
================================================
FILE: .github/workflows/issue-open-check.yml
================================================
name: Issue Open Check
on:
issues:
types: [opened]
permissions:
contents: read
jobs:
issue-open-check:
permissions:
contents: read # for visiky/dingtalk-release-notify to get latest release
issues: write # for actions-cool/issues-helper to update issues
pull-requests: write # for actions-cool/issues-helper to update PRs
runs-on: ubuntu-latest
steps:
- uses: actions-cool/check-user-permission@v1.0.0
id: checkUser
with:
require: 'write'
- name: check invalid
if: (contains(github.event.issue.body, 'issue-helper') == false) && (steps.checkUser.outputs.result == 'false')
uses: actions-cool/issues-helper@v3
with:
actions: 'create-comment,add-labels,close-issue'
issue-number: ${{ github.event.issue.number }}
labels: 'Invalid'
body: |
Hello @${{ github.event.issue.user.login }}, your issue has been closed because it does not conform to our issue requirements. Please use the [Issue Helper](https://vuecomponent.github.io/issue-helper/) to create an issue, thank you!
你好 @${{ github.event.issue.user.login }},为了能够进行高效沟通,我们对 issue 有一定的格式要求,你的 issue 因为不符合要求而被自动关闭。你可以通过 [issue 助手](https://vuecomponent.github.io/issue-helper/) 来创建 issue 以方便我们定位错误。谢谢配合!
================================================
FILE: .github/workflows/lock-issue.yml
================================================
name: 'Lock threads'
on:
schedule:
- cron: '0 0 * * *'
jobs:
lock:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@v2
with:
github-token: ${{ github.token }}
issue-lock-inactive-days: '365'
issue-lock-labels: 'outdated'
issue-lock-comment: >
This issue has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
pr-lock-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
================================================
FILE: .github/workflows/stale.yml
================================================
name: "Close stale issues"
on:
schedule:
- cron: "30 1 * * *"
jobs:
stale:
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days'
stale-pr-message: 'This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 7 days'
exempt-issue-labels: 'bug,enhancement'
days-before-stale: 60
days-before-close: 7
================================================
FILE: .github/workflows/test.yml
================================================
name: test
on: [push, pull_request]
jobs:
setup:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: cache package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: create package-lock.json
run: npm i --package-lock-only --ignore-scripts
- name: hack for singe file
run: |
if [ ! -d "package-temp-dir" ]; then
mkdir package-temp-dir
fi
cp package-lock.json package-temp-dir
- name: cache node_modules
id: node_modules_cache_id
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: install
if: steps.node_modules_cache_id.outputs.cache-hit != 'true'
run: npm ci
compile:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: cache lib
uses: actions/cache@v4
with:
path: lib
key: lib-${{ github.sha }}
- name: cache es
uses: actions/cache@v4
with:
path: es
key: es-${{ github.sha }}
- name: compile
run: npm run compile
needs: setup
lint:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: lint
run: npm run lint
needs: setup
node:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: restore cache from package-lock.json
uses: actions/cache@v4
with:
path: package-temp-dir
key: lock-${{ github.sha }}
- name: restore cache from node_modules
uses: actions/cache@v4
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}
- name: test
run: npm test
needs: setup
================================================
FILE: .gitignore
================================================
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.vscode
.env
.idea
.DS_Store
dist
lib
es
/locale
_site
yarn.lock
package-lock.json
pnpm-lock.yaml
/coverage
# 备份文件
/components/test/*
list.txt
site/dev.js
# IDE 语法提示临时文件
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
================================================
FILE: .husky/.gitignore
================================================
_
================================================
FILE: .husky/pre-commit
================================================
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
npx --no-install pretty-quick --staged
================================================
FILE: .huskyrc
================================================
{
"hooks": {
"pre-commit": "pretty-quick --staged",
"pre-publish": "npm run lint",
"commit-msg": "commitlint -x @commitlint/config-conventional -e $GIT_PARAMS"
}
}
================================================
FILE: .jest.js
================================================
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)$': '<rootDir>/node_modules/@vue/vue3-jest',
'\\.(js|jsx)$': '<rootDir>/node_modules/babel-jest',
'\\.(ts|tsx)$': '<rootDir>/node_modules/ts-jest',
'\\.svg$': '<rootDir>/node_modules/jest-transform-stub',
},
testRegex: getTestRegex(libDir),
moduleNameMapper: {
'^@/(.*)$/': '<rootDir>/$1',
'^ant-design-vue$': '<rootDir>/components/index',
'^ant-design-vue/es/(.*)$': '<rootDir>/components/$1',
},
snapshotSerializers: ['<rootDir>/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,
},
},
};
================================================
FILE: .npmrc
================================================
enable-pre-post-scripts=true
================================================
FILE: .prettierignore
================================================
**/*.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/
================================================
FILE: .prettierrc
================================================
{
"singleQuote": true,
"trailingComma": "all",
"endOfLine": "lf",
"printWidth": 100,
"proseWrap": "never",
"arrowParens": "avoid",
"htmlWhitespaceSensitivity": "ignore",
"overrides": [
{
"files": ".prettierrc",
"options": {
"parser": "json"
}
}
]
}
================================================
FILE: .stylelintrc
================================================
{
"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
}
}
================================================
FILE: .stylelintrc.json
================================================
{
"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
}
}
================================================
FILE: .vcmrc
================================================
{
"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
}
================================================
FILE: BACKERS.md
================================================
<h1 align="center">Sponsors & Backers</h1>
<br><br>
<h2 align="center">企业赞助</h2>
<p align="center">
<a href="http://www.powerproject.com.cn/" target="_blank"><img width="193" src="http://www.powerproject.com.cn/wp-content/uploads/2019/08/2019080215041192.png" title="donation by wechat"></a>
</p>
<h2 align="center">Sponsors</h2>
<p align="center">
<a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
</p>
<h2 align="center">Backers</h2>
<p align="center">
<a href="https://github.com/chuzhixin/vue-admin-beautiful" target="_blank"><img width="64" style="border-radius: 50%;" src="https://gitee.com/chu1204505056/image/raw/master/vue-admin-beautiful.png" title="vue-admin-beautiful"></a>
<a href="https://github.com/limichange" target="_blank"><img width="64" style="border-radius: 50%;" src="https://avatars0.githubusercontent.com/u/1947344?s=400&v=4" title="limichange donation total 24$ by qq from 2018.9"></a>
<a href="https://opencollective.com/ant-design-vue/backer/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/0/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/1/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/2/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/3/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/4/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/5/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/6/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/7/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/8/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/9/avatar.svg"></a>
<a href="https://opencollective.com/ant-design-vue/backer/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/10/avatar.svg"></a>
</p>
<h2 align="center">Patreon</h2>
<p align="center">
<a href="https://www.mokeyjay.com" target="_blank"><img width="64" style="border-radius: 50%;" src="https://www.mokeyjay.com/headimg.png" title="donation by Patreon"></a>
</p>
<h2 align="center">支付宝/微信</h2>
### 使用支付宝/微信的赞助的用户,如需要添加名单,赞助后可发 github 账号到邮箱(antdv@foxmail.com)
- [fastgoo](https://github.com/fastgoo)
- [sendya](https://github.com/sendya)
- [limichange](https://github.com/limichange)
- [LvHang](https://github.com/184005306)
================================================
FILE: CHANGELOG.en-US.md
================================================
# Change Log (The following content is translated by Google)
`ant-design-vue` strictly follows [Semantic Versioning 2.0.0](http://semver.org/).
#### Release Schedule
- Weekly release: patch version at the end of every week for routine bugfix (anytime for urgent bugfix).
- Monthly release: minor version at the end of every month for new features.
- Major version release is not included in this schedule for breaking change and new features.
---
## 4.2.6
- 🐞 Fix Modal component aria-hidden error problem under chrome [#7823](https://github.com/vueComponent/ant-design-vue/issues/7823)
- 🐞 Fix the problem that the built-in input method of Safari automatically fills in the decimal point when inputting Chinese [#7918](https://github.com/vueComponent/ant-design-vue/issues/7918)
- 🐞 Fix InputNumber component disabled style problem [#7776](https://github.com/vueComponent/ant-design-vue/issues/7776)
- 🐞 Fix Select cannot lose focus problem [#7819](https://github.com/vueComponent/ant-design-vue/issues/7819)
## 4.2.5
- 🐞 Fix Empty component memory leak problem
- 🐞 Fix Image width & height property not working problem
## 4.2.4
- 🐞 Fix Wave memory leak problem
## 4.2.3
- 🌟 TourStep custom Button, support function children [#7628](https://github.com/vueComponent/ant-design-vue/pull/7628)
- 🐞 Fix the problem that the input value is hidden in Select and Cascader search multi-select mode [#7640](https://github.com/vueComponent/ant-design-vue/issues/7640)
## 4.2.2
- 🐞 Fix TreeSelect placeholder slot invalid [#7545](https://github.com/vueComponent/ant-design-vue/issues/7545)
- 🐞 Fix Tree slot responsive invalid issue [40ad45](https://github.com/vueComponent/ant-design-vue/commit/40ad45bc05b2bf9d0a2445d9f6ff365468ba90b7)
- 🐞 Fix FloatButton target type error issue [#7576](https://github.com/vueComponent/ant-design-vue/issues/7576)
- 🐞 Fix FormItem className error issue [#7582](https://github.com/vueComponent/ant-design-vue/issues/7582)
- 🐞 Fix Input Cannot input problem under lazy [#7543](https://github.com/vueComponent/ant-design-vue/issues/7543)
- 🐞 Fix the problem that placeholder is not hidden when inputting Chinese in Select [#7611](https://github.com/vueComponent/ant-design-vue/issues/7611)
- 🐞 Fix the problem that the pop-up window flashes when clicking the preset option in DatePicker [#7550](https://github.com/vueComponent/ant-design-vue/issues/7550)
## 4.2.1
- 🐞 fix Input clear action error [#7523](https://github.com/vueComponent/ant-design-vue/issues/7523)
## 4.2.0
- 🌟 Optimize the textColor change when the layout component switches to dark mode [#7498](https://github.com/vueComponent/ant-design-vue/issues/7498)
- 🌟 Tooltip added arrow hidden configuration [#7459](https://github.com/vueComponent/ant-design-vue/issues/7459)
- 🌟 Optimize Table hover performance [#7451](https://github.com/vueComponent/ant-design-vue/issues/7451)
- 🐞 Fixed the problem of changing the model during useForm verification, resulting in verification errors [#ffd4d8](https://github.com/vueComponent/ant-design-vue/commit/ffd4d8fe927f9ea40cbb6358ad997c447bd9a74e)
- 🐞 Fix Tabs folding calculation error issue [#7491](https://github.com/vueComponent/ant-design-vue/issues/7491)
- 🐞 Fix Qrcode missing type hint issue [#7502](https://github.com/vueComponent/ant-design-vue/issues/7502)
- 🐞 Fix Menu rendering error under SSR [#7349](https://github.com/vueComponent/ant-design-vue/issues/7349)
- 🐞 Fix Select and Cascader rendering errors under SSR [#7377](https://github.com/vueComponent/ant-design-vue/issues/7377)
- 🐞 Fix AutoComplete missing option slot declaration issue [#7396](https://github.com/vueComponent/ant-design-vue/issues/7396)
- 🐞 Fix Textarea autoSize not taking effect [#7478](https://github.com/vueComponent/ant-design-vue/issues/7478)
- 🐞 Fix Pagination’s Enter key triggering two page turns [#7368](https://github.com/vueComponent/ant-design-vue/issues/7368)
- 🐞 Fix the problem of Chinese input in the input box [#7391](https://github.com/vueComponent/ant-design-vue/issues/7391)[#7516](https://github.com/vueComponent/ant- design-vue/issues/7516)
- 🐞 Fix Carousel beforeChange current parameter error issue [#7419](https://github.com/vueComponent/ant-design-vue/issues/7419)
## 4.1.2
- 🐞 Fix table resize error reporting under vue 3.4 [#7291](https://github.com/vueComponent/ant-design-vue/issues/7291)
- 🐞 Fix the problem that the Segmented title attribute is not displayed [#7302](https://github.com/vueComponent/ant-design-vue/issues/7302)
## 4.1.1
- 🌟 QRcode adds scanned status [#7242](https://github.com/vueComponent/ant-design-vue/issues/7242)
- 🐞 Fix css prefix issue in nuxt [#7256](https://github.com/vueComponent/ant-design-vue/issues/7256)
- 🐞 Fix dropdown closing issue [#7246](https://github.com/vueComponent/ant-design-vue/issues/7246)
- 🐞 Fix divider vertical dashed not display issue [#7218](https://github.com/vueComponent/ant-design-vue/issues/7218)
- 🐞 Fix hook mode message console warning issue [#7281](https://github.com/vueComponent/ant-design-vue/issues/7281)
- 🐞 Fix table expansion error reporting under vue 3.4 [#7265](https://github.com/vueComponent/ant-design-vue/issues/7265)
- 🐞 Fix table group filter status error issue [#7233](https://github.com/vueComponent/ant-design-vue/issues/7233)
## 4.1.0
- 🐞 support vue 3.4 [#7239](https://github.com/vueComponent/ant-design-vue/issues/7239)
## 4.0.8
- 🐞 Fix theme responsiveness failure issue under Nuxt [#7180](https://github.com/vueComponent/ant-design-vue/issues/7180)
- 🐞 Fix error reporting caused by Wave [#7108](https://github.com/vueComponent/ant-design-vue/issues/7108)
- 🐞 Fix Upload disabled inheritance issue [#7110](https://github.com/vueComponent/ant-design-vue/issues/7110)
- 🐞 Fix Tooltip popupAlign not taking effect [#7112](https://github.com/vueComponent/ant-design-vue/issues/7112)
- 🐞 Fix Typography flashing problem [#7146](https://github.com/vueComponent/ant-design-vue/issues/7146)
- 🐞 Fix the issue that RangePicker prevIcon nextIcon does not take effect [#7127](https://github.com/vueComponent/ant-design-vue/issues/7127)
- 🐞 Fixed the issue of watermark not monitoring child element changes [#7149](https://github.com/vueComponent/ant-design-vue/issues/7149)
- 🐞 Fix Menu animation missing issue [#7130](https://github.com/vueComponent/ant-design-vue/issues/7130)
- 🐞 Fix the cursor change issue when TextArea autosize [#7121](https://github.com/vueComponent/ant-design-vue/issues/7121)
## 4.0.7
- 🌟 Added Flex component [#7052](https://github.com/vueComponent/ant-design-vue/issues/7052)
- 🌟 ConfigProvider adds wave configuration [#7036](https://github.com/vueComponent/ant-design-vue/issues/7036)
- 🌟 Watermark supports dark mode [#7067](https://github.com/vueComponent/ant-design-vue/issues/7067)
- 🐞 Fix Space duplicate Key problem [#7048](https://github.com/vueComponent/ant-design-vue/issues/7048)
- 🐞 Fix Upload disabled priority error issue [#7047](https://github.com/vueComponent/ant-design-vue/issues/7047)
- 🐞 Fix Carousel rendering error in jsx [#7077](https://github.com/vueComponent/ant-design-vue/issues/7077)
- 🐞 Fix Message offset position problem [#7093](https://github.com/vueComponent/ant-design-vue/issues/7093)
- 🐞 Fix the problem of animation failure when using Collapse custom prefix [#7074](https://github.com/vueComponent/ant-design-vue/issues/7074)
## 4.0.6
- 🐞 Fix the Dropdown onVisibleChange failure issue introduced in 4.0.4 [#7031](https://github.com/vueComponent/ant-design-vue/issues/7031)
## 4.0.5
- 🐞 Fix cssinjs performance issue [#7023](https://github.com/vueComponent/ant-design-vue/issues/7023)
## 4.0.4
- 🌟 Added esm target file
- 🌟 Added tooltip attribute to FormItem [#7014](https://github.com/vueComponent/ant-design-vue/issues/7014)
- 🐞 Fix useMessage getContainer not taking effect [#6942](https://github.com/vueComponent/ant-design-vue/issues/6942)
- 🐞 Fix the problem of Image triggering onPreviewVisibleChange event multiple times [#6945](https://github.com/vueComponent/ant-design-vue/issues/6945)
- 🐞 Fix the problem that Checkbox global disabled does not take effect [#6970](https://github.com/vueComponent/ant-design-vue/issues/6970)
- 🐞 Fix Drawer contentWrapperStyle not taking effect [#6983](https://github.com/vueComponent/ant-design-vue/issues/6983)
- 🐞 Optimize Select Dropdown and other drop-down list scroll bar display hidden logic [#6987](https://github.com/vueComponent/ant-design-vue/issues/6987)
- 🐞 Fix the problem of hiding when there are components such as input in the drop-down list such as Select Dropdown [#7020](https://github.com/vueComponent/ant-design-vue/issues/7020)
## 4.0.3
- 🐞 Fix the problem of style loss under shadow Dom [#6912](https://github.com/vueComponent/ant-design-vue/issues/6912)
- 🐞 Upgrade Icon dependency and fix icon css missing problem under shadow Dom [#6914](https://github.com/vueComponent/ant-design-vue/issues/6914)
## 4.0.2
- 🐞 Fix useMessage causing body to be removed [#6880](https://github.com/vueComponent/ant-design-vue/issues/6880)
- 🐞 Fix the problem that the water ripple effect does not disappear after Button loading is switched [#6895](https://github.com/vueComponent/ant-design-vue/issues/6895)
- 🐞 Fixed the problem that flip does not reset after Image is closed [#6913](https://github.com/vueComponent/ant-design-vue/issues/6913)
- 🐞 Fix ImageGroup animation effect loss problem [#6898](https://github.com/vueComponent/ant-design-vue/issues/6898)
- 🐞 Fix Modal missing onUpdate:open attribute declaration [#6876](https://github.com/vueComponent/ant-design-vue/issues/6876)
- 🐞 Fixed the issue of multiple clicks being triggered at the edge of Transfer's Checkbox [#6902](https://github.com/vueComponent/ant-design-vue/issues/6902)
## 4.0.1
- 🌟 FloatButton add Badge support [#6738](https://github.com/vueComponent/ant-design-vue/issues/6738)
- 🌟 Image preview zoom in and out sensitivity adjustment [#6784](https://github.com/vueComponent/ant-design-vue/issues/6784)
- 🌟 Add flip feature to Image [#6785](https://github.com/vueComponent/ant-design-vue/issues/6785)
- 🌟 Add App component to provide context [#6735](https://github.com/vueComponent/ant-design-vue/issues/6735)
- 🌟 Style extraction feature for SSR [#6757](https://github.com/vueComponent/ant-design-vue/issues/6757)
- 🌟 Support px2rem [#6817](https://github.com/vueComponent/ant-design-vue/issues/6817)
- 🌟 Tag supports borderless mode [#6819](https://github.com/vueComponent/ant-design-vue/issues/6819)
- 🌟 Avatar group mode supports shape [#6822](https://github.com/vueComponent/ant-design-vue/issues/6822)
- 🌟 AutoComplete supports borderless and custom clearIcon [#6829](https://github.com/vueComponent/ant-design-vue/issues/6829)
- 🌟 InputPassword supports controlled visible [#6863](https://github.com/vueComponent/ant-design-vue/issues/6863)
- 🐞 Fix the style misalignment problem when InputGroup is large [#6866](https://github.com/vueComponent/ant-design-vue/issues/6866)
- 🐞 Fix the problem that Checkable Tag cannot customize class [#6854](https://github.com/vueComponent/ant-design-vue/issues/6854)
- 🐞 Fix the rendering problem in Tabs animation mode [#6855](https://github.com/vueComponent/ant-design-vue/issues/6855)
- 🐞 Fix the problem that the Image height attribute does not take effect [#6840](https://github.com/vueComponent/ant-design-vue/issues/6840)
- 🐞 Fix InputNumber trigger mouseup event [#6772](https://github.com/vueComponent/ant-design-vue/issues/6772)
- 🐞 Fix the Dropdown style problem when Tabs are collapsed [#6757](https://github.com/vueComponent/ant-design-vue/issues/6757)
- 🐞 Fix Table expandedRowRender property does not take effect [#6783](https://github.com/vueComponent/ant-design-vue/issues/6783)
- 🐞 Fix dayjs not packaged into dist [#6767](https://github.com/vueComponent/ant-design-vue/issues/6767)
- 🐞 Fix clipPath browser compatibility issue [#6770](https://github.com/vueComponent/ant-design-vue/issues/6770)
- 🐞 Fix Carousel autoplay responsive problem [#6768](https://github.com/vueComponent/ant-design-vue/issues/6768)
- 🐞 Fix PageHeader ghost style problem [#6761](https://github.com/vueComponent/ant-design-vue/issues/6761)
- 🐞 Fix Checkbox not triggering Form validation [#6741](https://github.com/vueComponent/ant-design-vue/issues/6741)
- 🐞 Fix the problem that the Input prefix attribute does not take effect [#6810](https://github.com/vueComponent/ant-design-vue/issues/6810)
- 🐞 Fix Badge style problem in Avatar [#6874](https://github.com/vueComponent/ant-design-vue/issues/6874)
## 4.0
### 🔥🔥🔥 4.0 official version released 🔥🔥🔥
### Design specification adjustment
- Basic rounded corner adjustment, changed from unified `2px` to four-level rounded corners, which are `2px` `4px` `6px` `8px` respectively, which are applied to different scenarios, for example, the rounded corners of the default size Button are adjusted to `6px`.
- Main color adjustment, changed from `#1890ff` to `#1677ff`.
- Overall shadow adjustment, from the original three-level shadow adjustment to two levels, which are used for resident page components (such as Card) and interactive feedback (such as Dropdown).
- Adjust the internal spacing of some components.
- Overall de-wireframing.
### Add 5 new components
- Segmented segment controller
- WaterMark watermark
- QrCode QR code
- FloatButton floating button
- Tour roaming guide
### Technical adjustments
- Deprecated less and adopted CSS-in-JS to better support dynamic themes.
- All less files are removed, and less variables no longer support leaking.
- css files are no longer included in the product. Since CSS-in-JS supports importing on demand, the original `ant-design-vue/dist/antd.css` has also been removed. If you need to reset some basic styles, please import `ant-design-vue/dist/reset .css`.
- If you need to reset the style of the component and don't want to introduce `ant-design-vue/dist/reset.css` to pollute the global style, you can try to use [App component](/components/app), to solve the problem that native elements do not have ant-design-vue specification style.
- Removed css variables and dynamic theme schemes built on top of it.
- LocaleProvider has been deprecated in 3.x (use `<ConfigProvider locale />` instead), we have completely removed the related directories `ant-design-vue/es/locale-provider`, `ant- design-vue/lib/locale-provider`.
- `babel-plugin-import` is no longer supported, CSS-in-JS itself has the ability to load on demand, no longer need plug-in support.
#### Component API adjustments
- The classname API of the component popup is unified to `popupClassName`, and similar APIs such as `dropdownClassName` will be replaced.
- AutoComplete component
- Cascader component
- Select component
- TreeSelect component
- TimePicker component
- DatePicker component
- Mentions component
- The controlled visibility API of the component popup is unified as `open`, and `visible` and other similar APIs will be replaced.
- Drawer component `visible` becomes `open`.
- Modal component `visible` becomes `open`.
- Dropdown component `visible` becomes `open`.
- Tooltip component `visible` becomes `open`.
- Tag component `visible` has been removed.
- Slider component `tooltip` related API converges to `tooltip` property.
- Table component `filterDropdownVisible` changed to `filterDropdownOpen`.
- `getPopupContainer`: All `getPopupContainer` needs to ensure that the returned div is unique.
- Drawer `style` and `class` are migrated to the Drawer popup area, and the original attributes are replaced by `rootClassName` and `rootStyle`.
#### Component refactoring and removal
- Remove the `locale-provider` directory. `LocaleProvider` has been removed in v4, please use `ConfigProvider` instead.
- Remove `xxxl` breakpoint attribute in grid layout. `xxxl` attribute has been removed in v4, you can use [theme customization](/docs/vue/customize-theme) to modify `screen[XS|SM|MD|LG|XL|XXL]` to modify the break Point value achieved.
- The BackTop component was deprecated in `4.0.0` and moved to the FloatButton floating button. If needed, it can be imported from FloatButton.
### [Upgrade Guide](/docs/vue/migration-v4)
## 3.x
Visit [GitHub](https://github.com/vueComponent/ant-design-vue/blob/3.x/CHANGELOG.zh-CN.md) `3.x` Change Log。
## 2.x
Visit [GitHub](https://github.com/vueComponent/ant-design-vue/blob/2.x/CHANGELOG.zh-CN.md) `2.x` Change Log。
## 1.x
Visit [GitHub](https://github.com/vueComponent/ant-design-vue/blob/1.x/CHANGELOG.en-US.md) to read change logs from `0.x` to `1.x`.
================================================
FILE: CHANGELOG.zh-CN.md
================================================
# 更新日志
`ant-design-vue` 严格遵循 [Semantic Versioning 2.0.0](http://semver.org/lang/zh-CN/) 语义化版本规范。
#### 发布周期
- 修订版本号:每周末会进行日常 bugfix 更新。(如果有紧急的 bugfix,则任何时候都可发布)
- 次版本号:每月发布一个带有新特性的向下兼容的版本。
- 主版本号:含有破坏性更新和新特性,不在发布周期内。
---
## 4.2.6
- 🐞 修复 Modal 组件在 chrome 下,aria-hidden 报错问题 [#7823](https://github.com/vueComponent/ant-design-vue/issues/7823)
- 🐞 修复 Safari 下自带输入法 input 组件输入中文时,自动填写小数点问题 [#7918](https://github.com/vueComponent/ant-design-vue/issues/7918)
- 🐞 修复 InputNumber 组件 disabled 样式问题 [#7776](https://github.com/vueComponent/ant-design-vue/issues/7776)
- 🐞 修复 Select 无法失焦问题 [#7819](https://github.com/vueComponent/ant-design-vue/issues/7819)
## 4.2.5
- 🐞 修复 Empty 组件内存泄漏问题
- 🐞 修复 Image width & height 属性不生效问题
## 4.2.4
- 🐞 修复 Wave 内存泄漏问题
## 4.2.3
- 🌟 TourStep 自定义 Button,支持函数 children [#7628](https://github.com/vueComponent/ant-design-vue/pull/7628)
- 🐞 修复 Select 和 Cascader 搜索多选模式下,输入值被隐藏问题 [#7640](https://github.com/vueComponent/ant-design-vue/issues/7640)
## 4.2.2
- 🐞 修复 TreeSelect placeholder 插槽无效 [#7545](https://github.com/vueComponent/ant-design-vue/issues/7545)
- 🐞 修复 Tree 插槽响应式无效问题 [40ad45](https://github.com/vueComponent/ant-design-vue/commit/40ad45bc05b2bf9d0a2445d9f6ff365468ba90b7)
- 🐞 修复 FloatButton target 类型错误问题 [#7576](https://github.com/vueComponent/ant-design-vue/issues/7576)
- 🐞 修复 FormItem className 错误问题 [#7582](https://github.com/vueComponent/ant-design-vue/issues/7582)
- 🐞 修复 Input lazy 下无法输入问题 [#7543](https://github.com/vueComponent/ant-design-vue/issues/7543)
- 🐞 修复 Select 输入中文时,placeholder 未隐藏问题 [#7611](https://github.com/vueComponent/ant-design-vue/issues/7611)
- 🐞 修复 DatePicker 点击预设选项时,弹窗闪动问题 [#7550](https://github.com/vueComponent/ant-design-vue/issues/7550)
## 4.2.1
- 🐞 修复 Input 清空操作才报错问题 [#7523](https://github.com/vueComponent/ant-design-vue/issues/7523)
## 4.2.0
- 🌟 优化 layout 组件切换 dark 模式时 textColor 变化 [#7498](https://github.com/vueComponent/ant-design-vue/issues/7498)
- 🌟 Tooltip 新增 arrow 隐藏配置 [#7459](https://github.com/vueComponent/ant-design-vue/issues/7459)
- 🌟 优化 Table hover 性能 [#7451](https://github.com/vueComponent/ant-design-vue/issues/7451)
- 🐞 修复 useForm 校验时更改 model,导致校验错误问题 [#ffd4d8](https://github.com/vueComponent/ant-design-vue/commit/ffd4d8fe927f9ea40cbb6358ad997c447bd9a74e)
- 🐞 修复 Tabs 折叠计算错误问题 [#7491](https://github.com/vueComponent/ant-design-vue/issues/7491)
- 🐞 修复 Qrcode 缺少类型提示问题 [#7502](https://github.com/vueComponent/ant-design-vue/issues/7502)
- 🐞 修复 Menu 在 SSR 下渲染错误问题 [#7349](https://github.com/vueComponent/ant-design-vue/issues/7349)
- 🐞 修复 Select、Cascader 在 SSR 下渲染错误问题 [#7377](https://github.com/vueComponent/ant-design-vue/issues/7377)
- 🐞 修复 AutoComplete 缺少 option slot 声明问题 [#7396](https://github.com/vueComponent/ant-design-vue/issues/7396)
- 🐞 修复 Textarea autoSize 不生效问题 [#7478](https://github.com/vueComponent/ant-design-vue/issues/7478)
- 🐞 修复 Pagination 回车键触发两次翻页问题 [#7368](https://github.com/vueComponent/ant-design-vue/issues/7368)
- 🐞 修复输入框输入中文问题 [#7391](https://github.com/vueComponent/ant-design-vue/issues/7391)[#7516](https://github.com/vueComponent/ant-design-vue/issues/7516)
- 🐞 修复 Carousel beforeChange current 参数错误问题 [#7419](https://github.com/vueComponent/ant-design-vue/issues/7419)
## 4.1.2
- 🐞 修复 table resize 在 vue 3.4 下报错问题 [#7291](https://github.com/vueComponent/ant-design-vue/issues/7291)
- 🐞 修复 Segmented title 属性不显示问题 [#7302](https://github.com/vueComponent/ant-design-vue/issues/7302)
## 4.1.1
- 🌟 QRcode 新增 scanned 状态 [#7242](https://github.com/vueComponent/ant-design-vue/issues/7242)
- 🐞 修复 css prefix 在 nuxt 问题 [#7256](https://github.com/vueComponent/ant-design-vue/issues/7256)
- 🐞 修复 dropdown 关闭问题 [#7246](https://github.com/vueComponent/ant-design-vue/issues/7246)
- 🐞 修复 divider vertical dashed 不显示问题 [#7218](https://github.com/vueComponent/ant-design-vue/issues/7218)
- 🐞 修复 hook 模式 message 控制台 warning 问题 [#7281](https://github.com/vueComponent/ant-design-vue/issues/7281)
- 🐞 修复 table 展开在 vue 3.4 下报错问题 [#7265](https://github.com/vueComponent/ant-design-vue/issues/7265)
- 🐞 修复 table group 过滤状态错误问题 [#7233](https://github.com/vueComponent/ant-design-vue/issues/7233)
## 4.1.0
- 🐞 适配 vue 3.4 [#7239](https://github.com/vueComponent/ant-design-vue/issues/7239)
## 4.0.8
- 🐞 修复在 Nuxt 下 theme 响应式失效问题 [#7180](https://github.com/vueComponent/ant-design-vue/issues/7180)
- 🐞 修复 Wave 引起的报错问题 [#7108](https://github.com/vueComponent/ant-design-vue/issues/7108)
- 🐞 修复 Upload disabled 继承问题 [#7110](https://github.com/vueComponent/ant-design-vue/issues/7110)
- 🐞 修复 Tooltip popupAlign 未生效问题 [#7112](https://github.com/vueComponent/ant-design-vue/issues/7112)
- 🐞 修复 Typography 闪动问题 [#7146](https://github.com/vueComponent/ant-design-vue/issues/7146)
- 🐞 修复 RangePicker prevIcon nextIcon 未生效问题 [#7127](https://github.com/vueComponent/ant-design-vue/issues/7127)
- 🐞 修复 watermark 未监听子元素变动问题 [#7149](https://github.com/vueComponent/ant-design-vue/issues/7149)
- 🐞 修复 Menu 动画丢失问题 [#7130](https://github.com/vueComponent/ant-design-vue/issues/7130)
- 🐞 修复 TextArea autosize 时光标变化问题 [#7121](https://github.com/vueComponent/ant-design-vue/issues/7121)
## 4.0.7
- 🌟 新增 Flex 组件 [#7052](https://github.com/vueComponent/ant-design-vue/issues/7052)
- 🌟 ConfigProvider 新增 wave 配置 [#7036](https://github.com/vueComponent/ant-design-vue/issues/7036)
- 🌟 Watermark 支持暗黑模式 [#7067](https://github.com/vueComponent/ant-design-vue/issues/7067)
- 🐞 修复 Space 重复 Key 问题 [#7048](https://github.com/vueComponent/ant-design-vue/issues/7048)
- 🐞 修复 Upload disabled 优先级错误问题 [#7047](https://github.com/vueComponent/ant-design-vue/issues/7047)
- 🐞 修复 Carousel 在 jsx 中渲染错误问题 [#7077](https://github.com/vueComponent/ant-design-vue/issues/7077)
- 🐞 修复 Message 偏移位置问题 [#7093](https://github.com/vueComponent/ant-design-vue/issues/7093)
- 🐞 修复 Collapse 自定义 prefix 时动画失效问题 [#7074](https://github.com/vueComponent/ant-design-vue/issues/7074)
## 4.0.6
- 🐞 修复 4.0.4 引入的 Dropdown onVisibleChange 失效问题 [#7031](https://github.com/vueComponent/ant-design-vue/issues/7031)
## 4.0.5
- 🐞 修复 cssinjs 性能问题 [#7023](https://github.com/vueComponent/ant-design-vue/issues/7023)
## 4.0.4
- 🌟 新增 esm 目标文件
- 🌟 FormItem 新增 tooltip 属性 [#7014](https://github.com/vueComponent/ant-design-vue/issues/7014)
- 🐞 修复 useMessage getContainer 不生效问题 [#6942](https://github.com/vueComponent/ant-design-vue/issues/6942)
- 🐞 修复 Image 多次触发 onPreviewVisibleChange 事件问题 [#6945](https://github.com/vueComponent/ant-design-vue/issues/6945)
- 🐞 修复 Checkbox 全局 disabled 不生效问题 [#6970](https://github.com/vueComponent/ant-design-vue/issues/6970)
- 🐞 修复 Drawer contentWrapperStyle 不生效问题 [#6983](https://github.com/vueComponent/ant-design-vue/issues/6983)
- 🐞 优化 Select Dropdown 等下拉列表滚动条显示隐藏逻辑 [#6987](https://github.com/vueComponent/ant-design-vue/issues/6987)
- 🐞 修复 Select Dropdown 等下拉列表中有 input 等组件时,隐藏问题 [#7020](https://github.com/vueComponent/ant-design-vue/issues/7020)
## 4.0.3
- 🐞 修复 shadow Dom 下样式丢失问题 [#6912](https://github.com/vueComponent/ant-design-vue/issues/6912)
- 🐞 升级 Icon 依赖,修复 shadow Dom 下 icon css 丢失问题 [#6914](https://github.com/vueComponent/ant-design-vue/issues/6914)
## 4.0.2
- 🐞 修复 useMessage 导致 body 被移除问题 [#6880](https://github.com/vueComponent/ant-design-vue/issues/6880)
- 🐞 修复 Button loading 切换后,水波纹效果不消失问题 [#6895](https://github.com/vueComponent/ant-design-vue/issues/6895)
- 🐞 修复 Image 关闭后 flip 没有重置问题 [#6913](https://github.com/vueComponent/ant-design-vue/issues/6913)
- 🐞 修复 ImageGroup 动画效果丢失问题 [#6898](https://github.com/vueComponent/ant-design-vue/issues/6898)
- 🐞 修复 Modal 缺少 onUpdate:open 属性声明 [#6876](https://github.com/vueComponent/ant-design-vue/issues/6876)
- 🐞 修复 Transfer 的 Checkbox 边缘处会触发多次 click 问题 [#6902](https://github.com/vueComponent/ant-design-vue/issues/6902)
## 4.0.1
- 🌟 FloatButton 添加 Badge 支持 [#6738](https://github.com/vueComponent/ant-design-vue/issues/6738)
- 🌟 Image 预览放大缩小灵敏度调整 [#6784](https://github.com/vueComponent/ant-design-vue/issues/6784)
- 🌟 Image 新增翻转特性 [#6785](https://github.com/vueComponent/ant-design-vue/issues/6785)
- 🌟 新增 App 组件,用于提供上下文 [#6735](https://github.com/vueComponent/ant-design-vue/issues/6735)
- 🌟 样式抽离特性用于 SSR [#6757](https://github.com/vueComponent/ant-design-vue/issues/6757)
- 🌟 支持 px2rem [#6817](https://github.com/vueComponent/ant-design-vue/issues/6817)
- 🌟 Tag 支持无边框模式 [#6819](https://github.com/vueComponent/ant-design-vue/issues/6819)
- 🌟 Avatar group 模式支持 shape [#6822](https://github.com/vueComponent/ant-design-vue/issues/6822)
- 🌟 AutoComplete 支持无边框和自定义 clearIcon [#6829](https://github.com/vueComponent/ant-design-vue/issues/6829)
- 🌟 InputPassword 支持受控 visible [#6863](https://github.com/vueComponent/ant-design-vue/issues/6863)
- 🐞 修复 InputGroup 在 large 时样式错位问题 [#6866](https://github.com/vueComponent/ant-design-vue/issues/6866)
- 🐞 修复 Checkable Tag 无法自定义 class 问题 [#6854](https://github.com/vueComponent/ant-design-vue/issues/6854)
- 🐞 修复 Tabs 动画模式下渲染问题 [#6855](https://github.com/vueComponent/ant-design-vue/issues/6855)
- 🐞 修复 Image height 属性不生效问题 [#6840](https://github.com/vueComponent/ant-design-vue/issues/6840)
- 🐞 修复 InputNumber 触发 mouseup 事件问题 [#6772](https://github.com/vueComponent/ant-design-vue/issues/6772)
- 🐞 修复 Tabs 折叠时 Dropdown 样式问题 [#6757](https://github.com/vueComponent/ant-design-vue/issues/6757)
- 🐞 修复 Table expandedRowRender 属性不生效 [#6783](https://github.com/vueComponent/ant-design-vue/issues/6783)
- 🐞 修复 dayjs 未打包进 dist 问题 [#6767](https://github.com/vueComponent/ant-design-vue/issues/6767)
- 🐞 解决 clipPath 浏览器兼容问题 [#6770](https://github.com/vueComponent/ant-design-vue/issues/6770)
- 🐞 修复 Carousel autoplay 响应式问题 [#6768](https://github.com/vueComponent/ant-design-vue/issues/6768)
- 🐞 修复 PageHeader ghost 样式问题 [#6761](https://github.com/vueComponent/ant-design-vue/issues/6761)
- 🐞 修复 Checkbox 没有触发 Form 校验问题 [#6741](https://github.com/vueComponent/ant-design-vue/issues/6741)
- 🐞 修复 Input prefix 属性未生效问题 [#6810](https://github.com/vueComponent/ant-design-vue/issues/6810)
- 🐞 修复 Badge 在 Avatar 中样式问题 [#6874](https://github.com/vueComponent/ant-design-vue/issues/6874)
## 4.0
### 🔥🔥🔥 4.0 正式版发布 🔥🔥🔥
### 设计规范调整
- 基础圆角调整,由统一的 `2px` 改为四级圆角,分别为 `2px` `4px` `6px` `8px`,分别应用于不同场景,比如默认尺寸的 Button 的圆角调整为了 `6px`。
- 主色调整,由 `#1890ff` 改为 `#1677ff`。
- 整体阴影调整,由原本的三级阴影调整为两级,分别用于常驻页面的组件(如 Card)和交互反馈(如 Dropdown)。
- 部分组件内间距调整。
- 整体去线框化。
### 新增 5 个组件
- Segmented 分段控制器
- WaterMark 水印
- QrCode 二维码
- FloatButton 悬浮按钮
- Tour 漫游式引导
### 技术调整
- 弃用 less,采用 CSS-in-JS,更好地支持动态主题。
- 所有 less 文件全部移除,less 变量不再支持透出。
- 产物中不再包含 css 文件。由于 CSS-in-JS 支持按需引入,原本的 `ant-design-vue/dist/antd.css` 也已经移除,如果需要重置一些基本样式请引入 `ant-design-vue/dist/reset.css`。
- 如果需要组件重置样式,又不想引入 `ant-design-vue/dist/reset.css` 从而导致污染全局样式的话,可以尝试在应用最外层使用[App 组件](/components/app-cn),解决原生元素没有 ant-design-vue 规范样式的问题。
- 移除 css variables 以及在此之上构筑的动态主题方案。
- LocaleProvider 在 3.x 中已经废弃(使用 `<ConfigProvider locale />` 替代),我们在 4.x 里彻底移除了相关目录 `ant-design-vue/es/locale-provider`、`ant-design-vue/lib/locale-provider`。
- 不再支持 `babel-plugin-import`,CSS-in-JS 本身具有按需加载的能力,不再需要插件支持。
#### 组件 API 调整
- 组件弹框的 classname API 统一为 `popupClassName`,`dropdownClassName` 等类似 API 都会被替换。
- AutoComplete 组件
- Cascader 组件
- Select 组件
- TreeSelect 组件
- TimePicker 组件
- DatePicker 组件
- Mentions 组件
- 组件弹框的受控可见 API 统一为 `open`,`visible` 等类似 API 都会被替换。
- Drawer 组件 `visible` 变为 `open`。
- Modal 组件 `visible` 变为 `open`。
- Dropdown 组件 `visible` 变为 `open`。
- Tooltip 组件 `visible` 变为 `open`。
- Tag 组件 `visible` 已移除。
- Slider 组件 `tooltip` 相关 API 收敛到 `tooltip` 属性中。
- Table 组件 `filterDropdownVisible` 变为 `filterDropdownOpen`。
- `getPopupContainer`: 所有的 `getPopupContainer` 都需要保证返回的是唯一的 div。
- Drawer `style` 和 `class` 迁移至 Drawer 弹层区域上,原属性替换为 `rootClassName` 和 `rootStyle`。
#### 组件重构与移除
- 移除 `locale-provider` 目录。`LocaleProvider` 在 v4 中已移除,请使用 `ConfigProvider` 替代。
- 移除栅格布局中的`xxxl`断点属性。 `xxxl`属性已经在 v4 被移除,您可以使用 [主题定制](/docs/vue/customize-theme-cn) 修改 `screen[XS|SM|MD|LG|XL|XXL]` 来修改断点值实现。
- BackTop 组件在 `4.0.0` 中废弃,移至 FloatButton 悬浮按钮中。如需使用,可以从 FloatButton 中引入。
### [升级指南](/docs/vue/migration-v4-cn)
## 3.x
去 [GitHub](https://github.com/vueComponent/ant-design-vue/blob/3.x/CHANGELOG.zh-CN.md) 查看 `3.x` 的 Change Log。
## 2.x
去 [GitHub](https://github.com/vueComponent/ant-design-vue/blob/2.x/CHANGELOG.zh-CN.md) 查看 `2.x` 的 Change Log。
## 1.x
去 [GitHub](https://github.com/vueComponent/ant-design-vue/blob/1.x/CHANGELOG.zh-CN.md) 查看 `0.x` 到 `1.x` 的 Change Log。
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2017-present ant-design-vue
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
MIT LICENSE
Copyright (c) 2015-present Alipay.com, https://www.alipay.com/
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
MIT License
Copyright (c) 2019-PRESENT Anthony Fu<https://github.com/antfu>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README-zh_CN.md
================================================
<h1 align="center">
<a href="https://www.antdv.com/" target="_blank">Ant Design Vue</a>
</h1>
<div align="center">
基于 Ant Design 和 Vue 3 的企业级 UI 组件库。
 [](https://codecov.io/gh/vueComponent/ant-design-vue) [](https://www.npmjs.org/package/ant-design-vue) [](http://www.npmtrends.com/ant-design-vue) [](#backers) [](#sponsors) [](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) [](https://github.com/actions-cool/issues-helper)
</div>
[](https://www.antdv.com/)
<div align="center">
<sup><strong>赞助商</strong></sup>
<br>
<a href="https://mentorbook.ai/" target="_blank">
<img src="/site/public/mentorbook_banner_zh.svg" alt="Mentorbook.AI - 你的 AI 导师,你的学习之旅" />
</a>
</div>
[English](./README.md) | 简体中文
## 特性
- 提炼自企业级中后台产品的交互语言和视觉风格。
- 开箱即用的高质量 Vue 组件。
- 共享 [Ant Design of React](http://ant-design.gitee.io/docs/spec/introduce-cn) 设计工具体系。
## 关注我们
收藏加关注,第一时间获取更新动态!

## 支持环境
- 现代浏览器。1.x 版本支持 IE 9+(需要 [polyfills](https://www.antdv.com/docs/vue/getting-started-cn/#兼容性))
- 支持服务端渲染。
- [Electron](https://electronjs.org/)
- 支持 Vue 2 和 Vue 3
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Opera | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Electron |
| --- | --- | --- | --- | --- | --- |
| Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
## 安装
### 使用 npm 或 yarn 安装
```bash
$ npm install ant-design-vue --save
```
```bash
$ yarn add ant-design-vue
```
如果你的网络环境不佳,推荐使用 [cnpm](https://github.com/cnpm/cnpm)。
## 链接
- [首页](https://www.antdv.com/)
- [Vue 官方文档](https://cn.vuejs.org/)
- [Ant Design Of React](http://ant.design/)
## 生态
| Project | Description |
| --- | --- |
| [vue-ref](https://github.com/vueComponent/vue-ref) | 您可以使用回调来获取组件的引用,类似 react |
| [ant-design-vue-helper](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) | ant-design-vue 的 vscode 扩展 |
| [vue-cli-plugin-ant-design](https://github.com/vueComponent/vue-cli-plugin-ant-design) | 使用 vue-cli3 快速使用 ant-design-vue 组件库 |
| [vue-dash-event](https://github.com/vueComponent/vue-dash-event) | 在 DOM 模板中,您可以使用 ant-design-vue 组件的自定义事件(camelCase) |
| [@formily/antdv](https://github.com/formilyjs/antdv) | 这是一个结合了 Formily 和 ant-design-vue 的组件库 |
| [@ant-design-vue/nuxt](https://github.com/vueComponent/ant-design-vue-nuxt) | ant-design-vue 的 nuxt 模块扩展 |
| [ant-design-x-vue](https://github.com/wzc520pyfm/ant-design-x-vue) | 基于 Ant Design X 设计规范的 Vue AI 界面解决方案 |
## 问答
> 强烈推荐阅读 [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way)、[《如何向开源社区提问题》](https://github.com/seajs/seajs/issues/545) 和 [《如何有效地报告 Bug》](http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html)、[《如何向开源项目提交无法解答的问题》](https://zhuanlan.zhihu.com/p/25795393),更好的问题更容易获得帮助。
[](https://issuehunt.io/repos/104172832)
## 赞助
ant-design-vue 是 MIT 协议的开源项目。为了项目能够更好的持续的发展,我们期望获得更多的[支持者](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md),你可以通过如下任何一种方式支持我们:
- [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## 赞助商
成为赞助商,并在 Github 上的自述文件上获得您的徽标,并链接到您的网站。 [[成为赞助商](https://opencollective.com/ant-design-vue#sponsor)]
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
## 支持者
每月捐款支持我们,帮助我们继续我们的活动。 [[成为支持者](https://opencollective.com/ant-design-vue#backer)]
<a href="https://github.com/chuzhixin/vue-admin-beautiful" target="_blank"><img width="64" style="border-radius: 50%;" src="https://gitee.com/chu1204505056/image/raw/master/vue-admin-beautiful.png" title="vue-admin-beautiful"></a> <a href="https://opencollective.com/ant-design-vue/backer/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/backer/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/backer/10/avatar.svg"></a>
## Patreon
每月捐款支持我们,帮助我们继续我们的活动。 [[成为支持者](https://www.patreon.com/tangjinzhou)]
<a href="https://www.mokeyjay.com" target="_blank"><img width="64" style="border-radius: 50%;" src="https://www.mokeyjay.com/headimg.png" title="donation by Patreon"></a>
## [更多赞助者 (通过 Patreon、支付宝、微信、paypal 等等)](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md)
## 贡献者
感谢所有为 ant-design-vue 做出贡献的人!
<a href="https://github.com/vueComponent/ant-design-vue/graphs/contributors">
<img src="https://contrib.rocks/image?repo=vueComponent/ant-design-vue&max=100&columns=15" />
</a>
================================================
FILE: README.md
================================================
<p align="center">
<a href="https://www.antdv.com/">
<img width="200" src="https://www.antdv.com/logo.png">
</a>
</p>
<h1 align="center">
<a href="https://www.antdv.com/" target="_blank">Ant Design Vue</a>
</h1>
<div align="center">
An enterprise-class UI components based on Ant Design and Vue.
 [](https://codecov.io/gh/vueComponent/ant-design-vue) [](https://www.npmjs.org/package/ant-design-vue) [](http://www.npmtrends.com/ant-design-vue) [](#backers) [](#sponsors) [](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) [](https://github.com/actions-cool/issues-helper)
</div>
[](https://www.antdv.com/)
<div align="center">
<sup><strong>Sponsored by</strong></sup>
<br>
<a href="https://mentorbook.ai/" target="_blank">
<img src="/site/public/mentorbook_banner_en.svg" alt="Mentorbook.AI - Your AI Mentor, Your Learning Journey" />
</a>
</div>
English | [简体中文](./README-zh_CN.md)
## Features
- An enterprise-class UI design system for desktop applications.
- A set of high-quality Vue components out of the box.
- Shared [Ant Design of React](https://ant.design/docs/spec/introduce) design resources.
## Getting started & staying tuned with us.
Star us, and you will receive all releases notifications from GitHub without any delay!

## Environment Support
- Modern browsers. v1.x support Internet Explorer 9+ (with [polyfills](https://www.antdv.com/docs/vue/getting-started/#compatibility))
- Server-side Rendering
- Support Vue 2 & Vue 3
- [Electron](https://electronjs.org/)
| [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png" alt="IE / Edge" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>IE / Edge | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png" alt="Firefox" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png" alt="Chrome" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png" alt="Safari" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Safari | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/opera/opera_48x48.png" alt="Opera" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Opera | [<img src="https://raw.githubusercontent.com/alrra/browser-logos/master/src/electron/electron_48x48.png" alt="Electron" width="24px" height="24px" />](http://godban.github.io/browsers-support-badges/)</br>Electron |
| --- | --- | --- | --- | --- | --- |
| Edge | last 2 versions | last 2 versions | last 2 versions | last 2 versions | last 2 versions |
## Using npm or yarn
**We recommend using npm or yarn to install**, it not only makes development easier, but also allow you to take advantage of the rich ecosystem of Javascript packages and tooling.
```bash
$ npm install ant-design-vue --save
```
```bash
$ yarn add ant-design-vue
```
If you are in a bad network environment, you can try other registries and tools like [cnpm](https://github.com/cnpm/cnpm).
## Links
- [Home page](https://www.antdv.com/)
- [Vue](https://vuejs.org/)
- [Ant Design Of React](http://ant.design/)
## Ecosystem
| Project | Description |
| --- | --- |
| [vue-ref](https://github.com/vueComponent/vue-ref) | You can use the callback to get a reference like react |
| [ant-design-vue-helper](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) | A vscode extension for ant-design-vue |
| [vue-cli-plugin-ant-design](https://github.com/vueComponent/vue-cli-plugin-ant-design) | Vue-cli 3 plugin to add ant-design-vue |
| [vue-dash-event](https://github.com/vueComponent/vue-dash-event) | The library function, implemented in the DOM template, can use the custom event of the ant-design-vue component (camelCase) |
| [@formily/antdv](https://github.com/formilyjs/antdv) | The Library with Formily and ant-design-vue |
| [@ant-design-vue/nuxt](https://github.com/vueComponent/ant-design-vue-nuxt) | A nuxt module for ant-design-vue |
| [ant-design-x-vue](https://github.com/wzc520pyfm/ant-design-x-vue) | A Vue AI interface solutions base on the Ant Design X design specification |
## Donation
ant-design-vue is an MIT-licensed open source project. In order to achieve better and sustainable development of the project, we expect to gain more [backers](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md). You can support us in any of the following ways:
- [Patreon](https://www.patreon.com/tangjinzhou)
- [opencollective](https://opencollective.com/ant-design-vue)
- [paypal](https://www.paypal.me/tangjinzhou)
- ETH: 0x30cc48515d8ae9fefa20ab87226ad7e8ab9c3bc2
## Sponsors
Become a sponsor and get your logo on our README on Github with a link to your site. [[Become a sponsor](https://opencollective.com/ant-design-vue#sponsor)]
<a href="http://www.jeecg.com/" target="_blank"><img src="https://www.antdv.com/jeecg-logo.png" height="64"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/0/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/0/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/1/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/1/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/2/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/2/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/3/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/3/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/4/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/4/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/5/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/5/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/6/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/6/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/7/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/7/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/8/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/8/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/9/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/9/avatar.svg"></a> <a href="https://opencollective.com/ant-design-vue/sponsor/10/website" target="_blank"><img src="https://opencollective.com/ant-design-vue/sponsor/10/avatar.svg"></a>
## [More Sponsor (From Patreon、alipay、wechat、paypal...)](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md)
## Contributors
Thank you to all the people who already contributed to ant-design-vue!
<a href="https://github.com/vueComponent/ant-design-vue/graphs/contributors">
<img src="https://contrib.rocks/image?repo=vueComponent/ant-design-vue&max=100&columns=15" />
</a>
[](https://issuehunt.io/repos/104172832)
This project is tested with BrowserStack.
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
Use this section to tell people about which versions of your project are currently being supported with security updates.
| Version | Supported |
| ------- | ------------------ |
| 1.x | :white_check_mark: |
| 2.x | :x: |
| 3.x | :white_check_mark: |
## Reporting a Vulnerability
Use this section to tell people how to report a vulnerability.
Tell them where to go, how often they can expect to get an update on a reported vulnerability, what to expect if the vulnerability is accepted or declined, etc.
================================================
FILE: antd-tools/apiCollection.js
================================================
// Read all the api from current documents
const glob = require('glob');
const fs = require('fs');
const COMPONENT_NAME = /components\/([^/]*)/;
const PROP_NAME = /^\s*\|\s*([^\s|]*)/;
const components = {};
function mappingPropLine(component, line) {
const propMatch = line.match(PROP_NAME);
if (!propMatch) return;
const propName = propMatch[1];
if (!/^[a-z]/.test(propName)) return;
components[component] = Array.from(new Set([...(components[component] || []), propName]));
}
function apiReport(entities) {
const apis = {};
Object.keys(entities).forEach(component => {
const apiList = entities[component];
apiList.forEach(api => {
if (typeof apis[api] === 'function') {
apis[api] = [];
}
apis[api] = [...(apis[api] || []), component];
});
});
return apis;
}
function printReport(apis) {
const apiList = Object.keys(apis).map(api => ({
name: api,
componentList: apis[api],
}));
apiList.sort((a, b) => b.componentList.length - a.componentList.length);
// eslint-disable-next-line no-console
console.log('| name | components | comments |');
// eslint-disable-next-line no-console
console.log('| ---- | ---------- | -------- |');
apiList.forEach(({ name, componentList }) => {
// eslint-disable-next-line no-console
console.log('|', name, '|', componentList.join(', '), '| |');
});
}
module.exports = () => {
glob('components/*/*.md', (error, files) => {
files.forEach(filePath => {
// Read md file to parse content
const content = fs.readFileSync(filePath, 'utf8');
const component = filePath.match(COMPONENT_NAME)[1];
// Parse lines to get API
const lines = content.split(/[\r\n]+/);
lines.forEach(line => {
mappingPropLine(component, line);
});
});
printReport(apiReport(components));
});
};
================================================
FILE: antd-tools/cli/index.js
================================================
#!/usr/bin/env node
'use strict';
require('colorful').colorful();
const program = require('commander');
const packageInfo = require('../../package.json');
program
.version(packageInfo.version)
.command('run [name]', 'run specified task')
.parse(process.argv);
// https://github.com/tj/commander.js/pull/260
const proc = program.runningCommand;
if (proc) {
proc.on('close', process.exit.bind(process));
proc.on('error', () => {
process.exit(1);
});
}
const subCmd = program.args[0];
if (!subCmd || subCmd !== 'run') {
program.help();
}
================================================
FILE: antd-tools/cli/run.js
================================================
#!/usr/bin/env node
/* eslint-disable no-console */
'use strict';
require('colorful').colorful();
const gulp = require('gulp');
const program = require('commander');
program.option('-c --npm-tag <type>', 'add --npm-tag=xxx');
program.on('--help', () => {
console.log(' Usage:'.to.bold.blue.color);
console.log();
});
program.parse(process.argv);
function runTask(toRun) {
const metadata = { task: toRun };
// Gulp >= 4.0.0 (doesn't support events)
const taskInstance = gulp.task(toRun);
if (taskInstance === undefined) {
gulp.emit('task_not_found', metadata);
return;
}
const start = process.hrtime();
gulp.emit('task_start', metadata);
try {
taskInstance.apply(gulp);
metadata.hrDuration = process.hrtime(start);
gulp.emit('task_stop', metadata);
gulp.emit('stop');
} catch (err) {
err.hrDuration = process.hrtime(start);
err.task = metadata.task;
gulp.emit('task_err', err);
}
}
const task = program.args[0];
if (!task) {
program.help();
} else {
console.log('antd-tools run', task);
require('../gulpfile');
runTask(task);
}
================================================
FILE: antd-tools/generator-types/README.md
================================================
fork github.com/youzan/vant packages/generator-types
================================================
FILE: antd-tools/generator-types/index.js
================================================
const path = require('path');
const pkg = require('../../package.json');
const { parseAndWrite } = require('./lib/index.js');
const rootPath = path.resolve(__dirname, '../../');
parseAndWrite({
version: pkg.version,
name: 'ant-design-vue',
path: path.resolve(rootPath, './components'),
typingsPath: path.resolve(rootPath, './typings/global.d.ts'),
// default match lang
test: /en-US\.md/,
outputDir: path.resolve(rootPath, './vetur'),
tagPrefix: 'a-',
})
.then(result => {
// eslint-disable-next-line no-console
console.log(`generator types success: ${result} tags generated`);
})
.catch(error => {
console.error('generator types error', error);
return Promise.reject(error);
});
================================================
FILE: antd-tools/generator-types/src/formatter.ts
================================================
import type { Articals } from './parser';
import { formatType, removeVersion, toKebabCase } from './utils';
import type { VueTag } from './type';
function getComponentName(name: string, tagPrefix: string) {
if (name) {
return tagPrefix + toKebabCase(name.split(' ')[0]);
}
return '';
}
function parserProps(tag: VueTag, line: any) {
const [name, desc, type, defaultVal] = line;
if (
type &&
(type.includes('v-slot') ||
type.includes('slot') ||
type.includes('slots') ||
type.includes('slot-scoped'))
) {
tag.slots!.push({
name: removeVersion(name),
description: desc,
});
}
tag.attributes!.push({
name: removeVersion(name),
default: defaultVal,
description: desc,
value: {
type: formatType(type || ''),
kind: 'expression',
},
});
}
export function formatter(
articals: Articals,
componentName: string,
kebabComponentName: string,
tagPrefix = '',
) {
if (!articals.length) {
return;
}
const tags: VueTag[] = [];
const tag: VueTag = {
name: kebabComponentName,
slots: [],
events: [],
attributes: [],
};
tags.push(tag);
const tables = articals.filter(artical => artical.type === 'table');
tables.forEach(item => {
const { table } = item;
const prevIndex = articals.indexOf(item) - 1;
const prevArtical = articals[prevIndex];
if (!prevArtical || !prevArtical.content || !table || !table.body) {
return;
}
const tableTitle = prevArtical.content;
if (tableTitle.includes('API')) {
table.body.forEach(line => {
parserProps(tag, line);
});
return;
}
if (tableTitle.includes('events') && !tableTitle.includes(componentName)) {
table.body.forEach(line => {
const [name, desc] = line;
tag.events!.push({
name: removeVersion(name),
description: desc,
});
});
return;
}
// 额外的子组件
if (
tableTitle.includes(componentName) &&
!tableTitle.includes('events') &&
!tableTitle.includes('()')
) {
const childTag: VueTag = {
name: getComponentName(tableTitle.replace(/\.|\//g, ''), tagPrefix),
slots: [],
events: [],
attributes: [],
};
table.body.forEach(line => {
parserProps(childTag, line);
});
tags.push(childTag);
return;
}
// 额外的子组件事件
if (tableTitle.includes(componentName) && tableTitle.includes('events')) {
const childTagName = getComponentName(
tableTitle.replace('.', '').replace('events', ''),
tagPrefix,
);
const childTag: VueTag | undefined = tags.find(item => item.name === childTagName.trim());
if (!childTag) {
return;
}
table.body.forEach(line => {
const [name, desc] = line;
childTag.events!.push({
name: removeVersion(name),
description: desc,
});
});
return;
}
});
return tags;
}
================================================
FILE: antd-tools/generator-types/src/index.ts
================================================
import glob from 'fast-glob';
import { dirname, join } from 'path';
import { mdParser } from './parser';
import { formatter } from './formatter';
import { genWebTypes } from './web-types';
import { outputFileSync, readFileSync } from 'fs-extra';
import type { Options, VueTag } from './type';
import { getComponentName, normalizePath, toKebabCase } from './utils';
import { flatMap } from 'lodash';
async function readMarkdown(options: Options): Promise<Map<String, VueTag>> {
const mdPaths = await glob(normalizePath(`${options.path}/**/*.md`));
const data = mdPaths
.filter(md => options.test.test(md))
.map(path => {
const docPath = dirname(path);
const kebabComponentName =
options.tagPrefix + docPath.substring(docPath.lastIndexOf('/') + 1) || '';
const componentName = getComponentName(docPath.substring(docPath.lastIndexOf('/') + 1) || '');
const fileContent = readFileSync(path, 'utf-8');
return formatter(mdParser(fileContent), componentName, kebabComponentName, options.tagPrefix);
})
.filter(item => item) as VueTag[][];
const tags = new Map<String, VueTag>();
flatMap(data, item => item).forEach(mergedTag => mergeTag(tags, mergedTag));
return tags;
}
function readTypings(options: Options): Map<String, VueTag> {
const tags = new Map<String, VueTag>();
const fileContent = readFileSync(options.typingsPath, 'utf-8');
fileContent
.split('\n')
.filter(line => line && line.includes('typeof'))
.map(line => {
const l = line.trim();
return toKebabCase(l.substring(0, l.indexOf(':')));
})
.forEach(tagName =>
tags.set(tagName, {
name: tagName,
slots: [],
events: [],
attributes: [],
}),
);
return tags;
}
function mergeTag(tags: Map<String, VueTag>, mergedTag: VueTag) {
const tagName = mergedTag.name;
const vueTag = tags.get(tagName);
if (vueTag) {
vueTag.slots = [...vueTag.slots, ...mergedTag.slots];
vueTag.events = [...vueTag.events, ...mergedTag.events];
vueTag.attributes = [...vueTag.attributes, ...mergedTag.attributes];
} else {
tags.set(tagName, mergedTag);
}
}
function mergeTags(mergedTagsArr: Map<String, VueTag>[]): VueTag[] {
if (mergedTagsArr.length === 1) return [...mergedTagsArr[0].values()];
const tags = new Map<String, VueTag>();
if (mergedTagsArr.length === 0) return [];
mergedTagsArr.forEach(mergedTags => {
mergedTags.forEach(mergedTag => mergeTag(tags, mergedTag));
});
return [...tags.values()];
}
export async function parseAndWrite(options: Options): Promise<Number> {
if (!options.outputDir) {
throw new Error('outputDir can not be empty.');
}
const tagsFromMarkdown = await readMarkdown(options);
const tagsFromTypings = await readTypings(options);
const tags = mergeTags([tagsFromMarkdown, tagsFromTypings]);
const webTypes = genWebTypes(tags, options);
outputFileSync(join(options.outputDir, 'web-types.json'), JSON.stringify(webTypes, null, 2));
return tags.length;
}
export default { parseAndWrite };
================================================
FILE: antd-tools/generator-types/src/parser.ts
================================================
/* eslint-disable no-cond-assign */
const TITLE_REG = /^(#+)\s+([^\n]*)/;
const TABLE_REG = /^\|.+\r?\n\|\s*-+/;
const TD_REG = /\s*`[^`]+`\s*|([^|`]+)/g;
const TABLE_SPLIT_LINE_REG = /^\|\s*-/;
type TableContent = {
head: string[];
body: string[][];
};
export type Artical = {
type: string;
content?: string;
table?: TableContent;
level?: number;
};
export type Articals = Artical[];
function readLine(input: string) {
const end = input.indexOf('\n');
return input.substring(0, end !== -1 ? end : input.length);
}
function splitTableLine(line: string) {
line = line.replace(/\\\|/g, 'JOIN');
const items = line.split('|').map(item => item.trim().replace(/JOIN/g, '|'));
// remove pipe character on both sides
items.pop();
items.shift();
return items;
}
function tableParse(input: string) {
let start = 0;
let isHead = true;
const end = input.length;
const table: TableContent = {
head: [],
body: [],
};
while (start < end) {
const target = input.substring(start);
const line = readLine(target);
if (!/^\|/.test(target)) {
break;
}
if (TABLE_SPLIT_LINE_REG.test(target)) {
isHead = false;
} else if (!isHead && line.includes('|')) {
const matched = line.trim().match(TD_REG);
if (matched) {
table.body.push(splitTableLine(line));
}
}
start += line.length + 1;
}
return {
table,
usedLength: start,
};
}
export function mdParser(input: string): Articals {
const artical = [];
let start = 0;
const end = input.length;
while (start < end) {
const target = input.substring(start);
let match;
if ((match = TITLE_REG.exec(target))) {
artical.push({
type: 'title',
content: match[2].replace('\r', ''),
level: match[1].length,
});
start += match.index + match[0].length;
} else if ((match = TABLE_REG.exec(target))) {
const { table, usedLength } = tableParse(target.substring(match.index));
artical.push({
type: 'table',
table,
});
start += match.index + usedLength;
} else {
start += readLine(target).length + 1;
}
}
return artical;
}
================================================
FILE: antd-tools/generator-types/src/type.ts
================================================
import type { PathLike } from 'fs';
export type VueSlot = {
name: string;
description: string;
};
export type VueEventArgument = {
name: string;
type: string;
};
export type VueEvent = {
name: string;
description?: string;
arguments?: VueEventArgument[];
};
export type VueAttribute = {
name: string;
default: string;
description: string;
value: {
kind: 'expression';
type: string;
};
};
export type VueTag = {
name: string;
slots: VueSlot[];
events: VueEvent[];
attributes: VueAttribute[];
description?: string;
};
export type Options = {
name: string;
path: PathLike;
typingsPath: PathLike;
test: RegExp;
version: string;
outputDir?: string;
tagPrefix?: string;
};
================================================
FILE: antd-tools/generator-types/src/utils.ts
================================================
// myName -> my-name
export function toKebabCase(camel: string): string {
return camel.replace(/((?<=[a-z\d])[A-Z]|(?<=[A-Z\d])[A-Z](?=[a-z]))/g, '-$1').toLowerCase();
}
// name `v2.0.0` -> name
export function removeVersion(str: string) {
return str.replace(/`(\w|\.)+`/g, '').trim();
}
// *boolean* -> boolean
// _boolean_ -> boolean
export function formatType(type: string) {
return type
.replace(/(^(\*|_))|((\*|_)$)/g, '')
.replace('\\', '')
.replace('\\', '');
}
export function getComponentName(name: string) {
const title = name
.split('-')
.map(it => it.substring(0, 1) + it.substring(1))
.join('');
return title.substring(0, 1).toUpperCase() + title.substring(1);
}
export function normalizePath(path: string): string {
return path.replace(/\\/g, '/');
}
================================================
FILE: antd-tools/generator-types/src/web-types.ts
================================================
import type { VueTag, Options } from './type';
// create web-types.json to provide autocomplete in JetBrains IDEs
export function genWebTypes(tags: VueTag[], options: Options) {
return {
$schema: 'https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json',
framework: 'vue',
name: options.name,
version: options.version,
contributions: {
html: {
tags,
attributes: [],
'types-syntax': 'typescript',
},
},
};
}
================================================
FILE: antd-tools/generator-types/tsconfig.json
================================================
{
"compilerOptions": {
"target": "ES2017",
"outDir": "./lib",
"module": "commonjs",
"strict": true,
"declaration": true,
"skipLibCheck": true,
"esModuleInterop": true,
"lib": ["esnext"]
},
"include": ["src/**/*"]
}
================================================
FILE: antd-tools/getBabelCommonConfig.js
================================================
const { resolve, isThereHaveBrowserslistConfig } = require('./utils/projectHelper');
module.exports = function (modules) {
const plugins = [
[
resolve('@babel/plugin-transform-typescript'),
{
isTSX: true,
},
],
[resolve('@vue/babel-plugin-jsx'), { mergeProps: false, enableObjectSlots: false }],
resolve('@babel/plugin-proposal-optional-chaining'),
resolve('@babel/plugin-transform-object-assign'),
resolve('@babel/plugin-proposal-object-rest-spread'),
resolve('@babel/plugin-proposal-export-default-from'),
resolve('@babel/plugin-proposal-export-namespace-from'),
resolve('@babel/plugin-proposal-class-properties'),
resolve('@babel/plugin-syntax-dynamic-import'),
[
resolve('@babel/plugin-transform-runtime'),
{
useESModules: modules === false,
version:
require(`${process.cwd()}/package.json`).dependencies['@babel/runtime'] || '^7.10.4',
},
],
// resolve('babel-plugin-inline-import-data-uri'),
// resolve('@babel/plugin-transform-member-expression-literals'),
// resolve('@babel/plugin-transform-property-literals'),
// resolve('@babel/plugin-proposal-export-default-from'),
// resolve('@babel/plugin-transform-object-assign'),
// resolve('@babel/plugin-transform-template-literals'),
// resolve('@babel/plugin-proposal-object-rest-spread'),
// resolve('@babel/plugin-proposal-class-properties'),
];
return {
presets: [
[
resolve('@babel/preset-env'),
{
modules,
targets: isThereHaveBrowserslistConfig()
? undefined
: {
browsers: ['last 2 versions', 'Firefox ESR', '> 1%', 'ie >= 11'],
},
},
],
],
plugins,
env: {
test: {
plugins: [resolve('babel-plugin-istanbul')],
},
},
};
};
================================================
FILE: antd-tools/getNpm.js
================================================
'use strict';
const runCmd = require('./runCmd');
module.exports = function (done) {
if (process.env.NPM_CLI) {
done(process.env.NPM_CLI);
return;
}
runCmd('which', ['tnpm'], code => {
let npm = 'npm';
if (!code) {
npm = 'tnpm';
}
done(npm);
});
};
================================================
FILE: antd-tools/getTSCommonConfig.js
================================================
'use strict';
const fs = require('fs');
const { getProjectPath } = require('./utils/projectHelper');
module.exports = function () {
let my = {};
if (fs.existsSync(getProjectPath('tsconfig.json'))) {
my = require(getProjectPath('tsconfig.json'));
}
return Object.assign(
{
noUnusedParameters: true,
noUnusedLocals: true,
strictNullChecks: true,
target: 'es6',
jsx: 'preserve',
moduleResolution: 'node',
declaration: true,
allowSyntheticDefaultImports: true,
},
my.compilerOptions,
);
};
================================================
FILE: antd-tools/getWebpackConfig.js
================================================
const { getProjectPath, resolve } = require('./utils/projectHelper');
const path = require('path');
const webpack = require('webpack');
const WebpackBar = require('webpackbar');
const { merge } = require('webpack-merge');
const TerserPlugin = require('terser-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const CleanUpStatsPlugin = require('./utils/CleanUpStatsPlugin');
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const distFileBaseName = 'antd';
const svgRegex = /\.svg(\?v=\d+\.\d+\.\d+)?$/;
const svgOptions = {
limit: 10000,
minetype: 'image/svg+xml',
};
const imageOptions = {
limit: 10000,
};
function getWebpackConfig(modules, esm = false) {
const pkg = require(getProjectPath('package.json'));
const babelConfig = require('./getBabelCommonConfig')(modules || false);
const pluginImportOptions = {
style: true,
libraryName: distFileBaseName,
libraryDirectory: 'components',
};
babelConfig.plugins.push([resolve('babel-plugin-import'), pluginImportOptions]);
if (modules === false) {
babelConfig.plugins.push(require.resolve('./replaceLib'));
}
/** @type {import('webpack').Configuration} */
const config = {
devtool: 'source-map',
output: {
path: getProjectPath('./dist/'),
filename: '[name].js',
},
resolve: {
modules: ['node_modules', path.join(__dirname, '../node_modules')],
extensions: [
'.web.tsx',
'.web.ts',
'.web.jsx',
'.web.js',
'.ts',
'.tsx',
'.js',
'.jsx',
'.vue',
'.md',
'.json',
],
alias: {
'@': process.cwd(),
},
fallback: [
'child_process',
'cluster',
'dgram',
'dns',
'fs',
'module',
'net',
'readline',
'repl',
'tls',
].reduce((acc, name) => Object.assign({}, acc, { [name]: 'empty' }), {}),
},
module: {
rules: [
{
test: /\.vue$/,
exclude: /node_modules/,
use: [
{
loader: 'vue-loader',
options: {
loaders: {
js: [
{
loader: 'babel-loader',
options: {
presets: [resolve('@babel/preset-env')],
plugins: [
[
resolve('@vue/babel-plugin-jsx'),
{ mergeProps: false, enableObjectSlots: false },
],
resolve('@babel/plugin-proposal-object-rest-spread'),
],
},
},
],
},
},
},
],
},
{
test: /\.(js|jsx)$/,
loader: 'babel-loader',
exclude: /node_modules/,
options: babelConfig,
},
{
test: /\.tsx?$/,
use: [
{
loader: 'babel-loader',
options: babelConfig,
},
{
loader: 'ts-loader',
options: {
transpileOnly: true,
},
},
],
},
{
test: /\.css$/,
use: [
MiniCssExtractPlugin.loader,
{
loader: 'css-loader',
options: {
sourceMap: true,
},
},
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: ['autoprefixer'],
},
sourceMap: true,
},
},
],
},
// Images
{
test: svgRegex,
loader: 'url-loader',
options: svgOptions,
},
{
test: /\.(png|jpg|jpeg|gif)(\?v=\d+\.\d+\.\d+)?$/i,
loader: 'url-loader',
options: imageOptions,
},
],
},
plugins: [
// new BundleAnalyzerPlugin(),
new CaseSensitivePathsPlugin(),
new webpack.BannerPlugin(`
${pkg.name} v${pkg.version}
Copyright 2017-present, Ant Design Vue.
All rights reserved.
`),
new WebpackBar({
name: '🚚 Ant Design Vue Tools',
color: '#2f54eb',
}),
new CleanUpStatsPlugin(),
],
performance: {
hints: false,
},
};
if (process.env.RUN_ENV === 'PRODUCTION') {
let entry = ['./index'];
config.externals = [
{
vue: {
root: 'Vue',
commonjs2: 'vue',
commonjs: 'vue',
amd: 'vue',
module: 'vue',
},
},
];
if (esm) {
entry = ['./index.esm'];
config.experiments = {
...config.experiments,
outputModule: true,
};
config.output.chunkFormat = 'module';
config.output.library = {
type: 'module',
};
config.target = 'es2019';
} else {
config.output.libraryTarget = 'umd';
config.output.library = distFileBaseName;
config.output.globalObject = 'this';
}
const entryName = esm ? `${distFileBaseName}.esm` : distFileBaseName;
config.optimization = {
minimizer: [
new TerserPlugin({
parallel: true,
terserOptions: {
warnings: false,
},
}),
],
};
// Development
const uncompressedConfig = merge({}, config, {
entry: {
[entryName]: entry,
},
mode: 'development',
plugins: [
new MiniCssExtractPlugin({
filename: '[name].css',
}),
],
});
// Production
const prodConfig = merge({}, config, {
entry: {
[`${entryName}.min`]: entry,
},
mode: 'production',
plugins: [
new webpack.LoaderOptionsPlugin({
minimize: true,
}),
new MiniCssExtractPlugin({
filename: '[name].css',
}),
],
optimization: {
minimize: true,
minimizer: [new CssMinimizerPlugin({})],
},
});
return [prodConfig, uncompressedConfig];
}
return [config];
}
getWebpackConfig.webpack = webpack;
getWebpackConfig.svgRegex = svgRegex;
getWebpackConfig.svgOptions = svgOptions;
getWebpackConfig.imageOptions = imageOptions;
module.exports = getWebpackConfig;
================================================
FILE: antd-tools/gulpfile.js
================================================
/* eslint-disable no-console */
const { getProjectPath, getConfig } = require('./utils/projectHelper');
const runCmd = require('./runCmd');
const getBabelCommonConfig = require('./getBabelCommonConfig');
const merge2 = require('merge2');
const { execSync } = require('child_process');
const through2 = require('through2');
const webpack = require('webpack');
const babel = require('gulp-babel');
const argv = require('minimist')(process.argv.slice(2));
const { Octokit } = require('@octokit/rest');
// const getNpm = require('./getNpm')
// const selfPackage = require('../package.json')
const chalk = require('chalk');
const getNpmArgs = require('./utils/get-npm-args');
const getChangelog = require('./utils/getChangelog');
const path = require('path');
// const watch = require('gulp-watch')
const ts = require('gulp-typescript');
const gulp = require('gulp');
const fs = require('fs');
const rimraf = require('rimraf');
const stripCode = require('gulp-strip-code');
const compareVersions = require('compare-versions');
const getTSCommonConfig = require('./getTSCommonConfig');
const replaceLib = require('./replaceLib');
const sortApiTable = require('./sortApiTable');
const { glob } = require('glob');
const packageJson = require(getProjectPath('package.json'));
const tsDefaultReporter = ts.reporter.defaultReporter();
const cwd = process.cwd();
const libDir = getProjectPath('lib');
const esDir = getProjectPath('es');
const localeDir = getProjectPath('locale');
const tsConfig = getTSCommonConfig();
// FIXME: hard code, not find typescript can modify the path resolution
const localeDts = `import type { Locale } from '../lib/locale-provider';
declare const localeValues: Locale;
export default localeValues;`;
function dist(done) {
rimraf.sync(path.join(cwd, 'dist'));
process.env.RUN_ENV = 'PRODUCTION';
const webpackConfig = require(getProjectPath('webpack.build.conf.js'));
webpack(webpackConfig, (err, stats) => {
if (err) {
console.error(err.stack || err);
if (err.details) {
console.error(err.details);
}
return;
}
const info = stats.toJson();
const { dist: { finalize } = {}, bail } = getConfig();
if (stats.hasErrors()) {
(info.errors || []).forEach(error => {
console.error(error);
});
// https://github.com/ant-design/ant-design/pull/31662
if (bail) {
process.exit(1);
}
}
if (stats.hasWarnings()) {
console.warn(info.warnings);
}
const buildInfo = stats.toString({
colors: true,
children: true,
chunks: false,
modules: false,
chunkModules: false,
hash: false,
version: false,
});
console.log(buildInfo);
// Additional process of dist finalize
if (finalize) {
console.log('[Dist] Finalization...');
finalize();
}
done(0);
});
}
const tsFiles = ['**/*.ts', '**/*.tsx', '!node_modules/**/*.*', 'typings/**/*.d.ts'];
function compileTs(stream) {
return stream
.pipe(ts(tsConfig))
.js.pipe(
through2.obj(function (file, encoding, next) {
// console.log(file.path, file.base);
file.path = file.path.replace(/\.[jt]sx$/, '.js');
this.push(file);
next();
}),
)
.pipe(gulp.dest(process.cwd()));
}
gulp.task('tsc', () =>
compileTs(
gulp.src(tsFiles, {
base: cwd,
}),
),
);
gulp.task('clean', () => {
rimraf.sync(getProjectPath('_site'));
rimraf.sync(getProjectPath('_data'));
});
function babelify(js, modules) {
const babelConfig = getBabelCommonConfig(modules);
babelConfig.babelrc = false;
delete babelConfig.cacheDirectory;
if (modules === false) {
babelConfig.plugins.push(replaceLib);
}
const stream = js.pipe(babel(babelConfig)).pipe(
through2.obj(function z(file, encoding, next) {
this.push(file.clone());
if (modules !== false) {
const content = file.contents.toString(encoding);
file.contents = Buffer.from(
content
.replace(/lodash-es/g, 'lodash')
.replace(/@ant-design\/icons-vue/g, '@ant-design/icons-vue/lib/icons'),
);
this.push(file);
}
next();
}),
);
return stream.pipe(gulp.dest(modules === false ? esDir : libDir));
}
function compile(modules) {
const { compile: { transformTSFile, transformFile } = {} } = getConfig();
rimraf.sync(modules !== false ? libDir : esDir);
const assets = gulp
.src(['components/**/*.@(png|svg)'])
.pipe(gulp.dest(modules === false ? esDir : libDir));
let error = 0;
// =============================== FILE ===============================
let transformFileStream;
if (transformFile) {
transformFileStream = gulp
.src(['components/**/*.tsx'])
.pipe(
through2.obj(function (file, encoding, next) {
let nextFile = transformFile(file) || file;
nextFile = Array.isArray(nextFile) ? nextFile : [nextFile];
nextFile.forEach(f => this.push(f));
next();
}),
)
.pipe(gulp.dest(modules === false ? esDir : libDir));
}
// ================================ TS ================================
const source = [
'components/**/*.js',
'components/**/*.jsx',
'components/**/*.tsx',
'components/**/*.ts',
'typings/**/*.d.ts',
'!components/*/__tests__/*',
];
// Strip content if needed
let sourceStream = gulp.src(source);
if (modules === false) {
sourceStream = sourceStream.pipe(
stripCode({
start_comment: '@remove-on-es-build-begin',
end_comment: '@remove-on-es-build-end',
}),
);
}
if (transformTSFile) {
sourceStream = sourceStream.pipe(
through2.obj(function (file, encoding, next) {
let nextFile = transformTSFile(file) || file;
nextFile = Array.isArray(nextFile) ? nextFile : [nextFile];
nextFile.forEach(f => this.push(f));
next();
}),
);
}
const tsResult = sourceStream.pipe(
ts(tsConfig, {
error(e) {
tsDefaultReporter.error(e);
error = 1;
},
finish: tsDefaultReporter.finish,
}),
);
function check() {
if (error && !argv['ignore-error']) {
process.exit(1);
}
}
tsResult.on('finish', check);
tsResult.on('end', check);
const tsFilesStream = babelify(tsResult.js, modules);
const tsd = tsResult.dts.pipe(gulp.dest(modules === false ? esDir : libDir));
return merge2([tsFilesStream, tsd, assets, transformFileStream].filter(s => s));
}
function generateLocale() {
if (!fs.existsSync(localeDir)) {
fs.mkdirSync(localeDir);
}
const localeFiles = glob.sync('components/locale/*.ts?(x)');
localeFiles.forEach(item => {
const match = item.match(/components\/locale\/(.*)\.tsx?/);
if (match) {
const locale = match[1];
fs.writeFileSync(
path.join(localeDir, `${locale}.js`),
`module.exports = require('../lib/locale/${locale}');`,
);
fs.writeFileSync(path.join(localeDir, `${locale}.d.ts`), localeDts);
}
});
}
function tag() {
console.log('tagging');
const { version } = packageJson;
execSync(`git config --global user.email ${process.env.GITHUB_USER_EMAIL}`);
execSync(`git config --global user.name ${process.env.GITHUB_USER_NAME}`);
execSync(`git tag ${version}`);
execSync(
`git push https://${process.env.GITHUB_TOKEN}@github.com/vueComponent/ant-design-vue.git ${version}:${version}`,
);
execSync(
`git push https://${process.env.GITHUB_TOKEN}@github.com/vueComponent/ant-design-vue.git master:master`,
);
console.log('tagged');
}
function githubRelease(done) {
const changlogFiles = [
path.join(cwd, 'CHANGELOG.en-US.md'),
path.join(cwd, 'CHANGELOG.zh-CN.md'),
];
console.log('creating release on GitHub');
if (!process.env.GITHUB_TOKEN) {
console.log('no GitHub token found, skip');
return;
}
if (!changlogFiles.every(file => fs.existsSync(file))) {
console.log('no changelog found, skip');
return;
}
const github = new Octokit({
auth: process.env.GITHUB_TOKEN,
});
const date = new Date();
const { version } = packageJson;
const enChangelog = getChangelog(changlogFiles[0], version);
const cnChangelog = getChangelog(changlogFiles[1], version);
const changelog = [
`\`${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}\``,
enChangelog,
'\n',
'---',
'\n',
cnChangelog,
].join('\n');
const [_, owner, repo] = execSync('git remote get-url origin') // eslint-disable-line
.toString()
.match(/github.com[:/](.+)\/(.+)\.git/);
github.repos
.createRelease({
owner,
repo,
tag_name: version,
name: version,
body: changelog,
})
.then(() => {
done();
})
.catch(err => {
console.log(err);
});
}
gulp.task(
'tag',
gulp.series(done => {
tag();
githubRelease(done);
}),
);
gulp.task(
'check-git',
gulp.series(done => {
runCmd('git', ['status', '--porcelain'], (code, result) => {
if (/^\?\?/m.test(result)) {
return done(`There are untracked files in the working tree.\n${result}
`);
}
if (/^([ADRM]| [ADRM])/m.test(result)) {
return done(`There are uncommitted changes in the working tree.\n${result}
`);
}
return done();
});
}),
);
function publish(tagString, done) {
let args = ['publish', '--with-antd-tools'];
if (tagString) {
args = args.concat(['--tag', tagString]);
}
const publishNpm = process.env.PUBLISH_NPM_CLI || 'npm';
runCmd(publishNpm, args, code => {
tag();
githubRelease(() => {
done(code);
});
});
}
function pub(done) {
const notOk = !packageJson.version.match(/^\d+\.\d+\.\d+$/);
let tagString;
if (argv['npm-tag']) {
tagString = argv['npm-tag'];
}
if (!tagString && notOk) {
tagString = 'next';
}
if (packageJson.scripts['pre-publish']) {
runCmd('npm', ['run', 'pre-publish'], code2 => {
if (code2) {
done(code2);
return;
}
publish(tagString, done);
});
} else {
publish(tagString, done);
}
}
const startTime = new Date();
gulp.task('compile-with-es', done => {
console.log('start compile at ', startTime);
console.log('[Parallel] Compile to es...');
compile(false).on('finish', done);
});
gulp.task('compile-with-lib', done => {
console.log('[Parallel] Compile to js...');
compile().on('finish', () => {
generateLocale();
done();
});
});
gulp.task('compile-finalize', done => {
// Additional process of compile finalize
const { compile: { finalize } = {} } = getConfig();
if (finalize) {
console.log('[Compile] Finalization...');
finalize();
}
done();
});
gulp.task(
'compile',
gulp.series(gulp.parallel('compile-with-es', 'compile-with-lib'), 'compile-finalize', done => {
console.log('end compile at ', new Date());
console.log('compile time ', (new Date() - startTime) / 1000, 's');
done();
}),
);
gulp.task(
'dist',
gulp.series(done => {
dist(done);
}),
);
gulp.task(
'pub',
gulp.series('check-git', 'compile', 'dist', done => {
// if (!process.env.GITHUB_TOKEN) {
// console.log('no GitHub token found, skip');
// } else {
// pub(done);
// }
pub(done);
}),
);
gulp.task(
'pub-with-ci',
gulp.series(done => {
if (!process.env.NPM_TOKEN) {
console.log('no NPM token found, skip');
} else {
const github = new Octokit({
auth: process.env.GITHUB_TOKEN,
});
const [_, owner, repo] = execSync('git remote get-url origin') // eslint-disable-line
.toString()
.match(/github.com[:/](.+)\/(.+)\.git/);
const getLatestRelease = github.repos.getLatestRelease({
owner,
repo,
});
const listCommits = github.repos.listCommits({
owner,
repo,
per_page: 1,
});
Promise.all([getLatestRelease, listCommits]).then(([latestRelease, commits]) => {
const preVersion = latestRelease.data.tag_name;
const { version } = packageJson;
const [_, newVersion] = commits.data[0].commit.message.trim().match(/bump (.+)/) || []; // eslint-disable-line
if (
compareVersions(version, preVersion) === 1 &&
newVersion &&
newVersion.trim() === version
) {
// eslint-disable-next-line no-unused-vars
runCmd('npm', ['run', 'pub'], _code => {
done();
});
} else {
console.log('donot need publish' + version);
}
});
}
}),
);
gulp.task(
'guard',
gulp.series(done => {
function reportError() {
console.log(chalk.bgRed('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'));
console.log(chalk.bgRed('!! `npm publish` is forbidden for this package. !!'));
console.log(chalk.bgRed('!! Use `npm run pub` instead. !!'));
console.log(chalk.bgRed('!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'));
}
const npmArgs = getNpmArgs();
if (npmArgs) {
for (let arg = npmArgs.shift(); arg; arg = npmArgs.shift()) {
if (
/^pu(b(l(i(sh?)?)?)?)?$/.test(arg) &&
npmArgs.indexOf('--with-antd-tools') < 0 &&
!process.env.npm_config_with_antd_tools
) {
reportError();
done(1);
return;
}
}
}
done();
}),
);
gulp.task(
'sort-api-table',
gulp.series(done => {
sortApiTable();
done();
}),
);
================================================
FILE: antd-tools/replaceLib.js
================================================
'use strict';
const { dirname } = require('path');
const fs = require('fs');
const { getProjectPath } = require('./utils/projectHelper');
function replacePath(path) {
if (path.node.source && /\/lib\//.test(path.node.source.value)) {
const esModule = path.node.source.value.replace('/lib/', '/es/');
const esPath = dirname(getProjectPath('node_modules', esModule));
if (fs.existsSync(esPath)) {
path.node.source.value = esModule;
}
}
// @ant-design/icons-vue/xxx => @ant-design/icons-vue/es/icons/xxx
const antdIconMatcher = /@ant-design\/icons-vue\/([^/]*)$/;
if (path.node.source && antdIconMatcher.test(path.node.source.value)) {
const esModule = path.node.source.value.replace(
antdIconMatcher,
(_, iconName) => `@ant-design/icons-vue/es/icons/${iconName}`,
);
const esPath = dirname(getProjectPath('node_modules', esModule));
if (fs.existsSync(esPath)) {
path.node.source.value = esModule;
}
}
}
function replaceLib() {
return {
visitor: {
ImportDeclaration: replacePath,
ExportNamedDeclaration: replacePath,
},
};
}
module.exports = replaceLib;
================================================
FILE: antd-tools/runCmd.js
================================================
'use strict';
const isWindows = require('is-windows');
const getRunCmdEnv = require('./utils/getRunCmdEnv');
function runCmd(cmd, _args, fn) {
const args = _args || [];
if (isWindows()) {
args.unshift(cmd);
args.unshift('/c');
cmd = process.env.ComSpec;
}
const runner = require('child_process').spawn(cmd, args, {
// keep color
stdio: 'inherit',
env: getRunCmdEnv(),
});
runner.on('close', code => {
if (fn) {
fn(code);
}
});
}
module.exports = runCmd;
================================================
FILE: antd-tools/sortApiTable.js
================================================
const program = require('commander');
const majo = require('majo');
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
const unified = require('unified');
const parse = require('remark-parse');
const stringify = require('remark-stringify');
const yamlConfig = require('remark-yaml-config');
const frontmatter = require('remark-frontmatter');
let fileAPIs = {};
const remarkWithYaml = unified()
.use(parse)
.use(stringify, {
paddedTable: false,
listItemIndent: 1,
stringLength: () => 3,
})
.use(frontmatter)
.use(yamlConfig);
const stream = majo.majo();
function getCellValue(node) {
return node.children[0].children[0].value;
}
// from small to large
const sizeBreakPoints = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'];
const whiteMethodList = ['afterChange', 'beforeChange'];
const groups = {
isDynamic: val => /^on[A-Z]/.test(val) || whiteMethodList.indexOf(val) > -1,
isSize: val => sizeBreakPoints.indexOf(val) > -1,
};
function asciiSort(prev, next) {
if (prev > next) {
return 1;
}
if (prev < next) {
return -1;
}
return 0;
}
// follow the alphabet order
function alphabetSort(nodes) {
// use toLowerCase to keep `case insensitive`
return nodes.sort((...comparison) =>
asciiSort(...comparison.map(val => getCellValue(val).toLowerCase())),
);
}
function sizeSort(nodes) {
return nodes.sort((...comparison) =>
asciiSort(...comparison.map(val => sizeBreakPoints.indexOf(getCellValue(val).toLowerCase()))),
);
}
function sort(ast, filename) {
const nameMatch = filename.match(/^components\/([^/]*)\//);
const componentName = nameMatch[1];
fileAPIs[componentName] = fileAPIs[componentName] || {
static: new Set(),
size: new Set(),
dynamic: new Set(),
};
ast.children.forEach(child => {
const staticProps = [];
// prefix with `on`
const dynamicProps = [];
// one of ['xs', 'sm', 'md', 'lg', 'xl']
const sizeProps = [];
// find table markdown type
if (child.type === 'table') {
// slice will create new array, so sort can affect the original array.
// slice(1) cut down the thead
child.children.slice(1).forEach(node => {
const value = getCellValue(node);
if (groups.isDynamic(value)) {
dynamicProps.push(node);
fileAPIs[componentName].dynamic.add(value);
} else if (groups.isSize(value)) {
sizeProps.push(node);
fileAPIs[componentName].size.add(value);
} else {
staticProps.push(node);
fileAPIs[componentName].static.add(value);
}
});
// eslint-disable-next-line
child.children = [
child.children[0],
...alphabetSort(staticProps),
...sizeSort(sizeProps),
...alphabetSort(dynamicProps),
];
}
});
return ast;
}
function sortAPI(md, filename) {
return remarkWithYaml.stringify(sort(remarkWithYaml.parse(md), filename));
}
function sortMiddleware(ctx) {
Object.keys(ctx.files).forEach(filename => {
const content = ctx.fileContents(filename);
ctx.writeContents(filename, sortAPI(content, filename));
});
}
module.exports = () => {
fileAPIs = {};
program
.version('0.1.0')
.option(
'-f, --file [file]',
'Specify which file to be transformed',
// default value
'components/**/index.+(zh-CN|en-US).md',
)
.option('-o, --output [output]', 'Specify component api output path', '~component-api.json')
.parse(process.argv);
// Get the markdown file all need to be transformed
/* eslint-disable no-console */
stream
.source(program.file)
.use(sortMiddleware)
.dest('.')
.then(() => {
if (program.output) {
const data = {};
Object.keys(fileAPIs).forEach(componentName => {
data[componentName] = {
static: [...fileAPIs[componentName].static],
size: [...fileAPIs[componentName].size],
dynamic: [...fileAPIs[componentName].dynamic],
};
});
const reportPath = path.resolve(program.output);
fs.writeFileSync(reportPath, JSON.stringify(data, null, 2), 'utf8');
console.log(chalk.cyan(`API list file: ${reportPath}`));
}
})
.then(() => {
console.log(chalk.green(`sort ant-design-vue api successfully!`));
});
/* eslint-enable no-console */
};
================================================
FILE: antd-tools/utils/CleanUpStatsPlugin.js
================================================
// We should use `stats` props of webpack. But it not work in v4.
class CleanUpStatsPlugin {
constructor(option) {
this.option = {
MiniCSSExtractPlugin: true,
tsLoader: true,
...option,
};
}
shouldPickStatChild(child) {
const { MiniCSSExtractPlugin } = this.option;
if (MiniCSSExtractPlugin && child.name.includes('mini-css-extract-plugin')) return false;
return true;
}
shouldPickWarning(message) {
const { tsLoader } = this.option;
if (tsLoader && /export .* was not found in .*/.test(message)) {
return false;
}
return true;
}
apply(compiler) {
compiler.hooks.done.tap('CleanUpStatsPlugin', stats => {
const { children, warnings } = stats.compilation;
if (Array.isArray(children)) {
stats.compilation.children = children.filter(child => this.shouldPickStatChild(child));
}
if (Array.isArray(warnings)) {
stats.compilation.warnings = warnings.filter(message => this.shouldPickWarning(message));
}
});
}
}
module.exports = CleanUpStatsPlugin;
================================================
FILE: antd-tools/utils/get-npm-args.js
================================================
'use strict';
// NOTE: the following code was partially adopted from https://github.com/iarna/in-publish
module.exports = function getNpmArgs() {
// https://github.com/iarna/in-publish/pull/14
if (process.env.npm_command) {
return [process.env.npm_command];
}
let npmArgv = null;
try {
npmArgv = JSON.parse(process.env.npm_config_argv);
} catch (err) {
return null;
}
if (typeof npmArgv !== 'object' || !npmArgv.cooked || !Array.isArray(npmArgv.cooked)) {
return null;
}
return npmArgv.cooked;
};
================================================
FILE: antd-tools/utils/getChangelog.js
================================================
const fs = require('fs');
module.exports = function getChangelog(file, version) {
const lines = fs.readFileSync(file).toString().split('\n');
const changeLog = [];
const startPattern = new RegExp(`^## ${version}`);
const stopPattern = /^## /; // 前一个版本
const skipPattern = /^`/; // 日期
let begin = false;
for (let i = 0; i < lines.length; i += 1) {
const line = lines[i];
if (begin && stopPattern.test(line)) {
break;
}
if (begin && line && !skipPattern.test(line)) {
changeLog.push(line);
}
if (!begin) {
begin = startPattern.test(line);
}
}
return changeLog.join('\n');
};
================================================
FILE: antd-tools/utils/getRunCmdEnv.js
================================================
'use strict';
const path = require('path');
const isWindows = require('is-windows');
module.exports = function getRunCmdEnv() {
const env = {};
Object.keys(process.env).forEach(key => {
env[key] = process.env[key];
});
// make sure `antd-tools/node_modules/.bin` in the PATH env
const nodeModulesBinDir = path.join(__dirname, '../../node_modules/.bin');
Object.entries(env)
.filter(v => v.slice(0, 1).pop().toLowerCase() === 'path')
.forEach(v => {
const key = v.slice(0, 1).pop();
env[key] = env[key]
? `${nodeModulesBinDir}${isWindows() ? ';' : ':'}${env[key]}`
: nodeModulesBinDir;
});
return env;
};
================================================
FILE: antd-tools/utils/projectHelper.js
================================================
const fs = require('fs');
const path = require('path');
const cwd = process.cwd();
function getProjectPath(...filePath) {
return path.join(cwd, ...filePath);
}
function resolve(moduleName) {
return require.resolve(moduleName);
}
// We need hack the require to ensure use package module first
// For example, `typescript` is required by `gulp-typescript` but provided by `antd`
// we do not need for ant-design-vue
let injected = false;
function injectRequire() {
if (injected) return;
const Module = require('module');
const oriRequire = Module.prototype.require;
Module.prototype.require = function (...args) {
const moduleName = args[0];
try {
return oriRequire.apply(this, args);
} catch (err) {
const newArgs = [...args];
if (moduleName[0] !== '/') {
newArgs[0] = getProjectPath('node_modules', moduleName);
}
return oriRequire.apply(this, newArgs);
}
};
injected = true;
}
function getConfig() {
const configPath = getProjectPath('.antd-tools.config.js');
if (fs.existsSync(configPath)) {
return require(configPath);
}
return {};
}
/**
* 是否存在可用的browserslist config
* https://github.com/browserslist/browserslist#queries
* @returns
*/
function isThereHaveBrowserslistConfig() {
try {
const packageJson = require(getProjectPath('package.json'));
if (packageJson.browserslist) {
return true;
}
} catch (e) {
//
}
if (fs.existsSync(getProjectPath('.browserslistrc'))) {
return true;
}
if (fs.existsSync(getProjectPath('browserslist'))) {
return true;
}
// parent项目的配置支持,需要再补充
// ROWSERSLIST ROWSERSLIST_ENV 变量的形式,需要再补充。
return false;
}
module.exports = {
getProjectPath,
resolve,
injectRequire,
getConfig,
isThereHaveBrowserslistConfig,
};
================================================
FILE: babel.config.js
================================================
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',
],
},
},
};
================================================
FILE: build.sh
================================================
#!/usr/bin/env bash
rm -rf dist
mkdir dist
./node_modules/.bin/webpack --config webpack.site.config.js
cp dist/index.html index.html
================================================
FILE: components/__tests__/util/domHook.js
================================================
const __NULL__ = { notExist: true };
export function spyElementPrototypes(Element, properties) {
const propNames = Object.keys(properties);
const originDescriptors = {};
propNames.forEach(propName => {
const originDescriptor = Object.getOwnPropertyDescriptor(Element.prototype, propName);
originDescriptors[propName] = originDescriptor || __NULL__;
const spyProp = properties[propName];
if (typeof spyProp === 'function') {
// If is a function
Element.prototype[propName] = function spyFunc(...args) {
return spyProp.call(this, originDescriptor, ...args);
};
} else {
// Otherwise tread as a property
Object.defineProperty(Element.prototype, propName, {
...spyProp,
set(value) {
if (spyProp.set) {
return spyProp.set.call(this, originDescriptor, value);
}
return originDescriptor.set(value);
},
get() {
if (spyProp.get) {
return spyProp.get.call(this, originDescriptor);
}
return originDescriptor.get();
},
});
}
});
return {
mockRestore() {
propNames.forEach(propName => {
const originDescriptor = originDescriptors[propName];
if (originDescriptor === __NULL__) {
delete Element.prototype[propName];
} else if (typeof originDescriptor === 'function') {
Element.prototype[propName] = originDescriptor;
} else {
Object.defineProperty(Element.prototype, propName, originDescriptor);
}
});
},
};
}
export function spyElementPrototype(Element, propName, property) {
return spyElementPrototypes(Element, {
[propName]: property,
});
}
================================================
FILE: components/_util/ActionButton.tsx
================================================
import type { ExtractPropTypes, PropType } from 'vue';
import { shallowRef, onMounted, defineComponent, onBeforeUnmount } from 'vue';
import Button from '../button';
import type { ButtonProps } from '../button';
import type { LegacyButtonType } from '../button/buttonTypes';
import { convertLegacyProps } from '../button/buttonTypes';
import useDestroyed from './hooks/useDestroyed';
import { objectType } from './type';
import { findDOMNode } from './props-util';
const actionButtonProps = {
type: {
type: String as PropType<LegacyButtonType>,
},
actionFn: Function as PropType<(...args: any[]) => any | PromiseLike<any>>,
close: Function,
autofocus: Boolean,
prefixCls: String,
buttonProps: objectType<ButtonProps>(),
emitEvent: Boolean,
quitOnNullishReturnValue: Boolean,
};
export type ActionButtonProps = ExtractPropTypes<typeof actionButtonProps>;
function isThenable<T>(thing?: PromiseLike<T>): boolean {
return !!(thing && thing.then);
}
export default defineComponent({
compatConfig: { MODE: 3 },
name: 'ActionButton',
props: actionButtonProps,
setup(props, { slots }) {
const clickedRef = shallowRef<boolean>(false);
const buttonRef = shallowRef();
const loading = shallowRef(false);
let timeoutId: any;
const isDestroyed = useDestroyed();
onMounted(() => {
if (props.autofocus) {
timeoutId = setTimeout(() => findDOMNode(buttonRef.value)?.focus?.());
}
});
onBeforeUnmount(() => {
clearTimeout(timeoutId);
});
const onInternalClose = (...args: any[]) => {
props.close?.(...args);
};
const handlePromiseOnOk = (returnValueOfOnOk?: PromiseLike<any>) => {
if (!isThenable(returnValueOfOnOk)) {
return;
}
loading.value = true;
returnValueOfOnOk!.then(
(...args: any[]) => {
if (!isDestroyed.value) {
loading.value = false;
}
onInternalClose(...args);
clickedRef.value = false;
},
(e: Error) => {
// See: https://github.com/ant-design/ant-design/issues/6183
if (!isDestroyed.value) {
loading.value = false;
}
clickedRef.value = false;
return Promise.reject(e);
},
);
};
const onClick = (e: MouseEvent) => {
const { actionFn } = props;
if (clickedRef.value) {
return;
}
clickedRef.value = true;
if (!actionFn) {
onInternalClose();
return;
}
let returnValueOfOnOk: PromiseLike<any>;
if (props.emitEvent) {
returnValueOfOnOk = actionFn(e);
if (props.quitOnNullishReturnValue && !isThenable(returnValueOfOnOk)) {
clickedRef.value = false;
onInternalClose(e);
return;
}
} else if (actionFn.length) {
returnValueOfOnOk = actionFn(props.close);
// https://github.com/ant-design/ant-design/issues/23358
clickedRef.value = false;
} else {
returnValueOfOnOk = actionFn();
if (!returnValueOfOnOk) {
onInternalClose();
return;
}
}
handlePromiseOnOk(returnValueOfOnOk);
};
return () => {
const { type, prefixCls, buttonProps } = props;
return (
<Button
{...convertLegacyProps(type)}
onClick={onClick}
loading={loading.value}
prefixCls={prefixCls}
{...buttonProps}
ref={buttonRef}
v-slots={slots}
></Button>
);
};
},
});
================================================
FILE: components/_util/BaseInput.tsx
================================================
import type { PropType } from 'vue';
import { computed, defineComponent, shallowRef, ref, watch } from 'vue';
import PropTypes from './vue-types';
import type { BaseInputInnerExpose } from './BaseInputInner';
import BaseInputInner from './BaseInputInner';
import { styleObjectToString } from '../vc-util/Dom/css';
export interface BaseInputExpose {
focus: () => void;
blur: () => void;
input: HTMLInputElement | HTMLTextAreaElement | null;
setSelectionRange: (
start: number,
end: number,
direction?: 'forward' | 'backward' | 'none',
) => void;
select: () => void;
getSelectionStart: () => number | null;
getSelectionEnd: () => number | null;
getScrollTop: () => number | null;
setScrollTop: (scrollTop: number) => void;
}
const BaseInput = defineComponent({
compatConfig: { MODE: 3 },
inheritAttrs: false,
props: {
disabled: PropTypes.looseBool,
type: PropTypes.string,
value: PropTypes.any,
lazy: PropTypes.bool.def(true),
tag: {
type: String as PropType<'input' | 'textarea'>,
default: 'input',
},
size: PropTypes.string,
style: PropTypes.oneOfType([String, Object]),
class: PropTypes.string,
},
emits: [
'change',
'input',
'blur',
'keydown',
'focus',
'compositionstart',
'compositionend',
'keyup',
'paste',
'mousedown',
],
setup(props, { emit, attrs, expose }) {
const inputRef = shallowRef<BaseInputInnerExpose>(null);
const renderValue = ref();
const isComposing = ref(false);
watch(
[() => props.value, isComposing],
() => {
if (isComposing.value) return;
renderValue.value = props.value;
},
{ immediate: true },
);
const handleChange = (e: Event) => {
emit('change', e);
};
const onCompositionstart = (e: CompositionEvent) => {
isComposing.value = true;
(e.target as any).composing = true;
emit('compositionstart', e);
};
const onCompositionend = (e: CompositionEvent) => {
isComposing.value = false;
(e.target as any).composing = false;
emit('compositionend', e);
const event = document.createEvent('HTMLEvents');
event.initEvent('input', true, true);
e.target.dispatchEvent(event);
handleChange(e);
};
const handleInput = (e: Event) => {
if (isComposing.value && props.lazy) {
renderValue.value = (e.target as HTMLInputElement).value;
return;
}
emit('input', e);
};
const handleBlur = (e: Event) => {
emit('blur', e);
};
const handleFocus = (e: Event) => {
emit('focus', e);
};
const focus = () => {
if (inputRef.value) {
inputRef.value.focus();
}
};
const blur = () => {
if (inputRef.value) {
inputRef.value.blur();
}
};
const handleKeyDown = (e: KeyboardEvent) => {
emit('keydown', e);
};
const handleKeyUp = (e: KeyboardEvent) => {
emit('keyup', e);
};
const setSelectionRange = (
start: number,
end: number,
direction?: 'forward' | 'backward' | 'none',
) => {
inputRef.value?.setSelectionRange(start, end, direction);
};
const select = () => {
inputRef.value?.select();
};
expose({
focus,
blur,
input: computed(() => inputRef.value?.input),
setSelectionRange,
select,
getSelectionStart: () => inputRef.value?.getSelectionStart(),
getSelectionEnd: () => inputRef.value?.getSelectionEnd(),
getScrollTop: () => inputRef.value?.getScrollTop(),
});
const handleMousedown = (e: MouseEvent) => {
emit('mousedown', e);
};
const handlePaste = (e: ClipboardEvent) => {
emit('paste', e);
};
const styleString = computed(() => {
return props.style && typeof props.style !== 'string'
? styleObjectToString(props.style)
: props.style;
});
return () => {
const { style, lazy, ...restProps } = props;
return (
<BaseInputInner
{...restProps}
{...attrs}
style={styleString.value}
onInput={handleInput}
onChange={handleChange}
onBlur={handleBlur}
onFocus={handleFocus}
ref={inputRef}
value={renderValue.value}
onCompositionstart={onCompositionstart}
onCompositionend={onCompositionend}
onKeyup={handleKeyUp}
onKeydown={handleKeyDown}
onPaste={handlePaste}
onMousedown={handleMousedown}
/>
);
};
},
});
export default BaseInput;
================================================
FILE: components/_util/BaseInputInner.tsx
================================================
import type { PropType } from 'vue';
import { defineComponent, shallowRef } from 'vue';
import PropTypes from './vue-types';
export interface BaseInputInnerExpose {
focus: () => void;
blur: () => void;
input: HTMLInputElement | HTMLTextAreaElement | null;
setSelectionRange: (
start: number,
end: number,
direction?: 'forward' | 'backward' | 'none',
) => void;
select: () => void;
getSelectionStart: () => number | null;
getSelectionEnd: () => number | null;
getScrollTop: () => number | null;
setScrollTop: (scrollTop: number) => void;
}
const BaseInputInner = defineComponent({
compatConfig: { MODE: 3 },
// inheritAttrs: false,
props: {
disabled: PropTypes.looseBool,
type: PropTypes.string,
value: PropTypes.any,
tag: {
type: String as PropType<'input' | 'textarea'>,
default: 'input',
},
size: PropTypes.string,
onChange: Function as PropType<(e: Event) => void>,
onInput: Function as PropType<(e: Event) => void>,
onBlur: Function as PropType<(e: Event) => void>,
onFocus: Function as PropType<(e: Event) => void>,
onKeydown: Function as PropType<(e: Event) => void>,
onCompositionstart: Function as PropType<(e: Event) => void>,
onCompositionend: Function as PropType<(e: Event) => void>,
onKeyup: Function as PropType<(e: Event) => void>,
onPaste: Function as PropType<(e: Event) => void>,
onMousedown: Function as PropType<(e: Event) => void>,
},
emits: [
'change',
'input',
'blur',
'keydown',
'focus',
'compositionstart',
'compositionend',
'keyup',
'paste',
'mousedown',
],
setup(props, { expose }) {
const inputRef = shallowRef(null);
const focus = () => {
if (inputRef.value) {
inputRef.value.focus();
}
};
const blur = () => {
if (inputRef.value) {
inputRef.value.blur();
}
};
const setSelectionRange = (
start: number,
end: number,
direction?: 'forward' | 'backward' | 'none',
) => {
inputRef.value?.setSelectionRange(start, end, direction);
};
const select = () => {
inputRef.value?.select();
};
expose({
focus,
blur,
input: inputRef,
setSelectionRange,
select,
getSelectionStart: () => inputRef.value?.selectionStart,
getSelectionEnd: () => inputRef.value?.selectionEnd,
getScrollTop: () => inputRef.value?.scrollTop,
});
return () => {
const { tag: Tag, value, ...restProps } = props;
return <Tag {...restProps} ref={inputRef} value={value} />;
};
},
});
export default BaseInputInner;
================================================
FILE: components/_util/BaseMixin.ts
================================================
import { nextTick } from 'vue';
import { getOptionProps } from './props-util';
export default {
methods: {
setState(state = {}, callback: () => any) {
let newState = typeof state === 'function' ? state(this.$data, this.$props) : state;
if (this.getDerivedStateFromProps) {
const s = this.getDerivedStateFromProps(getOptionProps(this), {
...this.$data,
...newState,
});
if (s === null) {
return;
} else {
newState = { ...newState, ...(s || {}) };
}
}
Object.assign(this.$data, newState);
if (this._.isMounted) {
this.$forceUpdate();
}
nextTick(() => {
callback && callback();
});
},
__emit() {
// 直接调用事件,底层组件不需要vueTool记录events
// eslint-disable-next-line prefer-rest-params
const args = [].slice.call(arguments, 0);
let eventName = args[0];
eventName = `on${eventName[0].toUpperCase()}${eventName.substring(1)}`;
const event = this.$props[eventName] || this.$attrs[eventName];
if (args.length && event) {
if (Array.isArray(event)) {
for (let i = 0, l = event.length; i < l; i++) {
event[i](...args.slice(1));
}
} else {
event(...args.slice(1));
}
}
},
},
};
================================================
FILE: components/_util/EventInterface.ts
================================================
export type FocusEventHandler = (e: FocusEvent) => void;
export type MouseEventHandler = (e: MouseEvent) => void;
export type KeyboardEventHandler = (e: KeyboardEvent) => void;
export type CompositionEventHandler = (e: CompositionEvent) => void;
export type ClipboardEventHandler = (e: ClipboardEvent) => void;
export type ChangeEventHandler = (e: ChangeEvent) => void;
export type WheelEventHandler = (e: WheelEvent) => void;
export type ChangeEvent = Event & {
target: {
value?: string | undefined;
};
};
export type CheckboxChangeEvent = Event & {
target: {
checked?: boolean;
};
};
export type EventHandler = (...args: any[]) => void;
================================================
FILE: components/_util/KeyCode.ts
================================================
/**
* @ignore
* some key-codes definition and utils from closure-library
* @author yiminghe@gmail.com
*/
const KeyCode = {
/**
* MAC_ENTER
*/
MAC_ENTER: 3,
/**
* BACKSPACE
*/
BACKSPACE: 8,
/**
* TAB
*/
TAB: 9,
/**
* NUMLOCK on FF/Safari Mac
*/
NUM_CENTER: 12, // NUMLOCK on FF/Safari Mac
/**
* ENTER
*/
ENTER: 13,
/**
* SHIFT
*/
SHIFT: 16,
/**
* CTRL
*/
CTRL: 17,
/**
* ALT
*/
ALT: 18,
/**
* PAUSE
*/
PAUSE: 19,
/**
* CAPS_LOCK
*/
CAPS_LOCK: 20,
/**
* ESC
*/
ESC: 27,
/**
* SPACE
*/
SPACE: 32,
/**
* PAGE_UP
*/
PAGE_UP: 33, // also NUM_NORTH_EAST
/**
* PAGE_DOWN
*/
PAGE_DOWN: 34, // also NUM_SOUTH_EAST
/**
* END
*/
END: 35, // also NUM_SOUTH_WEST
/**
* HOME
*/
HOME: 36, // also NUM_NORTH_WEST
/**
* LEFT
*/
LEFT: 37, // also NUM_WEST
/**
* UP
*/
UP: 38, // also NUM_NORTH
/**
* RIGHT
*/
RIGHT: 39, // also NUM_EAST
/**
* DOWN
*/
DOWN: 40, // also NUM_SOUTH
/**
* PRINT_SCREEN
*/
PRINT_SCREEN: 44,
/**
* INSERT
*/
INSERT: 45, // also NUM_INSERT
/**
* DELETE
*/
DELETE: 46, // also NUM_DELETE
/**
* ZERO
*/
ZERO: 48,
/**
* ONE
*/
ONE: 49,
/**
* TWO
*/
TWO: 50,
/**
* THREE
*/
THREE: 51,
/**
* FOUR
*/
FOUR: 52,
/**
* FIVE
*/
FIVE: 53,
/**
* SIX
*/
SIX: 54,
/**
* SEVEN
*/
SEVEN: 55,
/**
* EIGHT
*/
EIGHT: 56,
/**
* NINE
*/
NINE: 57,
/**
* QUESTION_MARK
*/
QUESTION_MARK: 63, // needs localization
/**
* A
*/
A: 65,
/**
* B
*/
B: 66,
/**
* C
*/
C: 67,
/**
* D
*/
D: 68,
/**
* E
*/
E: 69,
/**
* F
*/
F: 70,
/**
* G
*/
G: 71,
/**
* H
*/
H: 72,
/**
* I
*/
I: 73,
/**
* J
*/
J: 74,
/**
* K
*/
K: 75,
/**
* L
*/
L: 76,
/**
* M
*/
M: 77,
/**
* N
*/
N: 78,
/**
* O
*/
O: 79,
/**
* P
*/
P: 80,
/**
* Q
*/
Q: 81,
/**
* R
*/
R: 82,
/**
* S
*/
S: 83,
/**
* T
*/
T: 84,
/**
* U
*/
U: 85,
/**
* V
*/
V: 86,
/**
* W
*/
W: 87,
/**
* X
*/
X: 88,
/**
* Y
*/
Y: 89,
/**
* Z
*/
Z: 90,
/**
* META
*/
META: 91, // WIN_KEY_LEFT
/**
* WIN_KEY_RIGHT
*/
WIN_KEY_RIGHT: 92,
/**
* CONTEXT_MENU
*/
CONTEXT_MENU: 93,
/**
* NUM_ZERO
*/
NUM_ZERO: 96,
/**
* NUM_ONE
*/
NUM_ONE: 97,
/**
* NUM_TWO
*/
NUM_TWO: 98,
/**
* NUM_THREE
*/
NUM_THREE: 99,
/**
* NUM_FOUR
*/
NUM_FOUR: 100,
/**
* NUM_FIVE
*/
NUM_FIVE: 101,
/**
* NUM_SIX
*/
NUM_SIX: 102,
/**
* NUM_SEVEN
*/
NUM_SEVEN: 103,
/**
* NUM_EIGHT
*/
NUM_EIGHT: 104,
/**
* NUM_NINE
*/
NUM_NINE: 105,
/**
* NUM_MULTIPLY
*/
NUM_MULTIPLY: 106,
/**
* NUM_PLUS
*/
NUM_PLUS: 107,
/**
* NUM_MINUS
*/
NUM_MINUS: 109,
/**
* NUM_PERIOD
*/
NUM_PERIOD: 110,
/**
* NUM_DIVISION
*/
NUM_DIVISION: 111,
/**
* F1
*/
F1: 112,
/**
* F2
*/
F2: 113,
/**
* F3
*/
F3: 114,
/**
* F4
*/
F4: 115,
/**
* F5
*/
F5: 116,
/**
* F6
*/
F6: 117,
/**
* F7
*/
F7: 118,
/**
* F8
*/
F8: 119,
/**
* F9
*/
F9: 120,
/**
* F10
*/
F10: 121,
/**
* F11
*/
F11: 122,
/**
* F12
*/
F12: 123,
/**
* NUMLOCK
*/
NUMLOCK: 144,
/**
* SEMICOLON
*/
SEMICOLON: 186, // needs localization
/**
* DASH
*/
DASH: 189, // needs localization
/**
* EQUALS
*/
EQUALS: 187, // needs localization
/**
* COMMA
*/
COMMA: 188, // needs localization
/**
* PERIOD
*/
PERIOD: 190, // needs localization
/**
* SLASH
*/
SLASH: 191, // needs localization
/**
* APOSTROPHE
*/
APOSTROPHE: 192, // needs localization
/**
* SINGLE_QUOTE
*/
SINGLE_QUOTE: 222, // needs localization
/**
* OPEN_SQUARE_BRACKET
*/
OPEN_SQUARE_BRACKET: 219, // needs localization
/**
* BACKSLASH
*/
BACKSLASH: 220, // needs localization
/**
* CLOSE_SQUARE_BRACKET
*/
CLOSE_SQUARE_BRACKET: 221, // needs localization
/**
* WIN_KEY
*/
WIN_KEY: 224,
/**
* MAC_FF_META
*/
MAC_FF_META: 224, // Firefox (Gecko) fires this for the meta key instead of 91
/**
* WIN_IME
*/
WIN_IME: 229,
// ======================== Function ========================
/**
* whether text and modified key is entered at the same time.
*/
isTextModifyingKeyEvent: function isTextModifyingKeyEvent(e: KeyboardEvent) {
const { keyCode } = e;
if (
(e.altKey && !e.ctrlKey) ||
e.metaKey ||
// Function keys don't generate text
(keyCode >= KeyCode.F1 && keyCode <= KeyCode.F12)
) {
return false;
}
// The following keys are quite harmless, even in combination with
// CTRL, ALT or SHIFT.
switch (keyCode) {
case KeyCode.ALT:
case KeyCode.CAPS_LOCK:
case KeyCode.CONTEXT_MENU:
case KeyCode.CTRL:
case KeyCode.DOWN:
case KeyCode.END:
case KeyCode.ESC:
case KeyCode.HOME:
case KeyCode.INSERT:
case KeyCode.LEFT:
case KeyCode.MAC_FF_META:
case KeyCode.META:
case KeyCode.NUMLOCK:
case KeyCode.NUM_CENTER:
case KeyCode.PAGE_DOWN:
case KeyCode.PAGE_UP:
case KeyCode.PAUSE:
case KeyCode.PRINT_SCREEN:
case KeyCode.RIGHT:
case KeyCode.SHIFT:
case KeyCode.UP:
case KeyCode.WIN_KEY:
case KeyCode.WIN_KEY_RIGHT:
return false;
default:
return true;
}
},
/**
* whether character is entered.
*/
isCharacterKey: function isCharacterKey(keyCode: number) {
if (keyCode >= KeyCode.ZERO && keyCode <= KeyCode.NINE) {
return true;
}
if (keyCode >= KeyCode.NUM_ZERO && keyCode <= KeyCode.NUM_MULTIPLY) {
return true;
}
if (keyCode >= KeyCode.A && keyCode <= KeyCode.Z) {
return true;
}
// Safari sends zero key code for non-latin characters.
if (window.navigator.userAgent.indexOf('WebKit') !== -1 && keyCode === 0) {
return true;
}
switch (keyCode) {
case KeyCode.SPACE:
case KeyCode.QUESTION_MARK:
case KeyCode.NUM_PLUS:
case KeyCode.NUM_MINUS:
case KeyCode.NUM_PERIOD:
case KeyCode.NUM_DIVISION:
case KeyCode.SEMICOLON:
case KeyCode.DASH:
case KeyCode.EQUALS:
case KeyCode.COMMA:
case KeyCode.PERIOD:
case KeyCode.SLASH:
case KeyCode.APOSTROPHE:
case KeyCode.SINGLE_QUOTE:
case KeyCode.OPEN_SQUARE_BRACKET:
case KeyCode.BACKSLASH:
case KeyCode.CLOSE_SQUARE_BRACKET:
return true;
default:
return false;
}
},
};
export default KeyCode;
================================================
FILE: components/_util/Portal.tsx
================================================
import PropTypes from './vue-types';
import {
defineComponent,
nextTick,
onBeforeMount,
onMounted,
onUpdated,
Teleport,
watch,
} from 'vue';
import { useInjectPortal } from '../vc-trigger/context';
export default defineComponent({
compatConfig: { MODE: 3 },
name: 'Portal',
inheritAttrs: false,
props: {
getContainer: PropTypes.func.isRequired,
didUpdate: Function,
},
setup(props, { slots }) {
let isSSR = true;
// getContainer 不会改变,不用响应式
let container: HTMLElement;
const { shouldRender } = useInjectPortal();
function setContainer() {
if (shouldRender.value) {
container = props.getContainer();
}
}
onBeforeMount(() => {
isSSR = false;
// drawer
setContainer();
});
onMounted(() => {
if (container) return;
// https://github.com/vueComponent/ant-design-vue/issues/6937
setContainer();
});
const stopWatch = watch(shouldRender, () => {
if (shouldRender.value && !container) {
container = props.getContainer();
}
if (container) {
stopWatch();
}
});
onUpdated(() => {
nextTick(() => {
if (shouldRender.value) {
props.didUpdate?.(props);
}
});
});
// onBeforeUnmount(() => {
// if (container && container.parentNode) {
// container.parentNode.removeChild(container);
// }
// });
return () => {
if (!shouldRender.value) return null;
if (isSSR) {
return slots.default?.();
}
return container ? <Teleport to={container} v-slots={slots}></Teleport> : null;
};
},
});
================================================
FILE: components/_util/PortalWrapper.tsx
================================================
import PropTypes from './vue-types';
import Portal from './Portal';
import {
defineComponent,
shallowRef,
watch,
onMounted,
onBeforeUnmount,
onUpdated,
nextTick,
computed,
} from 'vue';
import canUseDom from './canUseDom';
import raf from './raf';
import { booleanType } from './type';
import useScrollLocker from './hooks/useScrollLocker';
let openCount = 0;
const supportDom = canUseDom();
/** @private Test usage only */
export function getOpenCount() {
return process.env.NODE_ENV === 'test' ? openCount : 0;
}
const getParent = (getContainer: GetContainer) => {
if (!supportDom) {
return null;
}
if (getContainer) {
if (typeof getContainer === 'string') {
return document.querySelectorAll(getContainer)[0] as HTMLElement;
}
if (typeof getContainer === 'function') {
return getContainer();
}
if (typeof getContainer === 'object' && getContainer instanceof window.HTMLElement) {
return getContainer;
}
}
return document.body;
};
export type GetContainer = string | HTMLElement | (() => HTMLElement);
export default defineComponent({
compatConfig: { MODE: 3 },
name: 'PortalWrapper',
inheritAttrs: false,
props: {
wrapperClassName: String,
forceRender: { type: Boolean, default: undefined },
getContainer: PropTypes.any,
visible: { type: Boolean, default: undefined },
autoLock: booleanType(),
didUpdate: Function,
},
setup(props, { slots }) {
const container = shallowRef<HTMLElement>();
const componentRef = shallowRef();
const rafId = shallowRef<number>();
const triggerUpdate = shallowRef(1);
const defaultContainer = canUseDom() && document.createElement('div');
const removeCurrentContainer = () => {
// Portal will remove from `parentNode`.
// Let's handle this again to avoid refactor issue.
if (container.value === defaultContainer) {
container.value?.parentNode?.removeChild(container.value);
}
container.value = null;
};
let parent: HTMLElement = null;
const attachToParent = (force = false) => {
if (force || (container.value && !container.value.parentNode)) {
parent = getParent(props.getContainer);
if (parent) {
parent.appendChild(container.value);
return true;
}
return false;
}
return true;
};
const getContainer = () => {
if (!supportDom) {
return null;
}
if (!container.value) {
container.value = defaultContainer;
attachToParent(true);
}
setWrapperClassName();
return container.value;
};
const setWrapperClassName = () => {
const { wrapperClassName } = props;
if (container.value && wrapperClassName && wrapperClassName !== container.value.className) {
container.value.className = wrapperClassName;
}
};
onUpdated(() => {
setWrapperClassName();
attachToParent();
});
useScrollLocker(
computed(() => {
return (
props.autoLock &&
props.visible &&
canUseDom() &&
(container.value === document.body || container.value === defaultContainer)
);
}),
);
onMounted(() => {
let init = false;
watch(
[() => props.visible, () => props.getContainer],
([visible, getContainer], [prevVisible, prevGetContainer]) => {
// Update count
if (supportDom) {
parent = getParent(props.getContainer);
if (parent === document.body) {
if (visible && !prevVisible) {
openCount += 1;
} else if (init) {
openCount -= 1;
}
}
}
if (init) {
// Clean up container if needed
const getContainerIsFunc =
typeof getContainer === 'function' && typeof prevGetContainer === 'function';
if (
getContainerIsFunc
? getContainer.toString() !== prevGetContainer.toString()
: getContainer !== prevGetContainer
) {
removeCurrentContainer();
}
}
init = true;
},
{ immediate: true, flush: 'post' },
);
nextTick(() => {
if (!attachToParent()) {
rafId.value = raf(() => {
triggerUpdate.value += 1;
});
}
});
});
onBeforeUnmount(() => {
const { visible } = props;
if (supportDom && parent === document.body) {
// 离开时不会 render, 导到离开时数值不变,改用 func 。。
openCount = visible && openCount ? openCount - 1 : openCount;
}
removeCurrentContainer();
raf.cancel(rafId.value);
});
return () => {
const { forceRender, visible } = props;
let portal = null;
const childProps = {
getOpenCount: () => openCount,
getContainer,
};
if (triggerUpdate.value && (forceRender || visible || componentRef.value)) {
portal = (
<Portal
getContainer={getContainer}
ref={componentRef}
didUpdate={props.didUpdate}
v-slots={{ default: () => slots.default?.(childProps) }}
></Portal>
);
}
return portal;
};
},
});
================================================
FILE: components/_util/__mocks__/Portal.tsx
================================================
import { defineComponent } from 'vue';
export default defineComponent({
compatConfig: { MODE: 3 },
name: 'Portal',
inheritAttrs: false,
props: ['getContainer'],
setup(_props, { slots }) {
return () => {
return slots.default?.();
};
},
});
================================================
FILE: components/_util/__mocks__/RenderSlot.tsx
================================================
import { defineComponent } from 'vue';
import { customRenderSlot } from '../vnode';
export default defineComponent({
name: 'RenderSlot',
setup(_props, { slots }) {
return () => {
return customRenderSlot(slots, 'default', {}, () => ['default value']);
};
},
});
================================================
FILE: components/_util/__tests__/easings.test.js
================================================
import { easeInOutCubic } from '../easings';
describe('Test easings', () => {
it('easeInOutCubic return value', () => {
const nums = [];
// eslint-disable-next-line no-plusplus
for (let index = 0; index < 5; index++) {
nums.push(easeInOutCubic(index, 1, 5, 4));
}
expect(nums).toEqual([1, 1.25, 3, 4.75, 5]);
});
});
================================================
FILE: components/_util/__tests__/scrollTo.test.js
================================================
import scrollTo from '../scrollTo';
describe('Test ScrollTo function', () => {
let dateNowMock;
beforeAll(() => {
jest.useFakeTimers();
});
afterAll(() => {
jest.useRealTimers();
});
beforeEach(() => {
dateNowMock = jest
.spyOn(Date, 'now')
.mockImplementationOnce(() => 0)
.mockImplementationOnce(() => 1000);
});
afterEach(() => {
dateNowMock.mockRestore();
});
it('test scrollTo', async () => {
const scrollToSpy = jest.spyOn(window, 'scrollTo').mockImplementation((x, y) => {
window.scrollY = y;
window.pageYOffset = y;
});
scrollTo(1000);
jest.runAllTimers();
expect(window.pageYOffset).toBe(1000);
scrollToSpy.mockRestore();
});
it('test callback - option', async () => {
const cbMock = jest.fn();
scrollTo(1000, {
callback: cbMock,
});
jest.runAllTimers();
expect(cbMock).toHaveBeenCalledTimes(1);
});
it('test getContainer - option', async () => {
const div = document.createElement('div');
scrollTo(1000, {
getContainer: () => div,
});
jest.runAllTimers();
expect(div.scrollTop).toBe(1000);
});
});
================================================
FILE: components/_util/__tests__/unreachableException.test.js
================================================
import UnreachableException from '../unreachableException';
describe('UnreachableException', () => {
it('error thrown matches snapshot', () => {
const exception = new UnreachableException('some value');
expect(exception.error.message).toMatchInlineSnapshot(`"unreachable case: \\"some value\\""`);
});
});
================================================
FILE: components/_util/__tests__/vNode.test.js
================================================
import RenderSlot from '../__mocks__/RenderSlot';
import { mount } from '@vue/test-utils';
import { nextTick } from 'vue';
describe('render slot content', () => {
it('renders slot content', () => {
const wrapper = mount(RenderSlot, {
slots: {
default: () => 'This is slot content',
},
});
expect(wrapper.html()).toContain('This is slot content');
});
it('render default value when slot is fragment', async () => {
const wrapper = mount(RenderSlot, {
slots: {
default: () => <></>,
},
});
await nextTick();
expect(wrapper.html()).toContain('default value');
});
});
================================================
FILE: components/_util/canUseDom.ts
================================================
function canUseDom() {
return !!(typeof window !== 'undefined' && window.document && window.document.createElement);
}
export default canUseDom;
================================================
FILE: components/_util/classNames.ts
================================================
import { isArray, isString, isObject } from './util';
function classNames(...args: any[]) {
const classes = [];
for (let i = 0; i < args.length; i++) {
const value = args[i];
if (!value) continue;
if (isString(value)) {
classes.push(value);
} else if (isArray(value)) {
for (let i = 0; i < value.length; i++) {
const inner = classNames(value[i]);
if (inner) {
classes.push(inner);
}
}
} else if (isObject(value)) {
for (const name in value) {
if (value[name]) {
classes.push(name);
}
}
}
}
return classes.join(' ');
}
export default classNames;
================================================
FILE: components/_util/collapseMotion.tsx
================================================
import { nextTick } from 'vue';
import { addClass, removeClass } from '../vc-util/Dom/class';
import type { CSSMotionProps } from './transition';
const collapseMotion = (name = 'ant-motion-collapse', appear = true): CSSMotionProps => {
return {
name,
appear,
css: true,
onBeforeEnter: (node: HTMLDivElement) => {
node.style.height = '0px';
node.style.opacity = '0';
addClass(node, name);
},
onEnter: (node: HTMLDivElement) => {
nextTick(() => {
node.style.height = `${node.scrollHeight}px`;
node.style.opacity = '1';
});
},
onAfterEnter: (node: HTMLDivElement) => {
if (node) {
removeClass(node, name);
node.style.height = null;
node.style.opacity = null;
}
},
onBeforeLeave: (node: HTMLDivElement) => {
addClass(node, name);
node.style.height = `${node.offsetHeight}px`;
node.style.opacity = null;
},
onLeave: (node: HTMLDivElement) => {
setTimeout(() => {
node.style.height = '0px';
node.style.opacity = '0';
});
},
onAfterLeave: (node: HTMLDivElement) => {
if (node) {
removeClass(node, name);
if (node.style) {
node.style.height = null;
node.style.opacity = null;
}
}
},
};
};
export default collapseMotion;
================================================
FILE: components/_util/colors.ts
================================================
import type { PresetColorKey } from '../theme/interface';
import { PresetColors } from '../theme/interface';
type InverseColor = `${PresetColorKey}-inverse`;
const inverseColors = PresetColors.map<InverseColor>(color => `${color}-inverse`);
export const PresetStatusColorTypes = [
'success',
'processing',
'error',
'default',
'warning',
] as const;
export type PresetColorType = PresetColorKey | InverseColor;
export type PresetStatusColorType = (typeof PresetStatusColorTypes)[number];
/**
* determine if the color keyword belongs to the `Ant Design` {@link PresetColors}.
* @param color color to be judged
* @param includeInverse whether to include reversed colors
*/
export function isPresetColor(color?: any, includeInverse = true) {
if (includeInverse) {
return [...inverseColors, ...PresetColors].includes(color);
}
return PresetColors.includes(color);
}
export function isPresetStatusColor(color?: any): color is PresetStatusColorType {
return PresetStatusColorTypes.includes(color);
}
================================================
FILE: components/_util/component-classes.ts
================================================
/**
* source by `component-classes`
* https://github.com/component/classes.git
*/
import indexOf from 'lodash-es/indexOf';
/**
* Whitespace regexp.
*/
const re = /\s+/;
export class ClassList {
el: Element;
list: DOMTokenList;
constructor(el: Element) {
if (!el || !el.nodeType) {
throw new Error('A DOM element reference is required');
}
this.el = el;
this.list = el.classList;
}
array() {
const className = this.el.getAttribute('class') || '';
const str = className.replace(/^\s+|\s+$/g, '');
const arr = str.split(re);
if ('' === arr[0]) arr.shift();
return arr;
}
/**
* Add class `name` if not already present.
*
* @param {String} name
* @return {ClassList}
* @api public
*/
add(name: string): ClassList {
// classList
if (this.list) {
this.list.add(name);
return this;
}
// fallback
const arr = this.array();
const i = indexOf(arr, name);
if (!~i) arr.push(name);
this.el.className = arr.join(' ');
return this;
}
/**
* Remove class `name` when present, or
* pass a regular expression to remove
* any which match.
*
* @param {String|RegExp} name
* @return {ClassList}
* @api public
*/
remove(name: string | RegExp): ClassList {
if ('[object RegExp]' === toString.call(name)) {
return this._removeMatching(name as RegExp);
}
// classList
if (this.list) {
this.list.remove(name as string);
return this;
}
// fallback
const arr = this.array();
const i = indexOf(arr, name);
if (~i) arr.splice(i, 1);
this.el.className = arr.join(' ');
return this;
}
/**
* Remove all classes matching `re`.
*
* @param {RegExp} re
* @return {ClassList}
* @api private
*/
_removeMatching(re: RegExp): ClassList {
const arr = this.array();
for (let i = 0; i < arr.length; i++) {
if (re.test(arr[i])) {
this.remove(arr[i]);
}
}
return this;
}
/**
* Toggle class `name`, can force state via `force`.
*
* For browsers that support classList, but do not support `force` yet,
* the mistake will be detected and corrected.
*
* @param {String} name
* @param {Boolean} force
* @return {ClassList}
* @api public
*/
toggle(name: string, force: boolean): ClassList {
// classList
if (this.list) {
if ('undefined' !== typeof force) {
if (force !== this.list.toggle(name, force)) {
this.list.toggle(name); // toggle again to correct
}
} else {
this.list.toggle(name);
}
return this;
}
// fallback
if ('undefined' !== typeof force) {
if (!force) {
this.remove(name);
} else {
this.add(name);
}
} else {
if (this.has(name)) {
this.remove(name);
} else {
this.add(name);
}
}
return this;
}
/**
* Check if class `name` is present.
*
* @param {String} name
* @api public
*/
has(name: string) {
return this.list ? this.list.contains(name) : !!~indexOf(this.array(), name);
}
/**
* Check if class `name` is present.
*
* @param {String} name
* @api public
*/
contains(name: string) {
return this.has(name);
}
}
/**
* Wrap `el` in a `ClassList`.
*
* @param {Element} el
* @return {ClassList}
* @api public
*/
export default function (el: Element): ClassList {
return new ClassList(el);
}
================================================
FILE: components/_util/copy-to-clipboard/index.ts
================================================
import deselectCurrent from './toggle-selection';
interface Options {
debug?: boolean;
message?: string;
format?: string; // MIME type
onCopy?: (clipboardData: object) => void;
}
const clipboardToIE11Formatting = {
'text/plain': 'Text',
'text/html': 'Url',
default: 'Text',
};
const defaultMessage = 'Copy to clipboard: #{key}, Enter';
function format(message: string) {
const copyKey = (/mac os x/i.test(navigator.userAgent) ? '⌘' : 'Ctrl') + '+C';
return message.replace(/#{\s*key\s*}/g, copyKey);
}
function copy(text: string, options?: Options): boolean {
let message,
reselectPrevious,
range,
selection,
mark,
success = false;
if (!options) {
options = {};
}
const debug = options.debug || false;
try {
reselectPrevious = deselectCurrent();
range = document.createRange();
selection = document.getSelection();
mark = document.createElement('span');
mark.textContent = text;
// reset user styles for span element
mark.style.all = 'unset';
// prevents scrolling to the end of the page
mark.style.position = 'fixed';
mark.style.top = 0;
mark.style.clip = 'rect(0, 0, 0, 0)';
// used to preserve spaces and line breaks
mark.style.whiteSpace = 'pre';
// do not inherit user-select (it may be `none`)
mark.style.webkitUserSelect = 'text';
mark.style.MozUserSelect = 'text';
mark.style.msUserSelect = 'text';
mark.style.userSelect = 'text';
mark.addEventListener('copy', function (e) {
e.stopPropagation();
if (options.format) {
e.preventDefault();
if (typeof e.clipboardData === 'undefined') {
// IE 11
debug && console.warn('unable to use e.clipboardData');
debug && console.warn('trying IE specific stuff');
(window as any).clipboardData.clearData();
const format =
clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting['default'];
(window as any).clipboardData.setData(format, text);
} else {
// all other browsers
e.clipboardData.clearData();
e.clipboardData.setData(options.format, text);
}
}
if (options.onCopy) {
e.preventDefault();
options.onCopy(e.clipboardData);
}
});
document.body.appendChild(mark);
range.selectNodeContents(mark);
selection.addRange(range);
const successful = document.execCommand('copy');
if (!successful) {
throw new Error('copy command was unsuccessful');
}
success = true;
} catch (err) {
debug && console.error('unable to copy using execCommand: ', err);
debug && console.warn('trying IE specific stuff');
try {
(window as any).clipboardData.setData(options.format || 'text', text);
options.onCopy && options.onCopy((window as any).clipboardData);
success = true;
} catch (err) {
debug && console.error('unable to copy using clipboardData: ', err);
debug && console.error('falling back to prompt');
message = format('message' in options ? options.message : defaultMessage);
window.prompt(message, text);
}
} finally {
if (selection) {
if (typeof selection.removeRange == 'function') {
selection.removeRange(range);
} else {
selection.removeAllRanges();
}
}
if (mark) {
document.body.removeChild(mark);
}
reselectPrevious();
}
return success;
}
export default copy;
================================================
FILE: components/_util/copy-to-clipboard/toggle-selection.ts
================================================
// copy from https://github.com/sudodoki/toggle-selection
// refactor to esm
const deselectCurrent = (): (() => void) => {
const selection = document.getSelection();
if (!selection.rangeCount) {
return function () {};
}
let active = document.activeElement as any;
const ranges = [];
for (let i = 0; i < selection.rangeCount; i++) {
ranges.push(selection.getRangeAt(i));
}
switch (
active.tagName.toUpperCase() // .toUpperCase handles XHTML
) {
case 'INPUT':
case 'TEXTAREA':
active.blur();
break;
default:
active = null;
break;
}
selection.removeAllRanges();
return function () {
selection.type === 'Caret' && selection.removeAllRanges();
if (!selection.rangeCount) {
ranges.forEach(function (range) {
selection.addRange(range);
});
}
active && active.focus();
};
};
export default deselectCurrent;
================================================
FILE: components/_util/createContext.ts
================================================
import { inject, provide, reactive, watchEffect } from 'vue';
function createContext<T extends Record<string, any>>(defaultValue?: T) {
const contextKey = Symbol('contextKey');
const useProvide = (props: T, newProps?: T) => {
const mergedProps = reactive<T>({} as T);
provide(contextKey, mergedProps);
watchEffect(() => {
Object.assign(mergedProps, props, newProps || {});
});
return mergedProps;
};
const useInject = () => {
return inject(contextKey, defaultValue as T) || ({} as T);
};
return {
useProvide,
useInject,
};
}
export default createContext;
================================================
FILE: components/_util/createRef.ts
================================================
export interface RefObject extends Function {
current?: any;
}
function createRef(): any {
const func: RefObject = (node: any) => {
func.current = node;
};
return func;
}
export function fillRef<T>(ref, node: T) {
if (typeof ref === 'function') {
ref(node);
} else if (typeof ref === 'object' && ref && 'current' in ref) {
(ref as any).current = node;
}
}
/**
* Merge refs into one ref function to support ref passing.
*/
export function composeRef<T>(...refs: any[]) {
return (node: T) => {
refs.forEach(ref => {
fillRef(ref, node);
});
};
}
export default createRef;
================================================
FILE: components/_util/cssinjs/Cache.ts
================================================
export type KeyType = string | number;
type ValueType = [number, any]; // [times, realValue]
const SPLIT = '%';
class Entity {
instanceId: string;
constructor(instanceId: string) {
this.instanceId = instanceId;
}
/** @private Internal cache map. Do not access this directly */
cache = new Map<string, ValueType>();
get(keys: KeyType[] | string): ValueType | null {
return this.cache.get(Array.isArray(keys) ? keys.join(SPLIT) : keys) || null;
}
update(keys: KeyType[] | string, valueFn: (origin: ValueType | null) => ValueType | null) {
const path = Array.isArray(keys) ? keys.join(SPLIT) : keys;
const prevValue = this.cache.get(path)!;
const nextValue = valueFn(prevValue);
if (nextValue === null) {
this.cache.delete(path);
} else {
this.cache.set(path, nextValue);
}
}
}
export default Entity;
================================================
FILE: components/_util/cssinjs/Keyframes.ts
================================================
import type { CSSInterpolation } from './hooks/useStyleRegister';
class Keyframe {
private name: string;
style: CSSInterpolation;
constructor(name: string, style: CSSInterpolation) {
this.name = name;
this.style = style;
}
getName(hashId = ''): string {
return hashId ? `${hashId}-${this.name}` : this.name;
}
_keyframe = true;
}
export default Keyframe;
================================================
FILE: components/_util/cssinjs/StyleContext.tsx
================================================
import type { ShallowRef, ExtractPropTypes, InjectionKey, Ref } from 'vue';
import {
provide,
defineComponent,
unref,
inject,
watch,
shallowRef,
getCurrentInstance,
} from 'vue';
import CacheEntity from './Cache';
import type { Linter } from './linters/interface';
import type { Transformer } from './transformers/interface';
import { arrayType, booleanType, objectType, someType, stringType, withInstall } from '../type';
export const ATTR_TOKEN = 'data-token-hash';
export const ATTR_MARK = 'data-css-hash';
export const ATTR_CACHE_PATH = 'data-cache-path';
// Mark css-in-js instance in style element
export const CSS_IN_JS_INSTANCE = '__cssinjs_instance__';
export function createCache() {
const cssinjsInstanceId = Math.random().toString(12).slice(2);
// Tricky SSR: Move all inline style to the head.
// PS: We do not recommend tricky mode.
if (typeof document !== 'undefined' && document.head && document.body) {
const styles = document.body.querySelectorAll(`style[${ATTR_MARK}]`) || [];
const { firstChild } = document.head;
Array.from(styles).forEach(style => {
(style as any)[CSS_IN_JS_INSTANCE] = (style as any)[CSS_IN_JS_INSTANCE] || cssinjsInstanceId;
// Not force move if no head
// Not force move if no head
if ((style as any)[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {
document.head.insertBefore(style, firstChild);
}
});
// Deduplicate of moved styles
const styleHash: Record<string, boolean> = {};
Array.from(document.querySelectorAll(`style[${ATTR_MARK}]`)).forEach(style => {
const hash = style.getAttribute(ATTR_MARK)!;
if (styleHash[hash]) {
if ((style as any)[CSS_IN_JS_INSTANCE] === cssinjsInstanceId) {
style.parentNode?.removeChild(style);
}
} else {
styleHash[hash] = true;
}
});
}
return new CacheEntity(cssinjsInstanceId);
}
export type HashPriority = 'low' | 'high';
export interface StyleContextProps {
autoClear?: boolean;
/** @private Test only. Not work in production. */
mock?: 'server' | 'client';
/**
* Only set when you need ssr to extract style on you own.
* If not provided, it will auto create <style /> on the end of Provider in server side.
*/
cache: CacheEntity;
/** Tell children that this context is default generated context */
defaultCache: boolean;
/** Use `:where` selector to reduce hashId css selector priority */
hashPriority?: HashPriority;
/** Tell cssinjs where to inject style in */
container?: Element | ShadowRoot;
/** Component wil render inline `<style />` for fallback in SSR. Not recommend. */
ssrInline?: boolean;
/** Transform css before inject in document. Please note that `transformers` do not support dynamic update */
transformers?: Transformer[];
/**
* Linters to lint css before inject in document.
* Styles will be linted after transforming.
* Please note that `linters` do not support dynamic update.
*/
linters?: Linter[];
}
const StyleContextKey: InjectionKey<ShallowRef<Partial<StyleContextProps>>> =
Symbol('StyleContextKey');
export type UseStyleProviderProps = Partial<StyleContextProps> | Ref<Partial<StyleContextProps>>;
// fix: https://github.com/vueComponent/ant-design-vue/issues/7023
const getCache = () => {
const instance = getCurrentInstance();
let cache: CacheEntity;
if (instance && instance.appContext) {
const globalCache = instance.appContext?.config?.globalProperties?.__ANTDV_CSSINJS_CACHE__;
if (globalCache) {
cache = globalCache;
} else {
cache = createCache();
if (instance.appContext.config.globalProperties) {
instance.appContext.config.globalProperties.__ANTDV_CSSINJS_CACHE__ = cache;
}
}
} else {
cache = createCache();
}
return cache;
};
const defaultStyleContext: StyleContextProps = {
cache: createCache(),
defaultCache: true,
hashPriority: 'low',
};
// fix: https://github.com/vueComponent/ant-design-vue/issues/6912
export const useStyleInject = () => {
const cache = getCache();
return inject(StyleContextKey, shallowRef({ ...defaultStyleContext, cache }));
};
export const useStyleProvider = (props: UseStyleProviderProps) => {
const parentContext = useStyleInject();
const context = shallowRef<Partial<StyleContextProps>>({
...defaultStyleContext,
cache: createCache(),
});
watch(
[() => unref(props), parentContext],
() => {
const mergedContext: Partial<StyleContextProps> = {
...parentContext.value,
};
const propsValue = unref(props);
Object.keys(propsValue).forEach(key => {
const value = propsValue[key];
if (propsValue[key] !== undefined) {
mergedContext[key] = value;
}
});
const { cache } = propsValue;
mergedContext.cache = mergedContext.cache || createCache();
mergedContext.defaultCache = !cache && parentContext.value.defaultCache;
context.value = mergedContext;
},
{ immediate: true },
);
provide(StyleContextKey, context);
return context;
};
export const styleProviderProps = () => ({
autoClear: booleanType(),
/** @private Test only. Not work in production. */
mock: stringType<'server' | 'client'>(),
/**
* Only set when you need ssr to extract style on you own.
* If not provided, it will auto create <style /> on the end of Provider in server side.
*/
cache: objectType<CacheEntity>(),
/** Tell children that this context is default generated context */
defaultCache: booleanType(),
/** Use `:where` selector to reduce hashId css selector priority */
hashPriority: stringType<HashPriority>(),
/** Tell cssinjs where to inject style in */
container: someType<Element | ShadowRoot>(),
/** Component wil render inline `<style />` for fallback in SSR. Not recommend. */
ssrInline: booleanType(),
/** Transform css before inject in document. Please note that `transformers` do not support dynamic update */
transformers: arrayType<Transformer[]>(),
/**
* Linters to lint css before inject in document.
* Styles will be linted after transforming.
* Please note that `linters` do not support dynamic update.
*/
linters: arrayType<Linter[]>(),
});
export type StyleProviderProps = Partial<ExtractPropTypes<ReturnType<typeof styleProviderProps>>>;
export const StyleProvider = withInstall(
defineComponent({
name: 'AStyleProvider',
inheritAttrs: false,
props: styleProviderProps(),
setup(props, { slots }) {
useStyleProvider(props);
return () => slots.default?.();
},
}),
);
export default {
useStyleInject,
useStyleProvider,
StyleProvider,
};
================================================
FILE: components/_util/cssinjs/hooks/useCacheToken.tsx
================================================
import hash from '@emotion/hash';
import { ATTR_TOKEN, CSS_IN_JS_INSTANCE, useStyleInject } from '../StyleContext';
import type Theme from '../theme/Theme';
import useGlobalCache from './useGlobalCache';
import { flattenToken, token2key } from '../util';
import type { Ref } from 'vue';
import { ref, computed } from 'vue';
const EMPTY_OVERRIDE = {};
const isProduction = process.env.NODE_ENV === 'production';
// nuxt generate when NODE_ENV is prerender
const isPrerender = process.env.NODE_ENV === 'prerender';
// Generate different
gitextract_nemjdp9h/ ├── .antd-tools.config.js ├── .codecov.yml ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github/ │ ├── FUNDING.yml │ ├── ISSUE_TEMPLATE/ │ │ └── config.yml │ ├── PULL_REQUEST_TEMPLATE/ │ │ ├── pr_cn.md │ │ └── pr_en.md │ ├── issue-close-app.yml │ └── workflows/ │ ├── cloudflare.yml │ ├── codecov.yml │ ├── emoji-helper.yml │ ├── issue-close-require.yml │ ├── issue-labeled.yml │ ├── issue-open-check.yml │ ├── lock-issue.yml │ ├── stale.yml │ └── test.yml ├── .gitignore ├── .husky/ │ ├── .gitignore │ └── pre-commit ├── .huskyrc ├── .jest.js ├── .npmrc ├── .prettierignore ├── .prettierrc ├── .stylelintrc ├── .stylelintrc.json ├── .vcmrc ├── BACKERS.md ├── CHANGELOG.en-US.md ├── CHANGELOG.zh-CN.md ├── LICENSE ├── README-zh_CN.md ├── README.md ├── SECURITY.md ├── antd-tools/ │ ├── apiCollection.js │ ├── cli/ │ │ ├── index.js │ │ └── run.js │ ├── generator-types/ │ │ ├── README.md │ │ ├── index.js │ │ ├── src/ │ │ │ ├── formatter.ts │ │ │ ├── index.ts │ │ │ ├── parser.ts │ │ │ ├── type.ts │ │ │ ├── utils.ts │ │ │ └── web-types.ts │ │ └── tsconfig.json │ ├── getBabelCommonConfig.js │ ├── getNpm.js │ ├── getTSCommonConfig.js │ ├── getWebpackConfig.js │ ├── gulpfile.js │ ├── replaceLib.js │ ├── runCmd.js │ ├── sortApiTable.js │ └── utils/ │ ├── CleanUpStatsPlugin.js │ ├── get-npm-args.js │ ├── getChangelog.js │ ├── getRunCmdEnv.js │ └── projectHelper.js ├── babel.config.js ├── build.sh ├── components/ │ ├── __tests__/ │ │ └── util/ │ │ └── domHook.js │ ├── _util/ │ │ ├── ActionButton.tsx │ │ ├── BaseInput.tsx │ │ ├── BaseInputInner.tsx │ │ ├── BaseMixin.ts │ │ ├── EventInterface.ts │ │ ├── KeyCode.ts │ │ ├── Portal.tsx │ │ ├── PortalWrapper.tsx │ │ ├── __mocks__/ │ │ │ ├── Portal.tsx │ │ │ └── RenderSlot.tsx │ │ ├── __tests__/ │ │ │ ├── easings.test.js │ │ │ ├── scrollTo.test.js │ │ │ ├── unreachableException.test.js │ │ │ └── vNode.test.js │ │ ├── canUseDom.ts │ │ ├── classNames.ts │ │ ├── collapseMotion.tsx │ │ ├── colors.ts │ │ ├── component-classes.ts │ │ ├── copy-to-clipboard/ │ │ │ ├── index.ts │ │ │ └── toggle-selection.ts │ │ ├── createContext.ts │ │ ├── createRef.ts │ │ ├── cssinjs/ │ │ │ ├── Cache.ts │ │ │ ├── Keyframes.ts │ │ │ ├── StyleContext.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useCacheToken.tsx │ │ │ │ ├── useGlobalCache.tsx │ │ │ │ ├── useHMR.ts │ │ │ │ └── useStyleRegister/ │ │ │ │ ├── cacheMapUtil.ts │ │ │ │ └── index.tsx │ │ │ ├── index.ts │ │ │ ├── linters/ │ │ │ │ ├── contentQuotesLinter.ts │ │ │ │ ├── hashedAnimationLinter.ts │ │ │ │ ├── index.ts │ │ │ │ ├── interface.ts │ │ │ │ ├── legacyNotSelectorLinter.ts │ │ │ │ ├── logicalPropertiesLinter.ts │ │ │ │ ├── parentSelectorLinter.ts │ │ │ │ └── utils.ts │ │ │ ├── theme/ │ │ │ │ ├── Theme.ts │ │ │ │ ├── ThemeCache.ts │ │ │ │ ├── createTheme.ts │ │ │ │ ├── index.ts │ │ │ │ └── interface.ts │ │ │ ├── transformers/ │ │ │ │ ├── interface.ts │ │ │ │ ├── legacyLogicalProperties.ts │ │ │ │ └── px2rem.ts │ │ │ └── util.ts │ │ ├── debouncedWatch.ts │ │ ├── eagerComputed.ts │ │ ├── easings.ts │ │ ├── env.ts │ │ ├── extendsObject.ts │ │ ├── firstNotUndefined.ts │ │ ├── gapSize.ts │ │ ├── getRequestAnimationFrame.ts │ │ ├── getScroll.ts │ │ ├── getScrollBarSize.ts │ │ ├── hooks/ │ │ │ ├── _vueuse/ │ │ │ │ ├── _configurable.ts │ │ │ │ ├── is.ts │ │ │ │ ├── resolveUnref.ts │ │ │ │ ├── tryOnMounted.ts │ │ │ │ ├── tryOnScopeDispose.ts │ │ │ │ ├── types.ts │ │ │ │ ├── unrefElement.ts │ │ │ │ ├── useElementSize.ts │ │ │ │ ├── useMutationObserver.ts │ │ │ │ ├── useResizeObserver.ts │ │ │ │ └── useSupported.ts │ │ │ ├── useBreakpoint.ts │ │ │ ├── useDestroyed.ts │ │ │ ├── useFlexGapSupport.ts │ │ │ ├── useId.ts │ │ │ ├── useLayoutState.ts │ │ │ ├── useMemo.ts │ │ │ ├── useMergedState.ts │ │ │ ├── useRefs.ts │ │ │ ├── useScrollLocker.ts │ │ │ └── useState.ts │ │ ├── isNumeric.ts │ │ ├── isValid.ts │ │ ├── isValidValue.ts │ │ ├── json2mq.ts │ │ ├── omit.ts │ │ ├── pickAttrs.ts │ │ ├── placements.ts │ │ ├── props-util/ │ │ │ ├── index.ts │ │ │ └── initDefaultProps.ts │ │ ├── raf.ts │ │ ├── reactivePick.ts │ │ ├── requestAnimationTimeout.ts │ │ ├── responsiveObserve.ts │ │ ├── scrollTo.ts │ │ ├── setStyle.ts │ │ ├── shallowequal.ts │ │ ├── static-style-extract/ │ │ │ ├── __tests__/ │ │ │ │ ├── __snapshots__/ │ │ │ │ │ └── index.test.js.snap │ │ │ │ └── index.test.js │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── statusUtils.tsx │ │ ├── styleChecker.ts │ │ ├── supportsPassive.js │ │ ├── throttleByAnimationFrame.ts │ │ ├── toReactive.ts │ │ ├── transButton.tsx │ │ ├── transKeys.ts │ │ ├── transition.tsx │ │ ├── type.ts │ │ ├── unreachableException.ts │ │ ├── util.ts │ │ ├── vnode.ts │ │ ├── vue-types/ │ │ │ └── index.ts │ │ ├── warning.ts │ │ └── wave/ │ │ ├── WaveEffect.tsx │ │ ├── index.tsx │ │ ├── style.ts │ │ ├── useWave.ts │ │ └── util.ts │ ├── affix/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── index.vue │ │ │ ├── on-change.vue │ │ │ └── target.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ └── index.ts │ │ └── utils.ts │ ├── alert/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── action.vue │ │ │ ├── banner.vue │ │ │ ├── basic.vue │ │ │ ├── closable.vue │ │ │ ├── close-text.vue │ │ │ ├── custom-icon.vue │ │ │ ├── description.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── smooth-closed.vue │ │ │ └── style.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── anchor/ │ │ ├── Anchor.tsx │ │ ├── AnchorLink.tsx │ │ ├── __tests__/ │ │ │ ├── Anchor.test.js │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── customizeHighlight.vue │ │ │ ├── horizontal.vue │ │ │ ├── index.vue │ │ │ ├── onChange.vue │ │ │ ├── onClick.vue │ │ │ ├── static.vue │ │ │ └── targetOffset.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── app/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── index.vue │ │ │ └── myPage.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── auto-complete/ │ │ ├── OptGroup.tsx │ │ ├── Option.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── allow-clear.vue │ │ │ ├── basic.vue │ │ │ ├── border-less.vue │ │ │ ├── certain-category.vue │ │ │ ├── custom.vue │ │ │ ├── index.vue │ │ │ ├── non-case-sensitive.vue │ │ │ ├── options.vue │ │ │ ├── status.vue │ │ │ └── uncertain-category.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ └── index.zh-CN.md │ ├── avatar/ │ │ ├── Avatar.tsx │ │ ├── AvatarContext.ts │ │ ├── Group.tsx │ │ ├── __tests__/ │ │ │ ├── Avatar.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Avatar.test.js.snap │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── demo/ │ │ │ ├── badge.vue │ │ │ ├── basic.vue │ │ │ ├── dynamic.vue │ │ │ ├── group.vue │ │ │ ├── index.vue │ │ │ ├── responsive.vue │ │ │ └── type.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── badge/ │ │ ├── Badge.tsx │ │ ├── Ribbon.tsx │ │ ├── ScrollNumber.tsx │ │ ├── SingleNumber.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── change.vue │ │ │ ├── colors.vue │ │ │ ├── dot.vue │ │ │ ├── index.vue │ │ │ ├── link.vue │ │ │ ├── no-wrapper.vue │ │ │ ├── overflow.vue │ │ │ ├── ribbon.vue │ │ │ ├── status.vue │ │ │ └── title.vue │ │ ├── index.en_US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── breadcrumb/ │ │ ├── Breadcrumb.tsx │ │ ├── BreadcrumbItem.tsx │ │ ├── BreadcrumbSeparator.tsx │ │ ├── __tests__/ │ │ │ ├── Breadcrumb.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Breadcrumb.test.js.snap │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── index.vue │ │ │ ├── overlay.vue │ │ │ ├── router.vue │ │ │ ├── separator-indepent.vue │ │ │ ├── separator.vue │ │ │ └── withIcon.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── button/ │ │ ├── LoadingIcon.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── index.test.js │ │ │ └── wave.test.js │ │ ├── button-group.tsx │ │ ├── button.tsx │ │ ├── buttonTypes.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── block.vue │ │ │ ├── button-group.vue │ │ │ ├── danger.vue │ │ │ ├── disabled.vue │ │ │ ├── ghost.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── loading.vue │ │ │ ├── multiple.vue │ │ │ └── size.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ ├── group.ts │ │ └── index.ts │ ├── calendar/ │ │ ├── Header.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── date-fns.tsx │ │ ├── dayjs.tsx │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── card.vue │ │ │ ├── customize-header.vue │ │ │ ├── index.vue │ │ │ ├── notice-calendar.vue │ │ │ └── select.vue │ │ ├── generateCalendar.tsx │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── locale/ │ │ │ ├── ar_EG.ts │ │ │ ├── az_AZ.ts │ │ │ ├── bg_BG.ts │ │ │ ├── bn_BD.ts │ │ │ ├── by_BY.ts │ │ │ ├── ca_ES.ts │ │ │ ├── ckb_IQ.ts │ │ │ ├── cs_CZ.ts │ │ │ ├── da_DK.ts │ │ │ ├── de_DE.ts │ │ │ ├── el_GR.ts │ │ │ ├── en_GB.ts │ │ │ ├── en_US.ts │ │ │ ├── es_ES.ts │ │ │ ├── et_EE.ts │ │ │ ├── fa_IR.ts │ │ │ ├── fi_FI.ts │ │ │ ├── fr_BE.ts │ │ │ ├── fr_CA.ts │ │ │ ├── fr_FR.ts │ │ │ ├── ga_IE.ts │ │ │ ├── gl_ES.ts │ │ │ ├── he_IL.ts │ │ │ ├── hi_IN.ts │ │ │ ├── hr_HR.ts │ │ │ ├── hu_HU.ts │ │ │ ├── id_ID.ts │ │ │ ├── is_IS.ts │ │ │ ├── it_IT.ts │ │ │ ├── ja_JP.ts │ │ │ ├── ka_GE.ts │ │ │ ├── kk_KZ.ts │ │ │ ├── km_KH.ts │ │ │ ├── kmr_IQ.ts │ │ │ ├── kn_IN.ts │ │ │ ├── ko_KR.ts │ │ │ ├── lt_LT.ts │ │ │ ├── lv_LV.ts │ │ │ ├── mk_MK.ts │ │ │ ├── ml_IN.ts │ │ │ ├── mn_MN.ts │ │ │ ├── ms_MY.ts │ │ │ ├── nb_NO.ts │ │ │ ├── nl_BE.ts │ │ │ ├── nl_NL.ts │ │ │ ├── pl_PL.ts │ │ │ ├── pt_BR.ts │ │ │ ├── pt_PT.ts │ │ │ ├── ro_RO.ts │ │ │ ├── ru_RU.ts │ │ │ ├── sk_SK.ts │ │ │ ├── sl_SI.ts │ │ │ ├── sr_RS.ts │ │ │ ├── sv_SE.ts │ │ │ ├── ta_IN.ts │ │ │ ├── th_TH.ts │ │ │ ├── tr_TR.ts │ │ │ ├── uk_UA.ts │ │ │ ├── ur_PK.ts │ │ │ ├── vi_VN.ts │ │ │ ├── zh_CN.ts │ │ │ └── zh_TW.ts │ │ ├── moment.tsx │ │ └── style/ │ │ └── index.tsx │ ├── card/ │ │ ├── Card.tsx │ │ ├── Grid.tsx │ │ ├── Meta.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── border-less.vue │ │ │ ├── flexible-content.vue │ │ │ ├── grid-card.vue │ │ │ ├── in-column.vue │ │ │ ├── index.vue │ │ │ ├── inner.vue │ │ │ ├── loading.vue │ │ │ ├── meta.vue │ │ │ ├── simple.vue │ │ │ └── tabs.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── carousel/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── autoplay.vue │ │ │ ├── basic.vue │ │ │ ├── customArrows.vue │ │ │ ├── customPaging.vue │ │ │ ├── fade.vue │ │ │ ├── index.vue │ │ │ └── position.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── cascader/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── change-on-select.vue │ │ │ ├── custom-render.vue │ │ │ ├── custom-trigger.vue │ │ │ ├── disabled-option.vue │ │ │ ├── fields-name.vue │ │ │ ├── hover.vue │ │ │ ├── index.vue │ │ │ ├── lazy.vue │ │ │ ├── multiple.vue │ │ │ ├── search.vue │ │ │ ├── size.vue │ │ │ ├── suffix.vue │ │ │ └── tagRender.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── checkbox/ │ │ ├── Checkbox.tsx │ │ ├── Group.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── group.test.js.snap │ │ │ ├── checkbox.test.js │ │ │ ├── demo.test.js │ │ │ └── group.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── check-all.vue │ │ │ ├── controller.vue │ │ │ ├── disabled.vue │ │ │ ├── group.vue │ │ │ ├── index.vue │ │ │ └── layout.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ └── style/ │ │ └── index.ts │ ├── col/ │ │ ├── index.ts │ │ └── style/ │ │ └── index.ts │ ├── collapse/ │ │ ├── Collapse.tsx │ │ ├── CollapsePanel.tsx │ │ ├── PanelContent.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── commonProps.ts │ │ ├── demo/ │ │ │ ├── accordion.vue │ │ │ ├── basic.vue │ │ │ ├── borderless.vue │ │ │ ├── collapsible.vue │ │ │ ├── custom.vue │ │ │ ├── extra.vue │ │ │ ├── ghost.vue │ │ │ ├── index.vue │ │ │ ├── mix.vue │ │ │ └── noarrow.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── comment/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── editor.vue │ │ │ ├── index.vue │ │ │ ├── list.vue │ │ │ └── nested.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── components.ts │ ├── config-provider/ │ │ ├── DisabledContext.ts │ │ ├── SizeContext.ts │ │ ├── __tests__/ │ │ │ └── index.test.js │ │ ├── context.ts │ │ ├── cssVariables.ts │ │ ├── demo/ │ │ │ ├── direction.vue │ │ │ ├── index.vue │ │ │ ├── locale.vue │ │ │ ├── size.vue │ │ │ └── theme.vue │ │ ├── hooks/ │ │ │ ├── useConfigInject.ts │ │ │ └── useTheme.ts │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── renderEmpty.tsx │ │ └── style/ │ │ └── index.ts │ ├── date-picker/ │ │ ├── PickerButton.tsx │ │ ├── PickerTag.tsx │ │ ├── __tests__/ │ │ │ ├── DatePicker.test.js │ │ │ ├── QuarterPicker.test.js │ │ │ ├── RangePicker.test.js │ │ │ ├── WeekPicker.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── DatePicker.test.js.snap │ │ │ │ ├── QuarterPicker.test.js.snap │ │ │ │ ├── RangePicker.test.js.snap │ │ │ │ ├── WeekPicker.test.js.snap │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── other.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── mount.test.js │ │ │ ├── other.test.js │ │ │ └── utils.js │ │ ├── date-fns.tsx │ │ ├── dayjs.tsx │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── bordered.vue │ │ │ ├── date-render.vue │ │ │ ├── disabled-date.vue │ │ │ ├── disabled.vue │ │ │ ├── extra-footer.vue │ │ │ ├── format.vue │ │ │ ├── index.vue │ │ │ ├── mode.vue │ │ │ ├── placement.vue │ │ │ ├── presetted-ranges.vue │ │ │ ├── range-picker.vue │ │ │ ├── select-in-range.vue │ │ │ ├── size.vue │ │ │ ├── start-end.vue │ │ │ ├── status.vue │ │ │ ├── suffix.vue │ │ │ ├── switchable.vue │ │ │ ├── text.vue │ │ │ └── time.vue │ │ ├── generatePicker/ │ │ │ ├── generateRangePicker.tsx │ │ │ ├── generateSinglePicker.tsx │ │ │ ├── index.tsx │ │ │ ├── interface.ts │ │ │ └── props.ts │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── locale/ │ │ │ ├── ar_EG.ts │ │ │ ├── az_AZ.ts │ │ │ ├── bg_BG.ts │ │ │ ├── bn_BD.ts │ │ │ ├── by_BY.ts │ │ │ ├── ca_ES.ts │ │ │ ├── ckb_IQ.ts │ │ │ ├── cs_CZ.ts │ │ │ ├── da_DK.ts │ │ │ ├── de_DE.ts │ │ │ ├── el_GR.ts │ │ │ ├── en_GB.ts │ │ │ ├── en_US.ts │ │ │ ├── es_ES.ts │ │ │ ├── et_EE.ts │ │ │ ├── example.json │ │ │ ├── fa_IR.ts │ │ │ ├── fi_FI.ts │ │ │ ├── fr_BE.ts │ │ │ ├── fr_CA.ts │ │ │ ├── fr_FR.ts │ │ │ ├── ga_IE.ts │ │ │ ├── gl_ES.ts │ │ │ ├── he_IL.ts │ │ │ ├── hi_IN.ts │ │ │ ├── hr_HR.ts │ │ │ ├── hu_HU.ts │ │ │ ├── id_ID.ts │ │ │ ├── is_IS.ts │ │ │ ├── it_IT.ts │ │ │ ├── ja_JP.ts │ │ │ ├── ka_GE.ts │ │ │ ├── kk_KZ.ts │ │ │ ├── km_KH.ts │ │ │ ├── kmr_IQ.ts │ │ │ ├── kn_IN.ts │ │ │ ├── ko_KR.ts │ │ │ ├── lt_LT.ts │ │ │ ├── lv_LV.ts │ │ │ ├── mk_MK.ts │ │ │ ├── ml_IN.ts │ │ │ ├── mn_MN.ts │ │ │ ├── ms_MY.ts │ │ │ ├── nb_NO.ts │ │ │ ├── nl_BE.ts │ │ │ ├── nl_NL.ts │ │ │ ├── pl_PL.ts │ │ │ ├── pt_BR.ts │ │ │ ├── pt_PT.ts │ │ │ ├── ro_RO.ts │ │ │ ├── ru_RU.ts │ │ │ ├── sk_SK.ts │ │ │ ├── sl_SI.ts │ │ │ ├── sr_RS.ts │ │ │ ├── sv_SE.ts │ │ │ ├── ta_IN.ts │ │ │ ├── th_TH.ts │ │ │ ├── tr_TR.ts │ │ │ ├── uk_UA.ts │ │ │ ├── ur_PK.ts │ │ │ ├── vi_VN.ts │ │ │ ├── zh_CN.ts │ │ │ └── zh_TW.ts │ │ ├── moment.tsx │ │ ├── style/ │ │ │ └── index.ts │ │ └── util.ts │ ├── descriptions/ │ │ ├── Cell.tsx │ │ ├── Row.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── border.vue │ │ │ ├── index.vue │ │ │ ├── responsive.vue │ │ │ ├── size.vue │ │ │ ├── vertical-border.vue │ │ │ └── vertical.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── divider/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── customize-style.vue │ │ │ ├── horizontal.vue │ │ │ ├── index.vue │ │ │ ├── vertical.vue │ │ │ └── with-text.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── drawer/ │ │ ├── __tests__/ │ │ │ ├── Drawer.test.js │ │ │ ├── DrawerEvent.test.js │ │ │ ├── MultiDrawer.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Drawer.test.js.snap │ │ │ │ ├── DrawerEvent.test.js.snap │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── descriptionItem/ │ │ │ │ └── index.vue │ │ │ ├── extra.vue │ │ │ ├── form-in-drawer.vue │ │ │ ├── index.vue │ │ │ ├── multi-level-drawer.vue │ │ │ ├── placement.vue │ │ │ ├── render-in-current.vue │ │ │ ├── size.vue │ │ │ └── user-profile.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ ├── index.ts │ │ └── motion.ts │ ├── dropdown/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── dropdown-button.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── dropdown-button.test.js │ │ ├── demo/ │ │ │ ├── arrow-center.vue │ │ │ ├── arrow.vue │ │ │ ├── basic.vue │ │ │ ├── context-menu.vue │ │ │ ├── dropdown-button.vue │ │ │ ├── event.vue │ │ │ ├── index.vue │ │ │ ├── item.vue │ │ │ ├── loading.vue │ │ │ ├── overlay-visible.vue │ │ │ ├── placement.vue │ │ │ ├── sub-menu.vue │ │ │ └── trigger.vue │ │ ├── dropdown-button.tsx │ │ ├── dropdown.tsx │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── props.ts │ │ └── style/ │ │ ├── button.ts │ │ ├── index.ts │ │ └── status.ts │ ├── empty/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── config-provider.vue │ │ │ ├── customize.vue │ │ │ ├── description.vue │ │ │ ├── index.vue │ │ │ └── simple.vue │ │ ├── empty.tsx │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── simple.tsx │ │ └── style/ │ │ └── index.ts │ ├── flex/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── align.vue │ │ │ ├── basic.vue │ │ │ ├── combination.vue │ │ │ ├── gap.vue │ │ │ ├── index.vue │ │ │ └── wrap.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── utils.ts │ ├── float-button/ │ │ ├── BackTop.tsx │ │ ├── FloatButton.tsx │ │ ├── FloatButtonContent.tsx │ │ ├── FloatButtonGroup.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── index.test.js │ │ │ └── wave.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── back-top.vue │ │ │ ├── badge.vue │ │ │ ├── basic.vue │ │ │ ├── description.vue │ │ │ ├── group-menu.vue │ │ │ ├── group.vue │ │ │ ├── index.vue │ │ │ ├── shape.vue │ │ │ ├── tooltip.vue │ │ │ └── type.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── util.ts │ ├── form/ │ │ ├── ErrorList.tsx │ │ ├── Form.tsx │ │ ├── FormItem.tsx │ │ ├── FormItemContext.ts │ │ ├── FormItemInput.tsx │ │ ├── FormItemLabel.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── advanced-search.vue │ │ │ ├── basic.vue │ │ │ ├── custom-validation.vue │ │ │ ├── customized-form-controls.vue │ │ │ ├── disabled.vue │ │ │ ├── dynamic-form-item.vue │ │ │ ├── dynamic-form-items-complex.vue │ │ │ ├── dynamic-form-items.vue │ │ │ ├── dynamic-rule.vue │ │ │ ├── form-context.vue │ │ │ ├── form-in-modal.vue │ │ │ ├── horizontal-login.vue │ │ │ ├── index.vue │ │ │ ├── inline-login.vue │ │ │ ├── label-width.vue │ │ │ ├── layout.vue │ │ │ ├── nest-messages.vue │ │ │ ├── normal-login.vue │ │ │ ├── price-input.vue │ │ │ ├── time-related-controls.vue │ │ │ ├── useForm-basic.vue │ │ │ ├── useForm-merge.vue │ │ │ ├── useForm-nested.vue │ │ │ ├── useForm-trigger.vue │ │ │ ├── validate-other.vue │ │ │ ├── validate-static.vue │ │ │ └── validation.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── style/ │ │ │ ├── explain.ts │ │ │ └── index.ts │ │ ├── useForm.ts │ │ └── utils/ │ │ ├── asyncUtil.ts │ │ ├── messages.ts │ │ ├── typeUtil.ts │ │ ├── useDebounce.ts │ │ ├── validateUtil.ts │ │ └── valueUtil.ts │ ├── grid/ │ │ ├── Col.tsx │ │ ├── Row.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── flex-align.vue │ │ │ ├── flex-order.vue │ │ │ ├── flex-stretch.vue │ │ │ ├── flex.vue │ │ │ ├── gutter.vue │ │ │ ├── index.vue │ │ │ ├── offset.vue │ │ │ ├── playfround.vue │ │ │ ├── responsive-more.vue │ │ │ ├── responsive.vue │ │ │ ├── sort.vue │ │ │ └── use-breakpoint.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── icon/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ └── demo.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── custom.vue │ │ │ ├── iconfont.vue │ │ │ ├── index.vue │ │ │ └── two-tone.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ └── index.zh-CN.md │ ├── image/ │ │ ├── PreviewGroup.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── controlled-preview.vue │ │ │ ├── fallback.vue │ │ │ ├── index.vue │ │ │ ├── placeholder.vue │ │ │ ├── preview-group-visible.vue │ │ │ ├── preview-group.vue │ │ │ └── preview-src.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── index.ts │ ├── input/ │ │ ├── ClearableLabeledInput.tsx │ │ ├── Group.tsx │ │ ├── Input.tsx │ │ ├── Password.tsx │ │ ├── ResizableTextArea.tsx │ │ ├── Search.tsx │ │ ├── TextArea.tsx │ │ ├── __tests__/ │ │ │ ├── Search.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Search.test.js.snap │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── calculateNodeHeight.tsx │ │ ├── demo/ │ │ │ ├── addon.vue │ │ │ ├── allow-clear.vue │ │ │ ├── autosize-textarea.vue │ │ │ ├── basic.vue │ │ │ ├── borderless.vue │ │ │ ├── group.vue │ │ │ ├── index.vue │ │ │ ├── password-input.vue │ │ │ ├── presuffix.vue │ │ │ ├── search-input-loading.vue │ │ │ ├── search-input.vue │ │ │ ├── show-count.vue │ │ │ ├── size.vue │ │ │ ├── status.vue │ │ │ ├── textarea.vue │ │ │ └── tooltip.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── inputProps.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── util.ts │ ├── input-number/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── addon.vue │ │ │ ├── basic.vue │ │ │ ├── borderless.vue │ │ │ ├── digit.vue │ │ │ ├── disabled.vue │ │ │ ├── formatter.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── keyboard.vue │ │ │ ├── out-of-range.vue │ │ │ ├── prefix.vue │ │ │ ├── size.vue │ │ │ └── status.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── src/ │ │ │ ├── InputNumber.tsx │ │ │ ├── StepHandler.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useCursor.ts │ │ │ │ └── useFrame.ts │ │ │ └── utils/ │ │ │ ├── MiniDecimal.ts │ │ │ ├── numberUtil.ts │ │ │ └── supportUtil.ts │ │ └── style/ │ │ └── index.tsx │ ├── layout/ │ │ ├── Sider.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── custom-trigger.vue │ │ │ ├── fixed-sider.vue │ │ │ ├── fixed.vue │ │ │ ├── index.vue │ │ │ ├── responsive.vue │ │ │ ├── side.vue │ │ │ ├── top-side-2.vue │ │ │ ├── top-side.vue │ │ │ └── top.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── injectionKey.ts │ │ ├── layout.tsx │ │ └── style/ │ │ ├── index.ts │ │ └── light.ts │ ├── list/ │ │ ├── Item.tsx │ │ ├── ItemMeta.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── empty.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── empty.test.js │ │ │ ├── index.test.js │ │ │ └── loading.test.js │ │ ├── contextKey.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── grid.vue │ │ │ ├── index.vue │ │ │ ├── loadmore.vue │ │ │ ├── resposive.vue │ │ │ ├── simple.vue │ │ │ └── vertical.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── locale/ │ │ ├── LocaleReceiver.tsx │ │ ├── ar_EG.ts │ │ ├── az_AZ.ts │ │ ├── bg_BG.ts │ │ ├── bn_BD.ts │ │ ├── by_BY.ts │ │ ├── ca_ES.ts │ │ ├── ckb_IQ.ts │ │ ├── cs_CZ.ts │ │ ├── da_DK.ts │ │ ├── de_DE.ts │ │ ├── el_GR.ts │ │ ├── en_GB.ts │ │ ├── en_US.ts │ │ ├── es_ES.ts │ │ ├── et_EE.ts │ │ ├── fa_IR.ts │ │ ├── fi_FI.ts │ │ ├── fr_BE.ts │ │ ├── fr_CA.ts │ │ ├── fr_FR.ts │ │ ├── ga_IE.ts │ │ ├── gl_ES.ts │ │ ├── he_IL.ts │ │ ├── hi_IN.ts │ │ ├── hr_HR.ts │ │ ├── hu_HU.ts │ │ ├── hy_AM.ts │ │ ├── id_ID.ts │ │ ├── index.tsx │ │ ├── is_IS.ts │ │ ├── it_IT.ts │ │ ├── ja_JP.ts │ │ ├── ka_GE.ts │ │ ├── kk_KZ.ts │ │ ├── km_KH.ts │ │ ├── kmr_IQ.ts │ │ ├── kn_IN.ts │ │ ├── ko_KR.ts │ │ ├── ku_IQ.ts │ │ ├── lt_LT.ts │ │ ├── lv_LV.ts │ │ ├── mk_MK.ts │ │ ├── ml_IN.ts │ │ ├── mn_MN.ts │ │ ├── ms_MY.ts │ │ ├── nb_NO.ts │ │ ├── ne_NP.ts │ │ ├── nl_BE.ts │ │ ├── nl_NL.ts │ │ ├── pl_PL.ts │ │ ├── pt_BR.ts │ │ ├── pt_PT.ts │ │ ├── ro_RO.ts │ │ ├── ru_RU.ts │ │ ├── sk_SK.ts │ │ ├── sl_SI.ts │ │ ├── sr_RS.ts │ │ ├── sv_SE.ts │ │ ├── ta_IN.ts │ │ ├── th_TH.ts │ │ ├── tr_TR.ts │ │ ├── uk_UA.ts │ │ ├── ur_PK.ts │ │ ├── vi_VN.ts │ │ ├── zh_CN.ts │ │ ├── zh_HK.ts │ │ └── zh_TW.ts │ ├── locale-provider/ │ │ ├── LocaleReceiver.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── index.test.js.snap │ │ │ └── index.test.js │ │ └── index.ts │ ├── mentions/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── async.vue │ │ │ ├── basic.vue │ │ │ ├── form.vue │ │ │ ├── index.vue │ │ │ ├── placement.vue │ │ │ ├── prefix.vue │ │ │ ├── readonly.vue │ │ │ └── status.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── menu/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── horizontal.vue │ │ │ ├── index.vue │ │ │ ├── inline-collapsed.vue │ │ │ ├── inline.vue │ │ │ ├── sider-current.vue │ │ │ ├── submenu-theme.vue │ │ │ ├── switch-mode.vue │ │ │ ├── theme.vue │ │ │ └── vertical.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── src/ │ │ │ ├── Divider.tsx │ │ │ ├── InlineSubMenuList.tsx │ │ │ ├── ItemGroup.tsx │ │ │ ├── Menu.tsx │ │ │ ├── MenuItem.tsx │ │ │ ├── OverrideContext.ts │ │ │ ├── PopupTrigger.tsx │ │ │ ├── SubMenu.tsx │ │ │ ├── SubMenuList.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useDirectionStyle.ts │ │ │ │ ├── useItems.tsx │ │ │ │ ├── useKeyPath.ts │ │ │ │ └── useMenuContext.ts │ │ │ ├── interface.ts │ │ │ └── placements.ts │ │ └── style/ │ │ ├── horizontal.ts │ │ ├── index.ts │ │ ├── rtl.ts │ │ ├── theme.ts │ │ └── vertical.ts │ ├── message/ │ │ ├── PurePanel.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── custom-style.vue │ │ │ ├── duration.vue │ │ │ ├── hook.vue │ │ │ ├── index.vue │ │ │ ├── info.vue │ │ │ ├── loading.vue │ │ │ ├── other.vue │ │ │ ├── thenable.vue │ │ │ └── update.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── useMessage.tsx │ ├── modal/ │ │ ├── ConfirmDialog.tsx │ │ ├── Modal.tsx │ │ ├── __tests__/ │ │ │ ├── Modal.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Modal.test.js.snap │ │ │ │ └── demo.test.js.snap │ │ │ ├── confirm.test.js │ │ │ └── demo.test.js │ │ ├── confirm.tsx │ │ ├── demo/ │ │ │ ├── async.vue │ │ │ ├── basic.vue │ │ │ ├── button-props.vue │ │ │ ├── confirm-promise.vue │ │ │ ├── confirm-router.vue │ │ │ ├── confirm.vue │ │ │ ├── footer.vue │ │ │ ├── fullscreen.vue │ │ │ ├── hook-modal.vue │ │ │ ├── index.vue │ │ │ ├── info.vue │ │ │ ├── locale.vue │ │ │ ├── manual.vue │ │ │ ├── modal-render.vue │ │ │ ├── position.vue │ │ │ └── width.vue │ │ ├── destroyFns.ts │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── locale.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── useModal/ │ │ ├── HookModal.tsx │ │ └── index.tsx │ ├── notification/ │ │ ├── PurePanel.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── index.test.js │ │ │ └── placement.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── custom-icon.vue │ │ │ ├── custom-style.vue │ │ │ ├── duration.vue │ │ │ ├── hook.vue │ │ │ ├── index.vue │ │ │ ├── placement.vue │ │ │ ├── update.vue │ │ │ ├── with-btn.vue │ │ │ └── with-icon.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── style/ │ │ │ ├── index.ts │ │ │ └── placement.ts │ │ ├── useNotification.tsx │ │ └── util.ts │ ├── page-header/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── actions.vue │ │ │ ├── basic.vue │ │ │ ├── breadcrumb.vue │ │ │ ├── content.vue │ │ │ ├── ghost.vue │ │ │ ├── index.vue │ │ │ └── responsive.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── pagination/ │ │ ├── Pagination.tsx │ │ ├── Select.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── changer.vue │ │ │ ├── custom-changer.vue │ │ │ ├── index.vue │ │ │ ├── itemRender.vue │ │ │ ├── jump.vue │ │ │ ├── mini.vue │ │ │ ├── more.vue │ │ │ ├── simple.vue │ │ │ └── total.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── popconfirm/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── dynamic-trigger.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── local.vue │ │ │ ├── placement.vue │ │ │ └── promise.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── popover/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── arrow-point-at-center.vue │ │ │ ├── basic.vue │ │ │ ├── control.vue │ │ │ ├── hover-with-click.vue │ │ │ ├── index.vue │ │ │ ├── placement.vue │ │ │ └── triggerType.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── progress/ │ │ ├── Circle.tsx │ │ ├── Line.tsx │ │ ├── Steps.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── circle-dynamic.vue │ │ │ ├── circle-micro.vue │ │ │ ├── circle-mini.vue │ │ │ ├── circle.vue │ │ │ ├── dashboard.vue │ │ │ ├── dynamic.vue │ │ │ ├── format.vue │ │ │ ├── gradient-line.vue │ │ │ ├── index.vue │ │ │ ├── line-mini.vue │ │ │ ├── line.vue │ │ │ ├── linecap.vue │ │ │ ├── segment.vue │ │ │ ├── size.vue │ │ │ └── steps.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── progress.tsx │ │ ├── props.ts │ │ ├── style/ │ │ │ └── index.ts │ │ └── utils.ts │ ├── qrcode/ │ │ ├── QRCode.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── base.vue │ │ │ ├── customColor.vue │ │ │ ├── customSize.vue │ │ │ ├── customType.vue │ │ │ ├── download.vue │ │ │ ├── errorLevel.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── popover.vue │ │ │ └── status.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── qrcodegen.ts │ │ └── style/ │ │ └── index.ts │ ├── radio/ │ │ ├── Group.tsx │ │ ├── Radio.tsx │ │ ├── RadioButton.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ ├── group.test.js.snap │ │ │ │ └── radio.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── group.test.js │ │ │ └── radio.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── disabled.vue │ │ │ ├── index.vue │ │ │ ├── radioButton-solid.vue │ │ │ ├── radioButton.vue │ │ │ ├── radioGroup-more.vue │ │ │ ├── radioGroup-options.vue │ │ │ ├── radioGroup-with-name.vue │ │ │ ├── radioGroup.vue │ │ │ └── size.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ └── style/ │ │ └── index.tsx │ ├── rate/ │ │ ├── Star.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── character.vue │ │ │ ├── clear.vue │ │ │ ├── disabled.vue │ │ │ ├── half.vue │ │ │ ├── index.vue │ │ │ └── text.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ └── index.ts │ │ └── util.ts │ ├── result/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── 403.vue │ │ │ ├── 404.vue │ │ │ ├── 500.vue │ │ │ ├── customIcon.vue │ │ │ ├── error.vue │ │ │ ├── index.vue │ │ │ ├── info.vue │ │ │ ├── success.vue │ │ │ └── warning.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── noFound.tsx │ │ ├── serverError.tsx │ │ ├── style/ │ │ │ └── index.tsx │ │ └── unauthorized.tsx │ ├── row/ │ │ ├── index.ts │ │ └── style/ │ │ └── index.ts │ ├── segmented/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── block.vue │ │ │ ├── custom.vue │ │ │ ├── disabled.vue │ │ │ ├── dynamic.vue │ │ │ ├── index.vue │ │ │ └── size.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── src/ │ │ │ ├── MotionThumb.tsx │ │ │ ├── index.ts │ │ │ └── segmented.tsx │ │ └── style/ │ │ └── index.ts │ ├── select/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── automatic-tokenization.vue │ │ │ ├── basic.vue │ │ │ ├── big-data.vue │ │ │ ├── coordinate.vue │ │ │ ├── custom-dropdown-menu.vue │ │ │ ├── field-names.vue │ │ │ ├── hide-selected.vue │ │ │ ├── index.vue │ │ │ ├── label-in-value.vue │ │ │ ├── multiple.vue │ │ │ ├── optgroup.vue │ │ │ ├── option-label-prop.vue │ │ │ ├── placement.vue │ │ │ ├── responsive.vue │ │ │ ├── search-box.vue │ │ │ ├── search.vue │ │ │ ├── select-users.vue │ │ │ ├── size.vue │ │ │ ├── status.vue │ │ │ ├── suffix.vue │ │ │ └── tags.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ ├── dropdown.ts │ │ │ ├── index.ts │ │ │ ├── multiple.ts │ │ │ └── single.ts │ │ └── utils/ │ │ └── iconUtil.tsx │ ├── skeleton/ │ │ ├── Avatar.tsx │ │ ├── Button.tsx │ │ ├── Element.tsx │ │ ├── Image.tsx │ │ ├── Input.tsx │ │ ├── Paragraph.tsx │ │ ├── Skeleton.tsx │ │ ├── Title.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── active.vue │ │ │ ├── basic.vue │ │ │ ├── children.vue │ │ │ ├── complex.vue │ │ │ ├── element.vue │ │ │ ├── index.vue │ │ │ └── list.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── slider/ │ │ ├── SliderTooltip.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── event.vue │ │ │ ├── icon-slider.vue │ │ │ ├── index.vue │ │ │ ├── input-number.vue │ │ │ ├── mark.vue │ │ │ ├── reverse.vue │ │ │ ├── show-tooltip.vue │ │ │ ├── tip-formatter.vue │ │ │ └── vertical.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── space/ │ │ ├── Compact.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── align.vue │ │ │ ├── base.vue │ │ │ ├── compact-button-vertical.vue │ │ │ ├── compact-buttons.vue │ │ │ ├── compact.vue │ │ │ ├── customize.vue │ │ │ ├── index.vue │ │ │ ├── size.vue │ │ │ ├── split.vue │ │ │ ├── vertical.vue │ │ │ └── wrap.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ ├── compact.tsx │ │ └── index.tsx │ ├── spin/ │ │ ├── Spin.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── delay.test.js │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── custom-indicator.vue │ │ │ ├── delay.vue │ │ │ ├── index.vue │ │ │ ├── inside.vue │ │ │ ├── nested.vue │ │ │ ├── size.vue │ │ │ └── tip.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── statistic/ │ │ ├── Countdown.tsx │ │ ├── Number.tsx │ │ ├── Statistic.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── card.vue │ │ │ ├── countdown-slot.vue │ │ │ ├── countdown.vue │ │ │ ├── index.vue │ │ │ └── unit.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ └── index.tsx │ │ └── utils.ts │ ├── steps/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── clickable.vue │ │ │ ├── customized-progress-dot.vue │ │ │ ├── error.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── inline.vue │ │ │ ├── label-placement.vue │ │ │ ├── nav.vue │ │ │ ├── progress-dot.vue │ │ │ ├── progress.vue │ │ │ ├── simple.vue │ │ │ ├── small-size.vue │ │ │ ├── step-next.vue │ │ │ ├── vertical-small.vue │ │ │ └── vertical.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ ├── custom-icon.ts │ │ ├── index.tsx │ │ ├── inline.ts │ │ ├── label-placement.ts │ │ ├── nav.ts │ │ ├── progress-dot.ts │ │ ├── progress.ts │ │ ├── rtl.ts │ │ ├── small.ts │ │ └── vertical.ts │ ├── style/ │ │ ├── compact-item-vertical.ts │ │ ├── compact-item.ts │ │ ├── index.ts │ │ ├── motion/ │ │ │ ├── collapse.ts │ │ │ ├── fade.ts │ │ │ ├── index.ts │ │ │ ├── motion.ts │ │ │ ├── move.ts │ │ │ ├── slide.ts │ │ │ └── zoom.ts │ │ ├── operationUnit.ts │ │ ├── placementArrow.ts │ │ ├── presetColor.tsx │ │ ├── reset.css │ │ └── roundedArrow.ts │ ├── switch/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── disabled.vue │ │ │ ├── index.vue │ │ │ ├── loading.vue │ │ │ ├── size.vue │ │ │ └── text.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── table/ │ │ ├── Column.tsx │ │ ├── ColumnGroup.tsx │ │ ├── ExpandIcon.tsx │ │ ├── Table.tsx │ │ ├── __tests__/ │ │ │ ├── Table.filter.test.js │ │ │ ├── Table.pagination.test.js │ │ │ ├── Table.rowSelection.test.js │ │ │ ├── Table.sorter.test.js │ │ │ ├── Table.test.js │ │ │ ├── __snapshots__/ │ │ │ │ ├── Table.filter.test.js.snap │ │ │ │ ├── Table.pagination.test.js.snap │ │ │ │ ├── Table.rowSelection.test.js.snap │ │ │ │ ├── Table.sorter.test.js.snap │ │ │ │ ├── Table.test.js.snap │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── empty.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── empty.test.js │ │ ├── context.ts │ │ ├── demo/ │ │ │ ├── ajax.vue │ │ │ ├── basic.vue │ │ │ ├── big-data.vue │ │ │ ├── bordered.vue │ │ │ ├── colspan-rowspan.vue │ │ │ ├── custom-filter-panel.vue │ │ │ ├── edit-cell.vue │ │ │ ├── edit-row.vue │ │ │ ├── ellipsis.vue │ │ │ ├── expand-children.vue │ │ │ ├── expand.vue │ │ │ ├── filter-in-tree.vue │ │ │ ├── filter-search.vue │ │ │ ├── fixed-columns-header.vue │ │ │ ├── fixed-columns.vue │ │ │ ├── fixed-header.vue │ │ │ ├── grouping-columns.vue │ │ │ ├── head.vue │ │ │ ├── index.vue │ │ │ ├── multiple-sorter.vue │ │ │ ├── nested-table.vue │ │ │ ├── order-column.vue │ │ │ ├── reset-filter.vue │ │ │ ├── resizable-column.vue │ │ │ ├── responsive.vue │ │ │ ├── row-selection-and-operation.vue │ │ │ ├── row-selection-custom.vue │ │ │ ├── row-selection.vue │ │ │ ├── size.vue │ │ │ ├── sticky.vue │ │ │ ├── stripe.vue │ │ │ ├── summary.vue │ │ │ └── template.vue │ │ ├── hooks/ │ │ │ ├── useColumns.tsx │ │ │ ├── useFilter/ │ │ │ │ ├── FilterDropdown.tsx │ │ │ │ ├── FilterSearch.tsx │ │ │ │ ├── FilterWrapper.tsx │ │ │ │ └── index.tsx │ │ │ ├── useLazyKVMap.ts │ │ │ ├── usePagination.ts │ │ │ ├── useSelection.tsx │ │ │ ├── useSorter.tsx │ │ │ └── useTitleColumns.tsx │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.tsx │ │ ├── style/ │ │ │ ├── bordered.ts │ │ │ ├── ellipsis.ts │ │ │ ├── empty.ts │ │ │ ├── expand.ts │ │ │ ├── filter.ts │ │ │ ├── fixed.ts │ │ │ ├── index.ts │ │ │ ├── pagination.ts │ │ │ ├── radius.ts │ │ │ ├── resize.ts │ │ │ ├── rtl.ts │ │ │ ├── selection.ts │ │ │ ├── size.ts │ │ │ ├── sorter.ts │ │ │ ├── sticky.ts │ │ │ └── summary.ts │ │ └── util.ts │ ├── tabs/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── card-top.vue │ │ │ ├── card.vue │ │ │ ├── centered.vue │ │ │ ├── custom-add-trigger.vue │ │ │ ├── custom-tab-bar.vue │ │ │ ├── disabled.vue │ │ │ ├── editable-card.vue │ │ │ ├── extra.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ ├── position.vue │ │ │ ├── size.vue │ │ │ └── slide.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── src/ │ │ │ ├── TabContext.ts │ │ │ ├── TabNavList/ │ │ │ │ ├── AddButton.tsx │ │ │ │ ├── OperationNode.tsx │ │ │ │ ├── TabNode.tsx │ │ │ │ └── index.tsx │ │ │ ├── TabPanelList/ │ │ │ │ ├── TabPane.tsx │ │ │ │ └── index.tsx │ │ │ ├── Tabs.tsx │ │ │ ├── hooks/ │ │ │ │ ├── useOffsets.ts │ │ │ │ ├── useRaf.ts │ │ │ │ ├── useSyncState.ts │ │ │ │ └── useTouchMove.ts │ │ │ ├── index.ts │ │ │ └── interface.ts │ │ └── style/ │ │ ├── index.ts │ │ └── motion.ts │ ├── tag/ │ │ ├── CheckableTag.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── border-less.vue │ │ │ ├── checkable.vue │ │ │ ├── colorful.vue │ │ │ ├── control.vue │ │ │ ├── hot-tags.vue │ │ │ ├── icon.vue │ │ │ ├── index.vue │ │ │ └── status.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.ts │ ├── theme/ │ │ ├── __tests__/ │ │ │ └── util.test.js │ │ ├── convertLegacyToken.ts │ │ ├── index.ts │ │ ├── interface/ │ │ │ ├── alias.ts │ │ │ ├── components.ts │ │ │ ├── index.ts │ │ │ ├── maps/ │ │ │ │ ├── colors.ts │ │ │ │ ├── font.ts │ │ │ │ ├── index.ts │ │ │ │ ├── size.ts │ │ │ │ └── style.ts │ │ │ ├── presetColors.ts │ │ │ └── seeds.ts │ │ ├── internal.ts │ │ ├── themes/ │ │ │ ├── ColorMap.ts │ │ │ ├── compact/ │ │ │ │ ├── genCompactSizeMapToken.ts │ │ │ │ └── index.ts │ │ │ ├── dark/ │ │ │ │ ├── colorAlgorithm.ts │ │ │ │ ├── colors.ts │ │ │ │ └── index.ts │ │ │ ├── default/ │ │ │ │ ├── colorAlgorithm.ts │ │ │ │ ├── colors.ts │ │ │ │ └── index.ts │ │ │ ├── seed.ts │ │ │ └── shared/ │ │ │ ├── genColorMapToken.ts │ │ │ ├── genCommonMapToken.ts │ │ │ ├── genControlHeight.ts │ │ │ ├── genFontMapToken.ts │ │ │ ├── genFontSizes.ts │ │ │ ├── genRadius.ts │ │ │ └── genSizeMapToken.ts │ │ └── util/ │ │ ├── alias.ts │ │ ├── genComponentStyleHook.ts │ │ ├── getAlphaColor.ts │ │ └── statistic.ts │ ├── time-picker/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── index.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── date-fns.tsx │ │ ├── dayjs.tsx │ │ ├── demo/ │ │ │ ├── 12hours.vue │ │ │ ├── addon.vue │ │ │ ├── basic.vue │ │ │ ├── bordered.vue │ │ │ ├── disabled.vue │ │ │ ├── hide-column.vue │ │ │ ├── index.vue │ │ │ ├── interval-options.vue │ │ │ ├── placement.vue │ │ │ ├── range-picker.vue │ │ │ ├── size.vue │ │ │ ├── status.vue │ │ │ ├── suffix.vue │ │ │ └── value.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── locale/ │ │ │ ├── ar_EG.ts │ │ │ ├── az_AZ.ts │ │ │ ├── bg_BG.ts │ │ │ ├── bn_BD.ts │ │ │ ├── by_BY.ts │ │ │ ├── ca_ES.ts │ │ │ ├── ckb_IQ.ts │ │ │ ├── cs_CZ.ts │ │ │ ├── da_DK.ts │ │ │ ├── de_DE.ts │ │ │ ├── el_GR.ts │ │ │ ├── en_GB.ts │ │ │ ├── en_US.ts │ │ │ ├── es_ES.ts │ │ │ ├── et_EE.ts │ │ │ ├── fa_IR.ts │ │ │ ├── fi_FI.ts │ │ │ ├── fr_BE.ts │ │ │ ├── fr_CA.ts │ │ │ ├── fr_FR.ts │ │ │ ├── ga_IE.ts │ │ │ ├── gl_ES.ts │ │ │ ├── he_IL.ts │ │ │ ├── hi_IN.ts │ │ │ ├── hr_HR.ts │ │ │ ├── hu_HU.ts │ │ │ ├── id_ID.ts │ │ │ ├── is_IS.ts │ │ │ ├── it_IT.ts │ │ │ ├── ja_JP.ts │ │ │ ├── ka_GE.ts │ │ │ ├── kk_KZ.ts │ │ │ ├── km_KH.ts │ │ │ ├── kmr_IQ.ts │ │ │ ├── kn_IN.ts │ │ │ ├── ko_KR.ts │ │ │ ├── lt_LT.ts │ │ │ ├── lv_LV.ts │ │ │ ├── mk_MK.ts │ │ │ ├── ml_IN.ts │ │ │ ├── mn_MN.ts │ │ │ ├── ms_MY.ts │ │ │ ├── nb_NO.ts │ │ │ ├── nl_BE.ts │ │ │ ├── nl_NL.ts │ │ │ ├── pl_PL.ts │ │ │ ├── pt_BR.ts │ │ │ ├── pt_PT.ts │ │ │ ├── ro_RO.ts │ │ │ ├── ru_RU.ts │ │ │ ├── sk_SK.ts │ │ │ ├── sl_SI.ts │ │ │ ├── sr_RS.ts │ │ │ ├── sv_SE.ts │ │ │ ├── ta_IN.ts │ │ │ ├── th_TH.ts │ │ │ ├── tr_TR.ts │ │ │ ├── uk_UA.ts │ │ │ ├── ur_PK.ts │ │ │ ├── vi_VN.ts │ │ │ ├── zh_CN.ts │ │ │ └── zh_TW.ts │ │ ├── moment.tsx │ │ └── time-picker.tsx │ ├── timeline/ │ │ ├── Timeline.tsx │ │ ├── TimelineItem.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── alternate.vue │ │ │ ├── basic.vue │ │ │ ├── color.vue │ │ │ ├── custom.vue │ │ │ ├── index.vue │ │ │ ├── label.vue │ │ │ ├── pending.vue │ │ │ └── right.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── tooltip/ │ │ ├── Tooltip.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── tooltip.test.js │ │ ├── abstractTooltipProps.ts │ │ ├── demo/ │ │ │ ├── arrow-point-at-center.vue │ │ │ ├── arrow.vue │ │ │ ├── auto-adjust-overflow.vue │ │ │ ├── basic.vue │ │ │ ├── color.vue │ │ │ ├── index.vue │ │ │ └── placement.vue │ │ ├── index.en-US.md │ │ ├── index.ts │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ └── index.ts │ │ └── util.ts │ ├── tour/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── index.vue │ │ │ ├── indicator.vue │ │ │ ├── mask.vue │ │ │ ├── non-modal.vue │ │ │ └── placement.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── panelRender.tsx │ │ ├── style/ │ │ │ └── index.ts │ │ └── useMergedType.ts │ ├── transfer/ │ │ ├── ListBody.tsx │ │ ├── ListItem.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ ├── index.test.js.snap │ │ │ │ ├── list.test.js.snap │ │ │ │ └── search.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── index.test.js │ │ │ ├── list.test.js │ │ │ └── search.test.js │ │ ├── demo/ │ │ │ ├── advanced.vue │ │ │ ├── basic.vue │ │ │ ├── custom-item.vue │ │ │ ├── custom-select-all-labels.vue │ │ │ ├── index.vue │ │ │ ├── oneway.vue │ │ │ ├── pagination.vue │ │ │ ├── search.vue │ │ │ ├── status.vue │ │ │ ├── table-transfer.vue │ │ │ └── tree-transfer.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.ts │ │ ├── list.tsx │ │ ├── operation.tsx │ │ ├── search.tsx │ │ └── style/ │ │ └── index.tsx │ ├── tree/ │ │ ├── DirectoryTree.tsx │ │ ├── Tree.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── util.test.js │ │ ├── breakchange.md │ │ ├── demo/ │ │ │ ├── accordion.vue │ │ │ ├── basic.vue │ │ │ ├── context-menu.vue │ │ │ ├── customized-icon.vue │ │ │ ├── directory.vue │ │ │ ├── draggable.vue │ │ │ ├── dynamic.vue │ │ │ ├── index.vue │ │ │ ├── line.vue │ │ │ ├── replaceFields.vue │ │ │ ├── search.vue │ │ │ ├── switcher-icon.vue │ │ │ └── virtual-scroll.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ └── index.ts │ │ └── utils/ │ │ ├── dictUtil.ts │ │ ├── dropIndicator.tsx │ │ └── iconUtil.tsx │ ├── tree-select/ │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── async.vue │ │ │ ├── basic.vue │ │ │ ├── checkable.vue │ │ │ ├── custom-tag-render.vue │ │ │ ├── highlight.vue │ │ │ ├── index.vue │ │ │ ├── multiple.vue │ │ │ ├── placement.vue │ │ │ ├── replaceFields.vue │ │ │ ├── status.vue │ │ │ ├── suffix.vue │ │ │ ├── tree-line.vue │ │ │ └── virtual-scroll.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ └── style/ │ │ └── index.tsx │ ├── typography/ │ │ ├── Base.tsx │ │ ├── Editable.tsx │ │ ├── Link.tsx │ │ ├── Paragraph.tsx │ │ ├── Text.tsx │ │ ├── Title.tsx │ │ ├── Typography.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ └── demo.test.js.snap │ │ │ ├── demo.test.js │ │ │ └── index.test.js │ │ ├── demo/ │ │ │ ├── basic.vue │ │ │ ├── ellipsis.vue │ │ │ ├── index.vue │ │ │ ├── interactive.vue │ │ │ ├── suffix.vue │ │ │ ├── text.vue │ │ │ └── title.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── style/ │ │ │ ├── index.tsx │ │ │ └── mixins.tsx │ │ └── util.tsx │ ├── upload/ │ │ ├── Dragger.tsx │ │ ├── Upload.tsx │ │ ├── UploadList/ │ │ │ ├── ListItem.tsx │ │ │ └── index.tsx │ │ ├── __tests__/ │ │ │ ├── __snapshots__/ │ │ │ │ ├── demo.test.js.snap │ │ │ │ └── uploadlist.test.js.snap │ │ │ ├── demo.test.js │ │ │ ├── mock.js │ │ │ ├── requests.js │ │ │ ├── upload.test.js │ │ │ └── uploadlist.test.js │ │ ├── demo/ │ │ │ ├── avatar.vue │ │ │ ├── basic.vue │ │ │ ├── custom-render.vue │ │ │ ├── customize-progress-bar.vue │ │ │ ├── defaultFileList.vue │ │ │ ├── directory.vue │ │ │ ├── drag.vue │ │ │ ├── fileList.vue │ │ │ ├── index.vue │ │ │ ├── max-count.vue │ │ │ ├── picture-card.vue │ │ │ ├── picture-style.vue │ │ │ ├── preview-file.vue │ │ │ ├── transform-file.vue │ │ │ ├── upload-custom-action-icon.vue │ │ │ ├── upload-manually.vue │ │ │ └── upload-png-only.vue │ │ ├── index.en-US.md │ │ ├── index.tsx │ │ ├── index.zh-CN.md │ │ ├── interface.tsx │ │ ├── style/ │ │ │ ├── dragger.ts │ │ │ ├── index.ts │ │ │ ├── list.ts │ │ │ ├── motion.ts │ │ │ ├── picture.ts │ │ │ └── rtl.ts │ │ └── utils.tsx │ ├── vc-align/ │ │ ├── Align.tsx │ │ ├── hooks/ │ │ │ └── useBuffer.tsx │ │ ├── index.ts │ │ ├── interface.ts │ │ └── util.ts │ ├── vc-cascader/ │ │ ├── Cascader.tsx │ │ ├── OptionList/ │ │ │ ├── Checkbox.tsx │ │ │ ├── Column.tsx │ │ │ ├── index.tsx │ │ │ ├── useActive.ts │ │ │ └── useKeyboard.ts │ │ ├── context.ts │ │ ├── hooks/ │ │ │ ├── useDisplayValues.ts │ │ │ ├── useEntities.ts │ │ │ ├── useMissingValues.ts │ │ │ ├── useSearchConfig.ts │ │ │ └── useSearchOptions.ts │ │ ├── index.tsx │ │ └── utils/ │ │ ├── commonUtil.ts │ │ └── treeUtil.ts │ ├── vc-checkbox/ │ │ └── Checkbox.tsx │ ├── vc-dialog/ │ │ ├── Content.tsx │ │ ├── Dialog.tsx │ │ ├── DialogWrap.tsx │ │ ├── IDialogPropTypes.ts │ │ ├── Mask.tsx │ │ ├── index.ts │ │ └── util.ts │ ├── vc-drawer/ │ │ ├── index.ts │ │ └── src/ │ │ ├── DrawerChild.tsx │ │ ├── DrawerWrapper.tsx │ │ ├── IDrawerPropTypes.ts │ │ └── utils.ts │ ├── vc-dropdown/ │ │ ├── Dropdown.tsx │ │ ├── index.ts │ │ └── placements.ts │ ├── vc-image/ │ │ ├── index.ts │ │ └── src/ │ │ ├── Image.tsx │ │ ├── Preview.tsx │ │ ├── PreviewGroup.tsx │ │ ├── getFixScaleEleTransPosition.ts │ │ └── hooks/ │ │ └── useFrameSetState.ts │ ├── vc-input/ │ │ ├── BaseInput.tsx │ │ ├── Input.tsx │ │ ├── inputProps.ts │ │ └── utils/ │ │ ├── commonUtils.ts │ │ └── types.ts │ ├── vc-mentions/ │ │ ├── index.ts │ │ └── src/ │ │ ├── DropdownMenu.tsx │ │ ├── KeywordTrigger.tsx │ │ ├── Mentions.tsx │ │ ├── MentionsContext.ts │ │ ├── Option.tsx │ │ ├── mentionsProps.ts │ │ └── util.ts │ ├── vc-notification/ │ │ ├── HookNotification.tsx │ │ ├── Notice.tsx │ │ ├── Notification.tsx │ │ ├── index.ts │ │ └── useNotification.tsx │ ├── vc-overflow/ │ │ ├── Item.tsx │ │ ├── Overflow.tsx │ │ ├── RawItem.tsx │ │ ├── context.ts │ │ └── index.ts │ ├── vc-pagination/ │ │ ├── KeyCode.ts │ │ ├── Options.tsx │ │ ├── Pager.tsx │ │ ├── Pagination.tsx │ │ ├── index.ts │ │ └── locale/ │ │ ├── ar_EG.ts │ │ ├── az_AZ.ts │ │ ├── bg_BG.ts │ │ ├── bn_BD.ts │ │ ├── by_BY.ts │ │ ├── ca_ES.ts │ │ ├── ckb_IQ.ts │ │ ├── cs_CZ.ts │ │ ├── da_DK.ts │ │ ├── de_DE.ts │ │ ├── el_GR.ts │ │ ├── en_GB.ts │ │ ├── en_US.ts │ │ ├── es_ES.ts │ │ ├── et_EE.ts │ │ ├── fa_IR.ts │ │ ├── fi_FI.ts │ │ ├── fr_BE.ts │ │ ├── fr_CA.ts │ │ ├── fr_FR.ts │ │ ├── ga_IE.ts │ │ ├── gl_ES.ts │ │ ├── he_IL.ts │ │ ├── hi_IN.ts │ │ ├── hr_HR.ts │ │ ├── hu_HU.ts │ │ ├── id_ID.ts │ │ ├── is_IS.ts │ │ ├── it_IT.ts │ │ ├── ja_JP.ts │ │ ├── ka_GE.ts │ │ ├── kk_KZ.ts │ │ ├── km_KH.ts │ │ ├── kmr_IQ.ts │ │ ├── kn_IN.ts │ │ ├── ko_KR.ts │ │ ├── lt_LT.ts │ │ ├── lv_LV.ts │ │ ├── mk_MK.ts │ │ ├── ml_IN.ts │ │ ├── mm_MM.ts │ │ ├── mn_MN.ts │ │ ├── ms_MY.ts │ │ ├── nb_NO.ts │ │ ├── nl_BE.ts │ │ ├── nl_NL.ts │ │ ├── pa_IN.ts │ │ ├── pb_IN.ts │ │ ├── pl_PL.ts │ │ ├── pt_BR.ts │ │ ├── pt_PT.ts │ │ ├── ro_RO.ts │ │ ├── ru_RU.ts │ │ ├── sk_SK.ts │ │ ├── sl_SI.ts │ │ ├── sr_RS.ts │ │ ├── sv_SE.ts │ │ ├── ta_IN.ts │ │ ├── th_TH.ts │ │ ├── tr_TR.ts │ │ ├── ug_CN.ts │ │ ├── uk_UA.ts │ │ ├── ur_PK.ts │ │ ├── vi_VN.ts │ │ ├── zh_CN.ts │ │ └── zh_TW.ts │ ├── vc-picker/ │ │ ├── PanelContext.tsx │ │ ├── Picker.tsx │ │ ├── PickerPanel.tsx │ │ ├── PickerTrigger.tsx │ │ ├── PresetPanel.tsx │ │ ├── RangeContext.tsx │ │ ├── RangePicker.tsx │ │ ├── generate/ │ │ │ ├── dateFns.ts │ │ │ ├── dayjs.ts │ │ │ ├── index.ts │ │ │ └── moment.ts │ │ ├── hooks/ │ │ │ ├── useCellClassName.ts │ │ │ ├── useHoverValue.ts │ │ │ ├── useMergeProps.ts │ │ │ ├── usePickerInput.ts │ │ │ ├── usePresets.ts │ │ │ ├── useRangeDisabled.ts │ │ │ ├── useRangeViewDates.ts │ │ │ ├── useTextValueMapping.ts │ │ │ └── useValueTexts.ts │ │ ├── index.tsx │ │ ├── interface.ts │ │ ├── locale/ │ │ │ ├── ar_EG.ts │ │ │ ├── az_AZ.ts │ │ │ ├── bg_BG.ts │ │ │ ├── bn_BD.ts │ │ │ ├── by_BY.ts │ │ │ ├── ca_ES.ts │ │ │ ├── ckb_IQ.ts │ │ │ ├── cs_CZ.ts │ │ │ ├── da_DK.ts │ │ │ ├── de_DE.ts │ │ │ ├── el_GR.ts │ │ │ ├── en_GB.ts │ │ │ ├── en_US.ts │ │ │ ├── es_ES.ts │ │ │ ├── es_MX.ts │ │ │ ├── et_EE.ts │ │ │ ├── fa_IR.ts │ │ │ ├── fi_FI.ts │ │ │ ├── fr_BE.ts │ │ │ ├── fr_CA.ts │ │ │ ├── fr_FR.ts │ │ │ ├── ga_IE.ts │ │ │ ├── gl_ES.ts │ │ │ ├── he_IL.ts │ │ │ ├── hi_IN.ts │ │ │ ├── hr_HR.ts │ │ │ ├── hu_HU.ts │ │ │ ├── id_ID.ts │ │ │ ├── is_IS.ts │ │ │ ├── it_IT.ts │ │ │ ├── ja_JP.ts │ │ │ ├── ka_GE.ts │ │ │ ├── kk_KZ.ts │ │ │ ├── km_KH.ts │ │ │ ├── kmr_IQ.ts │ │ │ ├── kn_IN.ts │ │ │ ├── ko_KR.ts │ │ │ ├── lt_LT.ts │ │ │ ├── lv_LV.ts │ │ │ ├── mk_MK.ts │ │ │ ├── ml_IN.ts │ │ │ ├── mm_MM.ts │ │ │ ├── mn_MN.ts │ │ │ ├── ms_MY.ts │ │ │ ├── nb_NO.ts │ │ │ ├── nl_BE.ts │ │ │ ├── nl_NL.ts │ │ │ ├── pl_PL.ts │ │ │ ├── pt_BR.ts │ │ │ ├── pt_PT.ts │ │ │ ├── ro_RO.ts │ │ │ ├── ru_RU.ts │ │ │ ├── sk_SK.ts │ │ │ ├── sl_SI.ts │ │ │ ├── sr_RS.ts │ │ │ ├── sv_SE.ts │ │ │ ├── ta_IN.ts │ │ │ ├── th_TH.ts │ │ │ ├── tr_TR.ts │ │ │ ├── ug_CN.ts │ │ │ ├── uk_UA.ts │ │ │ ├── ur_PK.ts │ │ │ ├── vi_VN.ts │ │ │ ├── zh_CN.ts │ │ │ └── zh_TW.ts │ │ ├── panels/ │ │ │ ├── DatePanel/ │ │ │ │ ├── DateBody.tsx │ │ │ │ ├── DateHeader.tsx │ │ │ │ └── index.tsx │ │ │ ├── DatetimePanel/ │ │ │ │ └── index.tsx │ │ │ ├── DecadePanel/ │ │ │ │ ├── DecadeBody.tsx │ │ │ │ ├── DecadeHeader.tsx │ │ │ │ └── index.tsx │ │ │ ├── Header.tsx │ │ │ ├── MonthPanel/ │ │ │ │ ├── MonthBody.tsx │ │ │ │ ├── MonthHeader.tsx │ │ │ │ └── index.tsx │ │ │ ├── PanelBody.tsx │ │ │ ├── QuarterPanel/ │ │ │ │ ├── QuarterBody.tsx │ │ │ │ ├── QuarterHeader.tsx │ │ │ │ └── index.tsx │ │ │ ├── TimePanel/ │ │ │ │ ├── TimeBody.tsx │ │ │ │ ├── TimeHeader.tsx │ │ │ │ ├── TimeUnitColumn.tsx │ │ │ │ └── index.tsx │ │ │ ├── WeekPanel/ │ │ │ │ └── index.tsx │ │ │ └── YearPanel/ │ │ │ ├── YearBody.tsx │ │ │ ├── YearHeader.tsx │ │ │ └── index.tsx │ │ └── utils/ │ │ ├── dateUtil.ts │ │ ├── getExtraFooter.tsx │ │ ├── getRanges.tsx │ │ ├── miscUtil.ts │ │ ├── timeUtil.ts │ │ ├── uiUtil.ts │ │ └── warnUtil.ts │ ├── vc-progress/ │ │ ├── index.ts │ │ └── src/ │ │ ├── Circle.tsx │ │ ├── Line.tsx │ │ ├── common.ts │ │ ├── index.ts │ │ └── types.ts │ ├── vc-resize-observer/ │ │ └── index.tsx │ ├── vc-select/ │ │ ├── BaseSelect.tsx │ │ ├── OptGroup.tsx │ │ ├── Option.tsx │ │ ├── OptionList.tsx │ │ ├── Select.tsx │ │ ├── SelectContext.ts │ │ ├── SelectTrigger.tsx │ │ ├── Selector/ │ │ │ ├── Input.tsx │ │ │ ├── MultipleSelector.tsx │ │ │ ├── SingleSelector.tsx │ │ │ ├── index.tsx │ │ │ └── interface.ts │ │ ├── TransBtn.tsx │ │ ├── hooks/ │ │ │ ├── useBaseProps.ts │ │ │ ├── useCache.ts │ │ │ ├── useDelayReset.ts │ │ │ ├── useFilterOptions.ts │ │ │ ├── useId.ts │ │ │ ├── useLock.ts │ │ │ ├── useOptions.ts │ │ │ └── useSelectTriggerControl.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ └── utils/ │ │ ├── commonUtil.ts │ │ ├── keyUtil.ts │ │ ├── legacyUtil.ts │ │ ├── platformUtil.ts │ │ ├── valueUtil.ts │ │ └── warningPropsUtil.ts │ ├── vc-slick/ │ │ ├── arrows.jsx │ │ ├── default-props.js │ │ ├── dots.jsx │ │ ├── index.js │ │ ├── initial-state.js │ │ ├── inner-slider.jsx │ │ ├── slider.jsx │ │ ├── track.jsx │ │ └── utils/ │ │ └── innerSliderUtils.js │ ├── vc-slider/ │ │ ├── index.ts │ │ └── src/ │ │ ├── Handle.tsx │ │ ├── Range.tsx │ │ ├── Slider.tsx │ │ ├── common/ │ │ │ ├── Marks.tsx │ │ │ ├── Steps.tsx │ │ │ ├── Track.tsx │ │ │ └── createSlider.tsx │ │ ├── index.ts │ │ └── utils.ts │ ├── vc-steps/ │ │ ├── Step.tsx │ │ ├── Steps.tsx │ │ ├── index.ts │ │ └── interface.ts │ ├── vc-table/ │ │ ├── Body/ │ │ │ ├── BodyRow.tsx │ │ │ ├── ExpandedRow.tsx │ │ │ ├── MeasureCell.tsx │ │ │ └── index.tsx │ │ ├── Cell/ │ │ │ └── index.tsx │ │ ├── ColGroup.tsx │ │ ├── FixedHolder/ │ │ │ └── index.tsx │ │ ├── Footer/ │ │ │ ├── Cell.tsx │ │ │ ├── Row.tsx │ │ │ ├── Summary.tsx │ │ │ └── index.tsx │ │ ├── Header/ │ │ │ ├── DragHandle.tsx │ │ │ ├── Header.tsx │ │ │ └── HeaderRow.tsx │ │ ├── Panel/ │ │ │ └── index.tsx │ │ ├── Table.tsx │ │ ├── constant.ts │ │ ├── context/ │ │ │ ├── BodyContext.tsx │ │ │ ├── ExpandedRowContext.tsx │ │ │ ├── HoverContext.tsx │ │ │ ├── ResizeContext.tsx │ │ │ ├── StickyContext.tsx │ │ │ ├── SummaryContext.tsx │ │ │ └── TableContext.tsx │ │ ├── hooks/ │ │ │ ├── useColumns.tsx │ │ │ ├── useFlattenRecords.ts │ │ │ ├── useFrame.ts │ │ │ ├── useSticky.ts │ │ │ └── useStickyOffsets.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ ├── stickyScrollBar.tsx │ │ ├── sugar/ │ │ │ ├── Column.tsx │ │ │ └── ColumnGroup.tsx │ │ └── utils/ │ │ ├── expandUtil.tsx │ │ ├── fixUtil.ts │ │ ├── legacyUtil.ts │ │ └── valueUtil.tsx │ ├── vc-tooltip/ │ │ ├── index.ts │ │ └── src/ │ │ ├── Content.tsx │ │ ├── Tooltip.tsx │ │ └── placements.ts │ ├── vc-tour/ │ │ ├── Mask.tsx │ │ ├── Tour.tsx │ │ ├── TourStep/ │ │ │ ├── DefaultPanel.tsx │ │ │ └── index.tsx │ │ ├── hooks/ │ │ │ └── useTarget.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ ├── placements.tsx │ │ └── util.ts │ ├── vc-tree/ │ │ ├── DropIndicator.tsx │ │ ├── Indent.tsx │ │ ├── MotionTreeNode.tsx │ │ ├── NodeList.tsx │ │ ├── Tree.tsx │ │ ├── TreeNode.tsx │ │ ├── contextTypes.ts │ │ ├── index.ts │ │ ├── interface.tsx │ │ ├── props.ts │ │ ├── useMaxLevel.ts │ │ ├── util.tsx │ │ └── utils/ │ │ ├── conductUtil.ts │ │ ├── diffUtil.ts │ │ └── treeUtil.ts │ ├── vc-tree-select/ │ │ ├── LegacyContext.tsx │ │ ├── OptionList.tsx │ │ ├── TreeNode.tsx │ │ ├── TreeSelect.tsx │ │ ├── TreeSelectContext.ts │ │ ├── hooks/ │ │ │ ├── useCache.ts │ │ │ ├── useCheckedKeys.ts │ │ │ ├── useDataEntities.ts │ │ │ ├── useFilterTreeData.ts │ │ │ └── useTreeData.ts │ │ ├── index.tsx │ │ ├── interface.ts │ │ └── utils/ │ │ ├── legacyUtil.tsx │ │ ├── strategyUtil.ts │ │ ├── valueUtil.ts │ │ └── warningPropsUtil.ts │ ├── vc-trigger/ │ │ ├── Popup/ │ │ │ ├── Mask.tsx │ │ │ ├── MobilePopupInner.tsx │ │ │ ├── PopupInner.tsx │ │ │ ├── index.tsx │ │ │ ├── interface.ts │ │ │ ├── useStretchStyle.ts │ │ │ └── useVisibleStatus.ts │ │ ├── Trigger.tsx │ │ ├── context.ts │ │ ├── index.ts │ │ ├── interface.ts │ │ └── utils/ │ │ ├── alignUtil.ts │ │ └── motionUtil.ts │ ├── vc-upload/ │ │ ├── AjaxUploader.tsx │ │ ├── Upload.tsx │ │ ├── attr-accept.ts │ │ ├── index.ts │ │ ├── interface.tsx │ │ ├── request.ts │ │ ├── traverseFileTree.ts │ │ └── uid.ts │ ├── vc-util/ │ │ ├── Children/ │ │ │ └── toArray.ts │ │ ├── Dom/ │ │ │ ├── addEventListener.js │ │ │ ├── class.js │ │ │ ├── contains.ts │ │ │ ├── css.ts │ │ │ ├── dynamicCSS.ts │ │ │ ├── isVisible.ts │ │ │ └── scrollLocker.ts │ │ ├── devWarning.ts │ │ ├── get.ts │ │ ├── isEqual.ts │ │ ├── isMobile.ts │ │ ├── set.ts │ │ └── warning.ts │ ├── vc-virtual-list/ │ │ ├── Filler.tsx │ │ ├── Item.tsx │ │ ├── List.tsx │ │ ├── ScrollBar.tsx │ │ ├── hooks/ │ │ │ ├── useFrameWheel.ts │ │ │ ├── useHeights.tsx │ │ │ ├── useMobileTouchMove.ts │ │ │ ├── useOriginScroll.ts │ │ │ └── useScrollTo.tsx │ │ ├── index.ts │ │ ├── interface.ts │ │ └── utils/ │ │ ├── algorithmUtil.js │ │ ├── isFirefox.ts │ │ └── itemUtil.js │ ├── version/ │ │ └── index.ts │ └── watermark/ │ ├── __tests__/ │ │ ├── __snapshots__/ │ │ │ ├── demo.test.js.snap │ │ │ └── index.test.js.snap │ │ ├── demo.test.js │ │ └── index.test.js │ ├── demo/ │ │ ├── basic.vue │ │ ├── custom.vue │ │ ├── image.vue │ │ ├── index.vue │ │ └── multi-line.vue │ ├── index.en-US.md │ ├── index.tsx │ ├── index.zh-CN.md │ └── utils.ts ├── index-style-only.js ├── index-with-locales.js ├── index.esm.js ├── index.js ├── package.json ├── plugin/ │ ├── docs/ │ │ ├── index.ts │ │ └── vueToMarkdown.ts │ ├── md/ │ │ ├── index.ts │ │ ├── markdown/ │ │ │ ├── markdown.ts │ │ │ └── plugins/ │ │ │ ├── component.ts │ │ │ ├── containers.ts │ │ │ ├── header.ts │ │ │ ├── highlight.ts │ │ │ ├── highlightLines.ts │ │ │ ├── hoist.ts │ │ │ ├── lineNumbers.ts │ │ │ ├── link.ts │ │ │ ├── preWrapper.ts │ │ │ ├── slugify.ts │ │ │ └── snippet.ts │ │ ├── markdownToVue.ts │ │ └── utils/ │ │ ├── fetchCode.ts │ │ ├── parseHeader.ts │ │ ├── query.ts │ │ └── tsToJs.ts │ └── shared.ts ├── postcss.config.js ├── renovate.json ├── scripts/ │ ├── .npmrc.template │ ├── collect-token-statistic.js │ ├── commitizen.js │ ├── compact-vars.js │ ├── css-variable-sync.js │ ├── deploy-to-gh-pages.sh │ ├── generate-token-meta.js │ ├── generate-version.js │ ├── gulpfile.js │ ├── prepub.js │ ├── prettier.js │ └── run.js ├── site/ │ ├── 404.html │ ├── debugger/ │ │ ├── demo/ │ │ │ └── demo.vue │ │ └── index.tsx │ ├── index.html │ ├── public/ │ │ └── docsearch.min_2.6.3.js │ ├── scripts/ │ │ ├── genrateRoutes.js │ │ └── pushToOSS.js │ ├── src/ │ │ ├── App.vue │ │ ├── SiteToken.vue │ │ ├── SymbolKey.ts │ │ ├── components/ │ │ │ ├── ColorChunk/ │ │ │ │ └── index.tsx │ │ │ ├── ComponentTokenTable/ │ │ │ │ └── index.tsx │ │ │ ├── Contributors/ │ │ │ │ ├── constants.ts │ │ │ │ └── index.vue │ │ │ ├── DemoBox.vue │ │ │ ├── SimpleLayout.vue │ │ │ ├── TokenTable/ │ │ │ │ └── index.tsx │ │ │ ├── antdv-token-previewer/ │ │ │ │ ├── ColorPanel.tsx │ │ │ │ ├── ColorPreview.tsx │ │ │ │ ├── FilterPanel.tsx │ │ │ │ ├── IconSwitch.tsx │ │ │ │ ├── PreviewDemo.tsx │ │ │ │ ├── ThemeEditor.tsx │ │ │ │ ├── ThemeSelect.tsx │ │ │ │ ├── TokenInput.tsx │ │ │ │ ├── component-demos/ │ │ │ │ │ ├── alert/ │ │ │ │ │ │ ├── alert.tsx │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── anchor/ │ │ │ │ │ │ ├── anchor.tsx │ │ │ │ │ │ ├── anchorInLayout.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── autoComplete/ │ │ │ │ │ │ ├── auto-complete.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── avatar/ │ │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ │ └── index.tsx │ │ │ │ │ ├── badge/ │ │ │ │ │ │ ├── badge.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── breadcrumb/ │ │ │ │ │ │ ├── breadcrumb.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── button/ │ │ │ │ │ │ ├── button-icon.tsx │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── dangerButton.tsx │ │ │ │ │ │ ├── defaultButton.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── calendar/ │ │ │ │ │ │ ├── calendar.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── card/ │ │ │ │ │ │ ├── card.tsx │ │ │ │ │ │ ├── cardGrid.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── inner.tsx │ │ │ │ │ ├── carousel/ │ │ │ │ │ │ ├── carousel.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── cascader/ │ │ │ │ │ │ ├── cascader.tsx │ │ │ │ │ │ ├── data.ts │ │ │ │ │ │ ├── disable.tsx │ │ │ │ │ │ ├── highlight.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ ├── checkbox.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── collapse/ │ │ │ │ │ │ ├── collapse.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── datePicker/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── date-picker.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── icon.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── descriptions/ │ │ │ │ │ │ ├── descriptions.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── divider/ │ │ │ │ │ │ ├── divider.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── drawer/ │ │ │ │ │ │ ├── drawer.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── dropdown/ │ │ │ │ │ │ ├── dropdown.tsx │ │ │ │ │ │ ├── dropdownError.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── menu.tsx │ │ │ │ │ ├── empty/ │ │ │ │ │ │ ├── empty.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── form/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── form.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── grid/ │ │ │ │ │ │ ├── grid.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── icon/ │ │ │ │ │ │ ├── icon.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── image/ │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── image.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── input/ │ │ │ │ │ │ ├── clearIcon.tsx │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── input.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ ├── warning.tsx │ │ │ │ │ │ └── withAddon.tsx │ │ │ │ │ ├── inputNumber/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── inputNumber.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── list/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── list.tsx │ │ │ │ │ ├── mentions/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── mentions.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── menu/ │ │ │ │ │ │ ├── data.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── menu.tsx │ │ │ │ │ │ ├── menuDanger.tsx │ │ │ │ │ │ └── menuInLayout.tsx │ │ │ │ │ ├── message/ │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── message.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── modal/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── modal.tsx │ │ │ │ │ │ ├── modalWithButton.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── notification/ │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── notification.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── pagination/ │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── outline.tsx │ │ │ │ │ │ └── pagination.tsx │ │ │ │ │ ├── popconfirm/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── popconfirm.tsx │ │ │ │ │ ├── popover/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── popover.tsx │ │ │ │ │ ├── progress/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── progress.tsx │ │ │ │ │ │ ├── progressInBg.tsx │ │ │ │ │ │ └── success.tsx │ │ │ │ │ ├── radio/ │ │ │ │ │ │ ├── button.tsx │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── radio.tsx │ │ │ │ │ ├── rate/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── rate.tsx │ │ │ │ │ ├── result/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── result.tsx │ │ │ │ │ │ ├── resultWithDesc.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── segmented/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── segmented.tsx │ │ │ │ │ ├── select/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── data.ts │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── icon.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── select.tsx │ │ │ │ │ │ ├── selectTag.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── skeleton/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── skeleton.tsx │ │ │ │ │ ├── slider/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── slider.tsx │ │ │ │ │ │ └── sliderInBg.tsx │ │ │ │ │ ├── space/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── space.tsx │ │ │ │ │ ├── spin/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── spin.tsx │ │ │ │ │ ├── statistic/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── statistic.tsx │ │ │ │ │ ├── steps/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── steps.tsx │ │ │ │ │ ├── switch/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── switch.tsx │ │ │ │ │ ├── table/ │ │ │ │ │ │ ├── filterTable.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── table.tsx │ │ │ │ │ ├── tabs/ │ │ │ │ │ │ ├── cardTabs.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tabs.tsx │ │ │ │ │ ├── tag/ │ │ │ │ │ │ ├── closable.tsx │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── info.tsx │ │ │ │ │ │ ├── multiTags.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ ├── tag.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── timePicker/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── time-picker.tsx │ │ │ │ │ ├── timeline/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ └── timeline.tsx │ │ │ │ │ ├── tooltip/ │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tooltip.tsx │ │ │ │ │ ├── transfer/ │ │ │ │ │ │ ├── danger.tsx │ │ │ │ │ │ ├── data.ts │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ ├── transfer.tsx │ │ │ │ │ │ └── warning.tsx │ │ │ │ │ ├── tree/ │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tree.tsx │ │ │ │ │ ├── treeSelect/ │ │ │ │ │ │ ├── disabled.tsx │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── tree-select.tsx │ │ │ │ │ ├── typography/ │ │ │ │ │ │ ├── Heading4.tsx │ │ │ │ │ │ ├── error.tsx │ │ │ │ │ │ ├── index.tsx │ │ │ │ │ │ ├── success.tsx │ │ │ │ │ │ ├── typography.tsx │ │ │ │ │ │ ├── typographyFull.tsx │ │ │ │ │ │ ├── warning.tsx │ │ │ │ │ │ ├── warningText.tsx │ │ │ │ │ │ └── warningTitle.tsx │ │ │ │ │ └── upload/ │ │ │ │ │ ├── avatar.tsx │ │ │ │ │ ├── danger.tsx │ │ │ │ │ ├── index.ts │ │ │ │ │ └── upload.tsx │ │ │ │ ├── component-panel/ │ │ │ │ │ ├── ComponentCard.tsx │ │ │ │ │ ├── ComponentDemoGroup.tsx │ │ │ │ │ ├── ComponentTokenDrawer.tsx │ │ │ │ │ ├── ComponentTree.tsx │ │ │ │ │ └── index.tsx │ │ │ │ ├── hooks/ │ │ │ │ │ └── useControlledTheme.tsx │ │ │ │ ├── icons/ │ │ │ │ │ ├── Arrow.tsx │ │ │ │ │ ├── Brush.tsx │ │ │ │ │ ├── Compact.tsx │ │ │ │ │ ├── Control.tsx │ │ │ │ │ ├── Dark.tsx │ │ │ │ │ ├── Light.tsx │ │ │ │ │ ├── Margin.tsx │ │ │ │ │ ├── Motion.tsx │ │ │ │ │ ├── Pick.tsx │ │ │ │ │ ├── SearchDropdown.tsx │ │ │ │ │ ├── ShapeLine.tsx │ │ │ │ │ ├── TokenPanel.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── index.tsx │ │ │ │ ├── interface.ts │ │ │ │ ├── locale/ │ │ │ │ │ ├── context.ts │ │ │ │ │ ├── en-US.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── interface.tsx │ │ │ │ │ └── zh-CN.ts │ │ │ │ ├── meta/ │ │ │ │ │ ├── TokenRelation.ts │ │ │ │ │ ├── category.ts │ │ │ │ │ ├── index.ts │ │ │ │ │ └── interface.ts │ │ │ │ ├── overviews/ │ │ │ │ │ ├── Error.tsx │ │ │ │ │ ├── Primary.tsx │ │ │ │ │ ├── Success.tsx │ │ │ │ │ ├── Warning.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── previewer.tsx │ │ │ │ ├── token-panel/ │ │ │ │ │ ├── index.tsx │ │ │ │ │ ├── token-card/ │ │ │ │ │ │ └── index.tsx │ │ │ │ │ └── token-item/ │ │ │ │ │ └── index.tsx │ │ │ │ ├── token-panel-pro/ │ │ │ │ │ ├── AliasPanel.tsx │ │ │ │ │ ├── ComponentDemoPro.tsx │ │ │ │ │ ├── InputNumberPlus.tsx │ │ │ │ │ ├── TokenContent.tsx │ │ │ │ │ ├── TokenDetail.tsx │ │ │ │ │ ├── TokenPreview.tsx │ │ │ │ │ └── index.tsx │ │ │ │ └── utils/ │ │ │ │ ├── classifyToken.ts │ │ │ │ ├── deepUpdateObj.ts │ │ │ │ ├── getColorBgImg.ts │ │ │ │ ├── getDesignToken.ts │ │ │ │ ├── getValueByPath.ts │ │ │ │ ├── isColor.ts │ │ │ │ ├── makeStyle.tsx │ │ │ │ └── statistic.ts │ │ │ ├── demoContainer.vue │ │ │ ├── demoSort.jsx │ │ │ ├── rice/ │ │ │ │ ├── CarbonAds.vue │ │ │ │ ├── GoogleAds.vue │ │ │ │ ├── GoogleAdsMin.vue │ │ │ │ ├── GoogleAdsTop.vue │ │ │ │ ├── WWAds.vue │ │ │ │ ├── right_bottom_rice.vue │ │ │ │ ├── sponsors.vue │ │ │ │ └── top_rice.vue │ │ │ ├── surelyVue.vue │ │ │ └── vue-colorful/ │ │ │ ├── components/ │ │ │ │ ├── HexColorPicker.tsx │ │ │ │ ├── RgbaColorPicker.tsx │ │ │ │ └── common/ │ │ │ │ ├── Alpha.tsx │ │ │ │ ├── AlphaColorPicker.tsx │ │ │ │ ├── ColorInput.tsx │ │ │ │ ├── ColorPicker.tsx │ │ │ │ ├── Hue.tsx │ │ │ │ ├── Interactive.tsx │ │ │ │ ├── Pointer.tsx │ │ │ │ └── Saturation.tsx │ │ │ ├── css/ │ │ │ │ ├── styles.css │ │ │ │ └── styles.css.d.ts │ │ │ ├── hooks/ │ │ │ │ ├── useColorManipulation.ts │ │ │ │ ├── useEventCallback.ts │ │ │ │ └── useStyleSheet.ts │ │ │ ├── index.ts │ │ │ ├── types.ts │ │ │ └── utils/ │ │ │ ├── clamp.ts │ │ │ ├── compare.ts │ │ │ ├── convert.ts │ │ │ ├── format.ts │ │ │ ├── nonce.ts │ │ │ ├── round.ts │ │ │ └── validate.ts │ │ ├── demo.js │ │ ├── directives/ │ │ │ └── clipboard/ │ │ │ ├── clipboard-action.js │ │ │ ├── clipboard.js │ │ │ ├── closest.js │ │ │ ├── delegate.js │ │ │ ├── index.js │ │ │ ├── is.js │ │ │ ├── listen.js │ │ │ ├── select.js │ │ │ └── tiny-emitter.js │ │ ├── hooks/ │ │ │ ├── useMediaQuery.ts │ │ │ ├── useMenus.ts │ │ │ └── useSiteToken.ts │ │ ├── i18n.js │ │ ├── index.less │ │ ├── layouts/ │ │ │ ├── BaseLayout.vue │ │ │ ├── Demo.vue │ │ │ ├── Footer.vue │ │ │ ├── Iframe.vue │ │ │ ├── Menu.vue │ │ │ ├── PrevAndNext.vue │ │ │ ├── header/ │ │ │ │ ├── Ecosystem.vue │ │ │ │ ├── Github.less │ │ │ │ ├── Github.vue │ │ │ │ ├── Logo.vue │ │ │ │ ├── Menu.vue │ │ │ │ ├── More.vue │ │ │ │ ├── Navigation.vue │ │ │ │ ├── SearchBox.less │ │ │ │ ├── SearchBox.vue │ │ │ │ ├── index.less │ │ │ │ └── index.vue │ │ │ ├── icons/ │ │ │ │ ├── Compact.tsx │ │ │ │ ├── Dark.tsx │ │ │ │ ├── Light.tsx │ │ │ │ ├── ThemeEditorIcon.tsx │ │ │ │ └── ThemeIcon.vue │ │ │ └── index.vue │ │ ├── locale/ │ │ │ ├── en-US.js │ │ │ └── zh-CN.js │ │ ├── main.js │ │ ├── mock/ │ │ │ └── user.js │ │ ├── router/ │ │ │ └── index.js │ │ ├── services/ │ │ │ ├── login.js │ │ │ └── user.js │ │ ├── theme/ │ │ │ ├── en-US.js │ │ │ ├── static/ │ │ │ │ ├── common.less │ │ │ │ ├── demo.less │ │ │ │ ├── docsearch.less │ │ │ │ ├── footer.less │ │ │ │ ├── header.less │ │ │ │ ├── highlight.dark.less │ │ │ │ ├── highlight.less │ │ │ │ ├── icons.less │ │ │ │ ├── index.less │ │ │ │ ├── markdown.less │ │ │ │ ├── mock-browser.less │ │ │ │ ├── not-found.less │ │ │ │ ├── nprogress.less │ │ │ │ ├── page-nav.less │ │ │ │ ├── preview-img.less │ │ │ │ ├── reset.css │ │ │ │ ├── resource.less │ │ │ │ ├── responsive.less │ │ │ │ ├── toc.less │ │ │ │ └── var.less │ │ │ ├── template/ │ │ │ │ └── IconDisplay/ │ │ │ │ ├── Category.jsx │ │ │ │ ├── CopyableIcon.vue │ │ │ │ ├── fields.js │ │ │ │ ├── index.jsx │ │ │ │ └── themeIcons.jsx │ │ │ └── zh-CN.js │ │ ├── type.ts │ │ ├── typings.d.ts │ │ ├── utils/ │ │ │ ├── generateOnlineDemo.ts │ │ │ ├── request.js │ │ │ └── util.ts │ │ ├── views/ │ │ │ ├── ComponentOverview.less │ │ │ ├── ComponentOverview.vue │ │ │ └── theme-editor/ │ │ │ ├── JSONEditor/ │ │ │ │ └── index.vue │ │ │ ├── index.vue │ │ │ └── locales.ts │ │ └── vueDocs/ │ │ ├── compatible-style.en-US.md │ │ ├── compatible-style.zh-CN.md │ │ ├── customize-theme.en-US.md │ │ ├── customize-theme.zh-CN.md │ │ ├── download.en-US.md │ │ ├── download.zh-CN.md │ │ ├── extract-ssr.en-US.md │ │ ├── extract-ssr.zh-CN.md │ │ ├── faq.en-US.md │ │ ├── faq.zh-CN.md │ │ ├── getting-started.en-US.md │ │ ├── getting-started.zh-CN.md │ │ ├── i18n.en-US.md │ │ ├── i18n.zh-CN.md │ │ ├── introduce.en-US.md │ │ ├── introduce.zh-CN.md │ │ ├── migration-v2.en-US.md │ │ ├── migration-v2.zh-CN.md │ │ ├── migration-v3.en-US.md │ │ ├── migration-v3.zh-CN.md │ │ ├── migration-v4.en-US.md │ │ ├── migration-v4.zh-CN.md │ │ ├── replace-date.en-US.md │ │ ├── replace-date.zh-CN.md │ │ ├── sponsor.en-US.md │ │ ├── sponsor.zh-CN.md │ │ ├── use-with-vue-cli.en-US.md │ │ └── use-with-vue-cli.zh-CN.md │ ├── typings/ │ │ └── shared.d.ts │ ├── typings.d.ts │ └── vite.config.ts ├── test.html ├── tests/ │ ├── __mocks__/ │ │ └── copy-to-clipboard.js │ ├── __snapshots__/ │ │ └── index.test.js.snap │ ├── index.test.js │ ├── setup.js │ ├── setupAfterEnv.ts │ ├── shared/ │ │ ├── demoTest.js │ │ ├── focusTest.js │ │ └── mountTest.js │ └── utils.js ├── tsconfig.json ├── typings/ │ └── global.d.ts ├── webpack.build.conf.js └── wrangler.jsonc
Showing preview only (326K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3827 symbols across 1060 files)
FILE: .antd-tools.config.js
function finalizeCompile (line 8) | function finalizeCompile() {
function finalizeDist (line 22) | function finalizeDist() {
FILE: .jest.js
function getTestRegex (line 12) | function getTestRegex(libDir) {
FILE: antd-tools/apiCollection.js
constant COMPONENT_NAME (line 6) | const COMPONENT_NAME = /components\/([^/]*)/;
constant PROP_NAME (line 7) | const PROP_NAME = /^\s*\|\s*([^\s|]*)/;
function mappingPropLine (line 11) | function mappingPropLine(component, line) {
function apiReport (line 21) | function apiReport(entities) {
function printReport (line 36) | function printReport(apis) {
FILE: antd-tools/cli/run.js
function runTask (line 19) | function runTask(toRun) {
FILE: antd-tools/generator-types/src/formatter.ts
function getComponentName (line 5) | function getComponentName(name: string, tagPrefix: string) {
function parserProps (line 12) | function parserProps(tag: VueTag, line: any) {
function formatter (line 37) | function formatter(
FILE: antd-tools/generator-types/src/index.ts
function readMarkdown (line 11) | async function readMarkdown(options: Options): Promise<Map<String, VueTa...
function readTypings (line 29) | function readTypings(options: Options): Map<String, VueTag> {
function mergeTag (line 50) | function mergeTag(tags: Map<String, VueTag>, mergedTag: VueTag) {
function mergeTags (line 62) | function mergeTags(mergedTagsArr: Map<String, VueTag>[]): VueTag[] {
function parseAndWrite (line 72) | async function parseAndWrite(options: Options): Promise<Number> {
FILE: antd-tools/generator-types/src/parser.ts
constant TITLE_REG (line 2) | const TITLE_REG = /^(#+)\s+([^\n]*)/;
constant TABLE_REG (line 3) | const TABLE_REG = /^\|.+\r?\n\|\s*-+/;
constant TD_REG (line 4) | const TD_REG = /\s*`[^`]+`\s*|([^|`]+)/g;
constant TABLE_SPLIT_LINE_REG (line 5) | const TABLE_SPLIT_LINE_REG = /^\|\s*-/;
type TableContent (line 7) | type TableContent = {
type Artical (line 12) | type Artical = {
type Articals (line 19) | type Articals = Artical[];
function readLine (line 21) | function readLine(input: string) {
function splitTableLine (line 27) | function splitTableLine(line: string) {
function tableParse (line 39) | function tableParse(input: string) {
function mdParser (line 76) | function mdParser(input: string): Articals {
FILE: antd-tools/generator-types/src/type.ts
type VueSlot (line 3) | type VueSlot = {
type VueEventArgument (line 8) | type VueEventArgument = {
type VueEvent (line 13) | type VueEvent = {
type VueAttribute (line 19) | type VueAttribute = {
type VueTag (line 29) | type VueTag = {
type Options (line 37) | type Options = {
FILE: antd-tools/generator-types/src/utils.ts
function toKebabCase (line 2) | function toKebabCase(camel: string): string {
function removeVersion (line 7) | function removeVersion(str: string) {
function formatType (line 13) | function formatType(type: string) {
function getComponentName (line 20) | function getComponentName(name: string) {
function normalizePath (line 28) | function normalizePath(path: string): string {
FILE: antd-tools/generator-types/src/web-types.ts
function genWebTypes (line 4) | function genWebTypes(tags: VueTag[], options: Options) {
FILE: antd-tools/getWebpackConfig.js
function getWebpackConfig (line 25) | function getWebpackConfig(modules, esm = false) {
FILE: antd-tools/gulpfile.js
function dist (line 45) | function dist(done) {
function compileTs (line 95) | function compileTs(stream) {
function babelify (line 122) | function babelify(js, modules) {
function compile (line 147) | function compile(modules) {
function generateLocale (line 228) | function generateLocale() {
function tag (line 247) | function tag() {
function githubRelease (line 262) | function githubRelease(done) {
function publish (line 335) | function publish(tagString, done) {
function pub (line 349) | function pub(done) {
function reportError (line 469) | function reportError() {
FILE: antd-tools/replaceLib.js
function replacePath (line 7) | function replacePath(path) {
function replaceLib (line 30) | function replaceLib() {
FILE: antd-tools/runCmd.js
function runCmd (line 6) | function runCmd(cmd, _args, fn) {
FILE: antd-tools/sortApiTable.js
function getCellValue (line 27) | function getCellValue(node) {
function asciiSort (line 41) | function asciiSort(prev, next) {
function alphabetSort (line 54) | function alphabetSort(nodes) {
function sizeSort (line 61) | function sizeSort(nodes) {
function sort (line 67) | function sort(ast, filename) {
function sortAPI (line 114) | function sortAPI(md, filename) {
function sortMiddleware (line 118) | function sortMiddleware(ctx) {
FILE: antd-tools/utils/CleanUpStatsPlugin.js
class CleanUpStatsPlugin (line 2) | class CleanUpStatsPlugin {
method constructor (line 3) | constructor(option) {
method shouldPickStatChild (line 11) | shouldPickStatChild(child) {
method shouldPickWarning (line 17) | shouldPickWarning(message) {
method apply (line 25) | apply(compiler) {
FILE: antd-tools/utils/projectHelper.js
function getProjectPath (line 6) | function getProjectPath(...filePath) {
function resolve (line 10) | function resolve(moduleName) {
function injectRequire (line 18) | function injectRequire() {
function getConfig (line 40) | function getConfig() {
function isThereHaveBrowserslistConfig (line 54) | function isThereHaveBrowserslistConfig() {
FILE: components/__tests__/util/domHook.js
function spyElementPrototypes (line 3) | function spyElementPrototypes(Element, properties) {
function spyElementPrototype (line 54) | function spyElementPrototype(Element, propName, property) {
FILE: components/_util/ActionButton.tsx
type ActionButtonProps (line 24) | type ActionButtonProps = ExtractPropTypes<typeof actionButtonProps>;
function isThenable (line 26) | function isThenable<T>(thing?: PromiseLike<T>): boolean {
method setup (line 34) | setup(props, { slots }) {
FILE: components/_util/BaseInput.tsx
type BaseInputExpose (line 8) | interface BaseInputExpose {
method setup (line 51) | setup(props, { emit, attrs, expose }) {
FILE: components/_util/BaseInputInner.tsx
type BaseInputInnerExpose (line 5) | interface BaseInputInnerExpose {
method setup (line 55) | setup(props, { expose }) {
FILE: components/_util/BaseMixin.ts
method setState (line 6) | setState(state = {}, callback: () => any) {
method __emit (line 27) | __emit() {
FILE: components/_util/EventInterface.ts
type FocusEventHandler (line 1) | type FocusEventHandler = (e: FocusEvent) => void;
type MouseEventHandler (line 2) | type MouseEventHandler = (e: MouseEvent) => void;
type KeyboardEventHandler (line 3) | type KeyboardEventHandler = (e: KeyboardEvent) => void;
type CompositionEventHandler (line 4) | type CompositionEventHandler = (e: CompositionEvent) => void;
type ClipboardEventHandler (line 5) | type ClipboardEventHandler = (e: ClipboardEvent) => void;
type ChangeEventHandler (line 6) | type ChangeEventHandler = (e: ChangeEvent) => void;
type WheelEventHandler (line 7) | type WheelEventHandler = (e: WheelEvent) => void;
type ChangeEvent (line 8) | type ChangeEvent = Event & {
type CheckboxChangeEvent (line 13) | type CheckboxChangeEvent = Event & {
type EventHandler (line 19) | type EventHandler = (...args: any[]) => void;
FILE: components/_util/Portal.tsx
method setup (line 21) | setup(props, { slots }) {
FILE: components/_util/PortalWrapper.tsx
function getOpenCount (line 22) | function getOpenCount() {
type GetContainer (line 44) | type GetContainer = string | HTMLElement | (() => HTMLElement);
method setup (line 59) | setup(props, { slots }) {
FILE: components/_util/__mocks__/Portal.tsx
method setup (line 8) | setup(_props, { slots }) {
FILE: components/_util/__mocks__/RenderSlot.tsx
method setup (line 6) | setup(_props, { slots }) {
FILE: components/_util/canUseDom.ts
function canUseDom (line 1) | function canUseDom() {
FILE: components/_util/classNames.ts
function classNames (line 2) | function classNames(...args: any[]) {
FILE: components/_util/colors.ts
type InverseColor (line 4) | type InverseColor = `${PresetColorKey}-inverse`;
type PresetColorType (line 15) | type PresetColorType = PresetColorKey | InverseColor;
type PresetStatusColorType (line 17) | type PresetStatusColorType = (typeof PresetStatusColorTypes)[number];
function isPresetColor (line 24) | function isPresetColor(color?: any, includeInverse = true) {
function isPresetStatusColor (line 32) | function isPresetStatusColor(color?: any): color is PresetStatusColorType {
FILE: components/_util/component-classes.ts
class ClassList (line 13) | class ClassList {
method constructor (line 17) | constructor(el: Element) {
method array (line 25) | array() {
method add (line 40) | add(name: string): ClassList {
method remove (line 63) | remove(name: string | RegExp): ClassList {
method _removeMatching (line 88) | _removeMatching(re: RegExp): ClassList {
method toggle (line 109) | toggle(name: string, force: boolean): ClassList {
method has (line 145) | has(name: string) {
method contains (line 154) | contains(name: string) {
FILE: components/_util/copy-to-clipboard/index.ts
type Options (line 3) | interface Options {
function format (line 18) | function format(message: string) {
function copy (line 23) | function copy(text: string, options?: Options): boolean {
FILE: components/_util/createContext.ts
function createContext (line 3) | function createContext<T extends Record<string, any>>(defaultValue?: T) {
FILE: components/_util/createRef.ts
type RefObject (line 1) | interface RefObject extends Function {
function createRef (line 5) | function createRef(): any {
function fillRef (line 12) | function fillRef<T>(ref, node: T) {
function composeRef (line 23) | function composeRef<T>(...refs: any[]) {
FILE: components/_util/cssinjs/Cache.ts
type KeyType (line 1) | type KeyType = string | number;
type ValueType (line 2) | type ValueType = [number, any];
constant SPLIT (line 3) | const SPLIT = '%';
class Entity (line 4) | class Entity {
method constructor (line 6) | constructor(instanceId: string) {
method get (line 12) | get(keys: KeyType[] | string): ValueType | null {
method update (line 16) | update(keys: KeyType[] | string, valueFn: (origin: ValueType | null) =...
FILE: components/_util/cssinjs/Keyframes.ts
class Keyframe (line 3) | class Keyframe {
method constructor (line 7) | constructor(name: string, style: CSSInterpolation) {
method getName (line 12) | getName(hashId = ''): string {
FILE: components/_util/cssinjs/StyleContext.tsx
constant ATTR_TOKEN (line 15) | const ATTR_TOKEN = 'data-token-hash';
constant ATTR_MARK (line 16) | const ATTR_MARK = 'data-css-hash';
constant ATTR_CACHE_PATH (line 17) | const ATTR_CACHE_PATH = 'data-cache-path';
constant CSS_IN_JS_INSTANCE (line 20) | const CSS_IN_JS_INSTANCE = '__cssinjs_instance__';
function createCache (line 22) | function createCache() {
type HashPriority (line 58) | type HashPriority = 'low' | 'high';
type StyleContextProps (line 60) | interface StyleContextProps {
type UseStyleProviderProps (line 90) | type UseStyleProviderProps = Partial<StyleContextProps> | Ref<Partial<St...
type StyleProviderProps (line 178) | type StyleProviderProps = Partial<ExtractPropTypes<ReturnType<typeof sty...
method setup (line 184) | setup(props, { slots }) {
FILE: components/_util/cssinjs/hooks/useCacheToken.tsx
constant EMPTY_OVERRIDE (line 9) | const EMPTY_OVERRIDE = {};
type Option (line 19) | interface Option<DerivativeToken, DesignToken> {
function recordCleanToken (line 52) | function recordCleanToken(tokenKey: string) {
function removeStyleTags (line 56) | function removeStyleTags(key: string, instanceId: string) {
constant TOKEN_THRESHOLD (line 68) | const TOKEN_THRESHOLD = 0;
function cleanTokenStyle (line 71) | function cleanTokenStyle(tokenKey: string, instanceId: string) {
function useCacheToken (line 118) | function useCacheToken<DerivativeToken = object, DesignToken = Derivativ...
FILE: components/_util/cssinjs/hooks/useGlobalCache.tsx
function useClientCache (line 6) | function useClientCache<CacheType>(
FILE: components/_util/cssinjs/hooks/useHMR.ts
function useProdHMR (line 1) | function useProdHMR() {
function useDevHMR (line 7) | function useDevHMR() {
FILE: components/_util/cssinjs/hooks/useStyleRegister/cacheMapUtil.ts
constant ATTR_CACHE_MAP (line 4) | const ATTR_CACHE_MAP = 'data-ant-cssinjs-cache-path';
constant CSS_FILE_STYLE (line 10) | const CSS_FILE_STYLE = '_FILE_STYLE__';
function serialize (line 12) | function serialize(cachePathMap: Record<string, string>) {
function reset (line 27) | function reset(mockCache?: Record<string, string>, fromFile = true) {
function prepare (line 32) | function prepare() {
function existPath (line 65) | function existPath(path: string) {
function getStyleAndHash (line 71) | function getStyleAndHash(path: string): [style: string | null, hash: str...
FILE: components/_util/cssinjs/hooks/useStyleRegister/index.tsx
constant SKIP_CHECK (line 36) | const SKIP_CHECK = '_skip_check_';
constant MULTI_VALUE (line 37) | const MULTI_VALUE = '_multi_value_';
type CSSProperties (line 38) | type CSSProperties = Omit<CSS.PropertiesFallback<number | string>, 'anim...
type CSSPropertiesWithMultiValues (line 42) | type CSSPropertiesWithMultiValues = {
type CSSPseudos (line 53) | type CSSPseudos = { [K in CSS.Pseudos]?: CSSObject };
type ArrayCSSInterpolation (line 55) | type ArrayCSSInterpolation = readonly CSSInterpolation[];
type InterpolationPrimitive (line 57) | type InterpolationPrimitive = null | undefined | boolean | number | stri...
type CSSInterpolation (line 59) | type CSSInterpolation = InterpolationPrimitive | ArrayCSSInterpolation |...
type CSSOthersObject (line 61) | type CSSOthersObject = Record<string, CSSInterpolation>;
type CSSObject (line 63) | interface CSSObject extends CSSPropertiesWithMultiValues, CSSPseudos, CS...
function normalizeStyle (line 69) | function normalizeStyle(styleStr: string): string {
function isCompoundCSSProperty (line 74) | function isCompoundCSSProperty(value: CSSObject[string]) {
function injectSelectorHash (line 79) | function injectSelectorHash(key: string, hashId: string, hashPriority?: ...
type ParseConfig (line 102) | interface ParseConfig {
type ParseInfo (line 111) | interface ParseInfo {
function parseKeyframes (line 145) | function parseKeyframes(keyframes: Keyframes) {
function flattenList (line 157) | function flattenList(list: ArrayCSSInterpolation, fullList: CSSObject[] ...
function appendStyle (line 234) | function appendStyle(cssKey: string, cssValue: any) {
function uniqueHash (line 298) | function uniqueHash(path: (string | number)[], styleStr: string) {
function useStyleRegister (line 309) | function useStyleRegister(
function extractStyle (line 457) | function extractStyle(cache: Cache, plain = false) {
FILE: components/_util/cssinjs/linters/interface.ts
type LinterInfo (line 1) | interface LinterInfo {
type Linter (line 7) | interface Linter {
FILE: components/_util/cssinjs/linters/legacyNotSelectorLinter.ts
function isConcatSelector (line 4) | function isConcatSelector(selector: string) {
function parsePath (line 14) | function parsePath(info: LinterInfo) {
FILE: components/_util/cssinjs/linters/utils.ts
function lintWarning (line 4) | function lintWarning(message: string, info: LinterInfo) {
FILE: components/_util/cssinjs/theme/Theme.ts
class Theme (line 10) | class Theme<DesignToken extends TokenType, DerivativeToken extends Token...
method constructor (line 14) | constructor(
method getDerivativeToken (line 32) | getDerivativeToken(token: DesignToken): DerivativeToken {
FILE: components/_util/cssinjs/theme/ThemeCache.ts
type ThemeCacheMap (line 5) | type ThemeCacheMap = Map<
type DerivativeOptions (line 13) | type DerivativeOptions = DerivativeFunc<any, any>[];
function sameDerivativeOption (line 15) | function sameDerivativeOption(left: DerivativeOptions, right: Derivative...
class ThemeCache (line 27) | class ThemeCache {
method constructor (line 35) | constructor() {
method size (line 41) | public size(): number {
method internalGet (line 45) | private internalGet(
method get (line 63) | public get(derivativeOption: DerivativeOptions): Theme<any, any> | und...
method has (line 67) | public has(derivativeOption: DerivativeOptions): boolean {
method set (line 71) | public set(derivativeOption: DerivativeOptions, value: Theme<any, any>...
method deleteByPath (line 107) | private deleteByPath(
method delete (line 127) | public delete(derivativeOption: DerivativeOptions): Theme<any, any> | ...
FILE: components/_util/cssinjs/theme/createTheme.ts
function createTheme (line 10) | function createTheme<
FILE: components/_util/cssinjs/theme/interface.ts
type TokenType (line 1) | type TokenType = object;
type DerivativeFunc (line 2) | type DerivativeFunc<DesignToken extends TokenType, DerivativeToken exten...
FILE: components/_util/cssinjs/transformers/interface.ts
type Transformer (line 3) | interface Transformer {
FILE: components/_util/cssinjs/transformers/legacyLogicalProperties.ts
function splitValues (line 4) | function splitValues(value: string | number) {
type MatchValue (line 34) | type MatchValue = string[] & {
function noSplit (line 38) | function noSplit(list: MatchValue): MatchValue {
function skipCheck (line 108) | function skipCheck(value: string | number) {
FILE: components/_util/cssinjs/transformers/px2rem.ts
type Options (line 8) | interface Options {
function toFixed (line 28) | function toFixed(number: number, precision: number) {
FILE: components/_util/cssinjs/util.ts
function flattenToken (line 10) | function flattenToken(token: any) {
function token2key (line 35) | function token2key(token: any, salt: string): string {
function supportSelector (line 44) | function supportSelector(
function supportLayer (line 78) | function supportLayer(): boolean {
function supportWhere (line 92) | function supportWhere(): boolean {
function supportLogicProps (line 106) | function supportLogicProps(): boolean {
FILE: components/_util/debouncedWatch.ts
type MaybeRef (line 6) | type MaybeRef<T> = T | Ref<T>;
type Fn (line 8) | type Fn = () => void;
type FunctionArgs (line 10) | type FunctionArgs<Args extends any[] = any[], Return = void> = (...args:...
type FunctionWrapperOptions (line 12) | interface FunctionWrapperOptions<Args extends any[] = any[], This = any> {
type EventFilter (line 18) | type EventFilter<Args extends any[] = any[], This = any> = (
function debounceFilter (line 31) | function debounceFilter(ms: MaybeRef<number>) {
type DebouncedWatchOptions (line 46) | interface DebouncedWatchOptions<Immediate> extends WatchOptions<Immediat...
type ConfigurableEventFilter (line 50) | interface ConfigurableEventFilter {
function createFilterWrapper (line 56) | function createFilterWrapper<T extends FunctionArgs>(filter: EventFilter...
type WatchWithFilterOptions (line 63) | interface WatchWithFilterOptions<Immediate>
function watchWithFilter (line 67) | function watchWithFilter<Immediate extends Readonly<boolean> = false>(
function debouncedWatch (line 78) | function debouncedWatch<Immediate extends Readonly<boolean> = false>(
FILE: components/_util/eagerComputed.ts
type ComputedGetter (line 3) | type ComputedGetter<T> = (...args: any[]) => T;
function eagerComputed (line 4) | function eagerComputed<T>(fn: ComputedGetter<T>) {
FILE: components/_util/easings.ts
function easeInOutCubic (line 1) | function easeInOutCubic(t: number, b: number, c: number, d: number) {
FILE: components/_util/extendsObject.ts
type RecordType (line 1) | type RecordType = Record<string, any>;
function extendsObject (line 3) | function extendsObject<T extends RecordType>(...list: T[]) {
FILE: components/_util/firstNotUndefined.ts
function firstNotUndefined (line 1) | function firstNotUndefined<T>(arr: T[] = []): T {
FILE: components/_util/gapSize.ts
function isPresetSize (line 3) | function isPresetSize(size?: SizeType | string | number): size is SizeTy...
function isValidGapNumber (line 7) | function isValidGapNumber(size?: SizeType | string | number): size is nu...
FILE: components/_util/getRequestAnimationFrame.ts
function requestAnimationFramePolyfill (line 3) | function requestAnimationFramePolyfill() {
function getRequestAnimationFrame (line 16) | function getRequestAnimationFrame() {
function cancelRequestAnimationFrame (line 30) | function cancelRequestAnimationFrame(id) {
FILE: components/_util/getScroll.ts
function isWindow (line 1) | function isWindow(obj: any): obj is Window {
function getScroll (line 5) | function getScroll(
FILE: components/_util/getScrollBarSize.ts
function getScrollBarSize (line 5) | function getScrollBarSize(fresh?: boolean) {
function ensureSize (line 46) | function ensureSize(str: string) {
function getTargetScrollBarSize (line 52) | function getTargetScrollBarSize(target: HTMLElement) {
FILE: components/_util/hooks/_vueuse/_configurable.ts
type ConfigurableWindow (line 3) | interface ConfigurableWindow {
type ConfigurableDocument (line 10) | interface ConfigurableDocument {
type ConfigurableNavigator (line 17) | interface ConfigurableNavigator {
type ConfigurableLocation (line 24) | interface ConfigurableLocation {
FILE: components/_util/hooks/_vueuse/resolveUnref.ts
function resolveUnref (line 7) | function resolveUnref<T>(r: MaybeComputedRef<T>): T {
FILE: components/_util/hooks/_vueuse/tryOnMounted.ts
function tryOnMounted (line 11) | function tryOnMounted(fn: Fn, sync = true) {
FILE: components/_util/hooks/_vueuse/tryOnScopeDispose.ts
function tryOnScopeDispose (line 9) | function tryOnScopeDispose(fn: Fn) {
FILE: components/_util/hooks/_vueuse/types.ts
type Fn (line 6) | type Fn = () => void;
type RemovableRef (line 11) | type RemovableRef<T> = Omit<Ref<T>, 'value'> & {
type RemoveableRef (line 19) | type RemoveableRef<T> = RemovableRef<T>;
type MaybeRef (line 28) | type MaybeRef<T> = T | Ref<T>;
type MaybeComputedRef (line 37) | type MaybeComputedRef<T> = MaybeReadonlyRef<T> | MaybeRef<T>;
type MaybeReadonlyRef (line 46) | type MaybeReadonlyRef<T> = (() => T) | ComputedRef<T>;
type DeepMaybeRef (line 57) | type DeepMaybeRef<T> = T extends Ref<infer V>
type ElementOf (line 66) | type ElementOf<T> = T extends (infer E)[] ? E : never;
type ShallowUnwrapRef (line 68) | type ShallowUnwrapRef<T> = T extends Ref<infer P> ? P : T;
type Awaitable (line 70) | type Awaitable<T> = Promise<T> | T;
type ArgumentsType (line 72) | type ArgumentsType<T> = T extends (...args: infer U) => any ? U : never;
type Pausable (line 74) | interface Pausable {
type Stoppable (line 91) | interface Stoppable {
type Stopable (line 111) | type Stopable = Stoppable;
type ConfigurableFlush (line 113) | interface ConfigurableFlush {
type ConfigurableFlushSync (line 122) | interface ConfigurableFlushSync {
type MapSources (line 133) | type MapSources<T> = {
type MapOldSources (line 136) | type MapOldSources<T, Immediate> = {
FILE: components/_util/hooks/_vueuse/unrefElement.ts
type VueInstance (line 5) | type VueInstance = ComponentPublicInstance;
type MaybeElementRef (line 6) | type MaybeElementRef<T extends MaybeElement = MaybeElement> = MaybeRef<T>;
type MaybeComputedElementRef (line 7) | type MaybeComputedElementRef<T extends MaybeElement = MaybeElement> = Ma...
type MaybeElement (line 8) | type MaybeElement = HTMLElement | SVGElement | VueInstance | undefined |...
type UnRefElementReturn (line 10) | type UnRefElementReturn<T extends MaybeElement = MaybeElement> = T exten...
function unrefElement (line 19) | function unrefElement<T extends MaybeElement>(
FILE: components/_util/hooks/_vueuse/useElementSize.ts
type ElementSize (line 7) | interface ElementSize {
function useElementSize (line 20) | function useElementSize(
type UseElementSizeReturn (line 65) | type UseElementSizeReturn = ReturnType<typeof useElementSize>;
FILE: components/_util/hooks/_vueuse/useMutationObserver.ts
type UseMutationObserverOptions (line 9) | interface UseMutationObserverOptions extends MutationObserverInit, Confi...
function useMutationObserver (line 20) | function useMutationObserver(
type UseMutationObserverReturn (line 62) | type UseMutationObserverReturn = ReturnType<typeof useMutationObserver>;
FILE: components/_util/hooks/_vueuse/useResizeObserver.ts
type ResizeObserverSize (line 9) | interface ResizeObserverSize {
type ResizeObserverEntry (line 14) | interface ResizeObserverEntry {
type ResizeObserverCallback (line 22) | type ResizeObserverCallback = (
type UseResizeObserverOptions (line 27) | interface UseResizeObserverOptions extends ConfigurableWindow {
class ResizeObserver (line 37) | class ResizeObserver {
function useResizeObserver (line 52) | function useResizeObserver(
type UseResizeObserverReturn (line 94) | type UseResizeObserverReturn = ReturnType<typeof useResizeObserver>;
FILE: components/_util/hooks/_vueuse/useSupported.ts
function useSupported (line 4) | function useSupported(callback: () => unknown, sync = false) {
FILE: components/_util/hooks/useBreakpoint.ts
function useBreakpoint (line 6) | function useBreakpoint(): Ref<ScreenMap> {
FILE: components/_util/hooks/useId.ts
function getUUID (line 10) | function getUUID(): number | string {
function useId (line 25) | function useId(id = ref('')) {
FILE: components/_util/hooks/useLayoutState.ts
type Updater (line 5) | type Updater<State> = (prev: State) => State;
function useLayoutState (line 9) | function useLayoutState<State>(
FILE: components/_util/hooks/useMemo.ts
function useMemo (line 4) | function useMemo<T>(
FILE: components/_util/hooks/useMergedState.ts
function useMergedState (line 4) | function useMergedState<T, R = Ref<T>>(
FILE: components/_util/hooks/useRefs.ts
type RefType (line 5) | type RefType = HTMLElement | ComponentPublicInstance;
type RefsValue (line 6) | type RefsValue = Map<Key, RefType>;
type UseRef (line 7) | type UseRef = [(key: Key) => (el: RefType) => void, Ref<RefsValue>];
FILE: components/_util/hooks/useScrollLocker.ts
constant UNIQUE_ID (line 7) | const UNIQUE_ID = `vc-util-locker-${Date.now()}`;
function isBodyOverflowing (line 14) | function isBodyOverflowing() {
function useScrollLocker (line 21) | function useScrollLocker(lock?: Ref<boolean>) {
FILE: components/_util/hooks/useState.ts
function useState (line 4) | function useState<T, R = Ref<T>>(
FILE: components/_util/omit.ts
function omit (line 1) | function omit<T extends object, K extends keyof T>(obj: T, fields: K[]):...
FILE: components/_util/pickAttrs.ts
function match (line 28) | function match(key: string, prefix: string) {
type PickConfig (line 32) | interface PickConfig {
function pickAttrs (line 43) | function pickAttrs(props: object, ariaOnly: boolean | PickConfig = false) {
FILE: components/_util/placements.ts
type AdjustOverflow (line 15) | interface AdjustOverflow {
type PlacementsConfig (line 20) | interface PlacementsConfig {
function getOverflowOptions (line 28) | function getOverflowOptions(autoAdjustOverflow?: boolean | AdjustOverflo...
function getPlacements (line 38) | function getPlacements(config: PlacementsConfig) {
FILE: components/_util/props-util/index.ts
function getEvents (line 158) | function getEvents(ele: any = {}, on = true) {
function getClass (line 168) | function getClass(ele: any) {
function getStyle (line 187) | function getStyle(ele: any, camel?: boolean) {
function getComponentName (line 201) | function getComponentName(opts: any) {
function isFragment (line 205) | function isFragment(c: any) {
function isEmptyContent (line 209) | function isEmptyContent(c: any) {
function isEmptyElement (line 213) | function isEmptyElement(c: any) {
function isEmptySlot (line 222) | function isEmptySlot(c: any) {
function isStringElement (line 226) | function isStringElement(c: any) {
function filterEmpty (line 230) | function filterEmpty(children = []) {
function filterEmptyWithUndefined (line 244) | function filterEmptyWithUndefined(children: any[]) {
function isValidElement (line 253) | function isValidElement(element: any) {
function getPropsSlot (line 260) | function getPropsSlot(slots: any, props: any, prop = 'default') {
FILE: components/_util/raf.ts
function cleanup (line 12) | function cleanup(id: number) {
function wrapperRaf (line 16) | function wrapperRaf(callback: () => void, times = 1): number {
FILE: components/_util/reactivePick.ts
function reactivePick (line 10) | function reactivePick<T extends object, K extends keyof T>(
FILE: components/_util/requestAnimationTimeout.ts
function timeout (line 10) | function timeout() {
FILE: components/_util/responsiveObserve.ts
type Breakpoint (line 5) | type Breakpoint = 'xxxl' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';
type BreakpointMap (line 6) | type BreakpointMap = Record<Breakpoint, string>;
type ScreenMap (line 7) | type ScreenMap = Partial<Record<Breakpoint, boolean>>;
type ScreenSizeMap (line 8) | type ScreenSizeMap = Partial<Record<Breakpoint, number>>;
type SubscribeFunc (line 11) | type SubscribeFunc = (screens: ScreenMap) => void;
function useResponsiveObserver (line 23) | function useResponsiveObserver() {
FILE: components/_util/scrollTo.ts
type ScrollToOptions (line 5) | interface ScrollToOptions {
function scrollTo (line 14) | function scrollTo(y: number, options: ScrollToOptions = {}) {
FILE: components/_util/setStyle.ts
type SetStyleOptions (line 9) | interface SetStyleOptions {
function setStyle (line 12) | function setStyle(style: CSSProperties, options: SetStyleOptions = {}): ...
FILE: components/_util/shallowequal.ts
function shallowEqual (line 3) | function shallowEqual(objA: any, objB: any, compare?: any, compareContex...
FILE: components/_util/static-style-extract/index.tsx
function extractStyle (line 78) | function extractStyle(customTheme?: CustomRender): string {
FILE: components/_util/static-style-extract/interface.ts
type CustomRender (line 3) | type CustomRender = (node: VueNode) => VueNode;
FILE: components/_util/statusUtils.tsx
type InputStatus (line 6) | type InputStatus = (typeof InputStatuses)[number];
function getStatusClassNames (line 8) | function getStatusClassNames(
FILE: components/_util/styleChecker.ts
function isStyleSupport (line 26) | function isStyleSupport(styleName: string | string[], styleValue?: any) {
FILE: components/_util/supportsPassive.js
method get (line 5) | get() {
FILE: components/_util/throttleByAnimationFrame.ts
type throttledFn (line 3) | type throttledFn = (...args: any[]) => void;
type throttledCancelFn (line 5) | type throttledCancelFn = { cancel: () => void };
function throttleByAnimationFrame (line 7) | function throttleByAnimationFrame<T extends any[]>(fn: (...args: T) => v...
FILE: components/_util/toReactive.ts
type MaybeRef (line 3) | type MaybeRef<T> = T | Ref<T>;
function toReactive (line 10) | function toReactive<T extends object>(objectRef: MaybeRef<T>): T {
FILE: components/_util/transButton.tsx
method setup (line 27) | setup(props, { slots, emit, attrs, expose }) {
FILE: components/_util/transition.tsx
type SelectCommonPlacement (line 12) | type SelectCommonPlacement = (typeof SelectPlacements)[number];
type MotionEvent (line 61) | type MotionEvent = (TransitionEvent | AnimationEvent) & {
type MotionEventHandler (line 65) | type MotionEventHandler = (element: Element, done?: () => void) => CSSPr...
type MotionEndEventHandler (line 67) | type MotionEndEventHandler = (element: Element, done?: () => void) => bo...
type CSSMotionProps (line 79) | interface CSSMotionProps extends Partial<BaseTransitionProps<Element>> {
FILE: components/_util/type.ts
type ElementOf (line 13) | type ElementOf<T> = T extends (infer E)[] ? E : T extends readonly (infe...
type LiteralUnion (line 18) | type LiteralUnion<T extends string> = T | (string & {});
type Data (line 20) | type Data = Record<string, unknown>;
type Key (line 22) | type Key = string | number;
type DefaultFactory (line 24) | type DefaultFactory<T> = (props: Data) => T | null | undefined;
type PropOptions (line 26) | interface PropOptions<T = any, D = T> {
type VNodeChildAtom (line 33) | type VNodeChildAtom = VNode | string | number | boolean | null | undefin...
type VueNode (line 36) | type VueNode = VNodeChildAtom | VNodeChildAtom[] | VNode;
type MaybeRef (line 47) | type MaybeRef<T> = T | Ref<T>;
function eventType (line 49) | function eventType<T>() {
function objectType (line 53) | function objectType<T = {}>(defaultVal?: T) {
function booleanType (line 57) | function booleanType(defaultVal?: boolean) {
function functionType (line 61) | function functionType<T = () => {}>(defaultVal?: T) {
function anyType (line 65) | function anyType<T = any>(defaultVal?: T, required?: boolean) {
function vNodeType (line 78) | function vNodeType<T = VueNode>() {
function arrayType (line 82) | function arrayType<T extends any[]>(defaultVal?: T) {
function stringType (line 86) | function stringType<T extends string = string>(defaultVal?: T) {
function someType (line 90) | function someType<T>(types?: any[], defaultVal?: T) {
type CustomSlotsType (line 94) | type CustomSlotsType<T> = SlotsType<T>;
type AnyObject (line 96) | type AnyObject = Record<PropertyKey, any>;
FILE: components/_util/unreachableException.ts
class UnreachableException (line 1) | class UnreachableException {
method constructor (line 4) | constructor(value: any) {
FILE: components/_util/util.ts
function resolvePropValue (line 36) | function resolvePropValue(options, props, key, value) {
function getDataAndAriaProps (line 57) | function getDataAndAriaProps(props) {
function toPx (line 66) | function toPx(val) {
function renderHelper (line 71) | function renderHelper<T = Record<string, any>>(
function wrapPromiseFn (line 81) | function wrapPromiseFn(openFn: (resolve: VoidFunction) => VoidFunction) {
FILE: components/_util/vnode.ts
type NodeProps (line 6) | type NodeProps = Record<string, any> &
function cloneElement (line 9) | function cloneElement<T, U>(
function cloneVNodes (line 30) | function cloneVNodes(vnodes, nodeProps = {}, override = true) {
function deepCloneElement (line 34) | function deepCloneElement<T, U>(
function triggerVNodeUpdate (line 55) | function triggerVNodeUpdate(vm: VNode, attrs: Record<string, any>, dom: ...
function customRenderSlot (line 71) | function customRenderSlot(
FILE: components/_util/vue-types/index.ts
function withUndefined (line 35) | function withUndefined<T extends { default?: any }>(type: T): T {
FILE: components/_util/warning.ts
function noop (line 4) | function noop() {}
type Warning (line 6) | type Warning = (valid: boolean, component: string, message?: string) => ...
FILE: components/_util/wave/WaveEffect.tsx
function validateNum (line 7) | function validateNum(value: number) {
type WaveEffectProps (line 11) | interface WaveEffectProps {
method setup (line 21) | setup(props) {
function showWaveEffect (line 153) | function showWaveEffect(node: HTMLElement, className: string) {
FILE: components/_util/wave/index.tsx
type WaveProps (line 17) | interface WaveProps {
method setup (line 27) | setup(props, { slots }) {
FILE: components/_util/wave/style.ts
type ComponentToken (line 5) | interface ComponentToken {}
type WaveToken (line 7) | type WaveToken = FullToken<'Wave'>;
FILE: components/_util/wave/useWave.ts
function useWave (line 6) | function useWave(
FILE: components/_util/wave/util.ts
function isNotGrey (line 1) | function isNotGrey(color: string) {
function isValidWaveColor (line 10) | function isValidWaveColor(color: string) {
function getTargetWaveColor (line 23) | function getTargetWaveColor(node: HTMLElement) {
FILE: components/affix/__tests__/index.test.js
method mounted (line 9) | mounted() {
method getTarget (line 15) | getTarget() {
method render (line 20) | render() {
FILE: components/affix/index.tsx
function getDefaultTarget (line 27) | function getDefaultTarget() {
type AffixStatus (line 30) | enum AffixStatus {
type AffixState (line 34) | interface AffixState {
type AffixProps (line 61) | type AffixProps = Partial<ExtractPropTypes<ReturnType<typeof affixProps>>>;
type AffixEmits (line 63) | type AffixEmits = {
type AffixExpose (line 68) | type AffixExpose = {
type AffixInstance (line 73) | type AffixInstance = ComponentPublicInstance<AffixProps, AffixExpose>;
method setup (line 79) | setup(props, { slots, emit, expose, attrs }) {
FILE: components/affix/style/index.ts
type AffixToken (line 5) | interface AffixToken extends FullToken<'Affix'> {
FILE: components/affix/utils.ts
type BindElement (line 4) | type BindElement = HTMLElement | Window | null | undefined;
function getTargetRect (line 6) | function getTargetRect(target: BindElement): DOMRect {
function getFixedTop (line 12) | function getFixedTop(placeholderRect: DOMRect, targetRect: DOMRect, offs...
function getFixedBottom (line 19) | function getFixedBottom(
constant TRIGGER_EVENTS (line 32) | const TRIGGER_EVENTS = [
type ObserverEntity (line 42) | interface ObserverEntity {
function getObserverEntities (line 50) | function getObserverEntities() {
function addObserveTarget (line 55) | function addObserveTarget<T>(target: HTMLElement | Window | null, affix:...
function removeObserveTarget (line 87) | function removeObserveTarget<T>(affix: T): void {
FILE: components/alert/__tests__/index.test.js
method render (line 17) | render() {
method render (line 40) | render() {
method render (line 51) | render() {
method render (line 62) | render() {
FILE: components/alert/index.tsx
type AlertType (line 38) | type AlertType = (typeof AlertTypes)[number];
type AlertProps (line 64) | type AlertProps = Partial<ExtractPropTypes<ReturnType<typeof alertProps>>>;
method setup (line 71) | setup(props, { slots, emit, attrs, expose }) {
FILE: components/alert/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type AlertToken (line 8) | type AlertToken = FullToken<'Alert'> & {
FILE: components/anchor/Anchor.tsx
type AnchorDirection (line 27) | type AnchorDirection = 'vertical' | 'horizontal';
function getDefaultContainer (line 29) | function getDefaultContainer() {
function getOffsetTop (line 33) | function getOffsetTop(element: HTMLElement, container: AnchorContainer):...
type Section (line 53) | interface Section {
type AnchorContainer (line 58) | type AnchorContainer = HTMLElement | Window;
type AnchorProps (line 77) | type AnchorProps = Partial<ExtractPropTypes<ReturnType<typeof anchorProp...
type AnchorState (line 79) | interface AnchorState {
method setup (line 91) | setup(props, { emit, attrs, slots, expose }) {
FILE: components/anchor/AnchorLink.tsx
type AnchorLinkItemProps (line 19) | interface AnchorLinkItemProps {
type AnchorLinkProps (line 29) | type AnchorLinkProps = Partial<ExtractPropTypes<ReturnType<typeof anchor...
method setup (line 41) | setup(props, { slots, attrs }) {
FILE: components/anchor/__tests__/Anchor.test.js
method render (line 18) | render() {
method render (line 43) | render() {
FILE: components/anchor/context.ts
type AnchorContext (line 5) | interface AnchorContext {
function noop (line 15) | function noop(..._any: any[]): any {}
FILE: components/anchor/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type AnchorToken (line 8) | interface AnchorToken extends FullToken<'Anchor'> {
FILE: components/app/context.ts
type AppConfig (line 7) | type AppConfig = {
type ModalType (line 22) | type ModalType = Omit<ModalStaticFunctions, 'warn'>;
type useAppProps (line 24) | interface useAppProps {
FILE: components/app/index.tsx
method setup (line 34) | setup(props, { slots }) {
FILE: components/app/style/index.ts
type ComponentToken (line 4) | type ComponentToken = {};
type AppToken (line 6) | interface AppToken extends FullToken<'App'> {}
FILE: components/auto-complete/OptGroup.tsx
type OptGroupProps (line 4) | type OptGroupProps = Omit<DefaultOptionType, 'options'>;
type OptionGroupFC (line 6) | interface OptionGroupFC extends FunctionalComponent<OptGroupProps> {
FILE: components/auto-complete/Option.tsx
type OptionProps (line 4) | interface OptionProps extends Omit<DefaultOptionType, 'label'> {
type OptionFC (line 9) | interface OptionFC extends FunctionalComponent<OptionProps> {
FILE: components/auto-complete/__tests__/index.test.js
function $$ (line 8) | function $$(className) {
method render (line 14) | render() {
FILE: components/auto-complete/index.tsx
function isSelectOptionOrSelectOptGroup (line 15) | function isSelectOptionOrSelectOptGroup(child: any): boolean {
type AutoCompleteProps (line 40) | type AutoCompleteProps = Partial<ExtractPropTypes<ReturnType<typeof auto...
method setup (line 61) | setup(props, { slots, attrs, expose }) {
method install (line 169) | install(app: App) {
FILE: components/avatar/Avatar.tsx
type AvatarSize (line 16) | type AvatarSize = 'large' | 'small' | 'default' | number | ScreenSizeMap;
type AvatarProps (line 38) | type AvatarProps = Partial<ExtractPropTypes<ReturnType<typeof avatarProp...
method setup (line 49) | setup(props, { slots, attrs }) {
FILE: components/avatar/AvatarContext.ts
type AvatarSize (line 4) | type AvatarSize = 'large' | 'small' | 'default' | number | ScreenSizeMap;
type AvatarContextType (line 5) | interface AvatarContextType {
FILE: components/avatar/Group.tsx
type AvatarGroupProps (line 29) | type AvatarGroupProps = Partial<ExtractPropTypes<ReturnType<typeof group...
method setup (line 36) | setup(props, { slots, attrs }) {
FILE: components/avatar/__tests__/Avatar.test.js
method get (line 16) | get() {
method data (line 66) | data() {
method handleImgError (line 72) | handleImgError() {
method render (line 78) | render() {
method data (line 104) | data() {
method render (line 109) | render() {
method render (line 135) | render() {
method get (line 145) | get() {
method render (line 153) | render() {
method render (line 164) | render() {
method render (line 178) | render() {
method render (line 194) | render() {
FILE: components/avatar/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {
type AvatarToken (line 54) | type AvatarToken = FullToken<'Avatar'> & {
FILE: components/badge/Badge.tsx
type BadgeProps (line 37) | type BadgeProps = Partial<ExtractPropTypes<ReturnType<typeof badgeProps>>>;
method setup (line 50) | setup(props, { slots, attrs }) {
FILE: components/badge/Ribbon.tsx
type RibbonProps (line 17) | type RibbonProps = Partial<ExtractPropTypes<ReturnType<typeof ribbonProp...
method setup (line 28) | setup(props, { attrs, slots }) {
FILE: components/badge/ScrollNumber.tsx
type ScrollNumberProps (line 18) | type ScrollNumberProps = Partial<ExtractPropTypes<typeof scrollNumberPro...
method setup (line 25) | setup(props, { attrs, slots }) {
FILE: components/badge/SingleNumber.tsx
type UnitNumberProps (line 5) | interface UnitNumberProps {
function UnitNumber (line 12) | function UnitNumber({ prefixCls, value, current, offset = 0 }: UnitNumbe...
function getOffset (line 35) | function getOffset(start: number, end: number, unit: -1 | 1) {
method setup (line 55) | setup(props) {
FILE: components/badge/__tests__/index.test.js
method render (line 9) | render() {
method render (line 17) | render() {
method render (line 23) | render() {
method render (line 31) | render() {
method render (line 40) | render() {
method render (line 98) | render() {
method render (line 114) | render() {
method render (line 129) | render() {
method render (line 143) | render() {
method render (line 158) | render() {
method render (line 170) | render() {
method render (line 185) | render() {
method render (line 200) | render() {
method render (line 212) | render() {
FILE: components/badge/style/index.ts
type BadgeToken (line 7) | interface BadgeToken extends FullToken<'Badge'> {
FILE: components/breadcrumb/Breadcrumb.tsx
type Route (line 13) | interface Route {
type BreadcrumbProps (line 31) | type BreadcrumbProps = Partial<ExtractPropTypes<ReturnType<typeof breadc...
function getBreadcrumbName (line 33) | function getBreadcrumbName(route: Route, params: unknown) {
function defaultItemRender (line 44) | function defaultItemRender(opt: {
method setup (line 66) | setup(props, { slots, attrs }) {
FILE: components/breadcrumb/BreadcrumbItem.tsx
type BreadcrumbItemProps (line 22) | type BreadcrumbItemProps = Partial<ExtractPropTypes<ReturnType<typeof br...
method setup (line 35) | setup(props, { slots, attrs, emit }) {
FILE: components/breadcrumb/BreadcrumbSeparator.tsx
type BreadcrumbSeparatorProps (line 9) | type BreadcrumbSeparatorProps = Partial<
method setup (line 19) | setup(props, { slots, attrs }) {
FILE: components/breadcrumb/__tests__/Breadcrumb.test.js
method render (line 18) | render() {
method render (line 35) | render() {
method render (line 52) | render() {
method render (line 99) | render() {
method render (line 119) | render() {
FILE: components/breadcrumb/style/index.ts
type BreadcrumbToken (line 6) | interface BreadcrumbToken extends FullToken<'Breadcrumb'> {
FILE: components/button/LoadingIcon.tsx
method setup (line 34) | setup(props) {
FILE: components/button/__tests__/index.test.js
method render (line 16) | render() {
method render (line 25) | render() {
method render (line 34) | render() {
method render (line 41) | render() {
method render (line 54) | render() {
method render (line 66) | render() {
method render (line 78) | render() {
method render (line 90) | render() {
method render (line 96) | render() {
method data (line 112) | data() {
method enterLoading (line 118) | enterLoading() {
method render (line 123) | render() {
method data (line 142) | data() {
method enterLoading (line 148) | enterLoading() {
method render (line 153) | render() {
method render (line 172) | render() {
method render (line 185) | render() {
method render (line 198) | render() {
method render (line 205) | render() {
method render (line 212) | render() {
method render (line 221) | render() {
method render (line 257) | render() {
method render (line 271) | render() {
method render (line 284) | render() {
FILE: components/button/__tests__/wave.test.js
function clickButton (line 6) | async function clickButton(wrapper) {
method render (line 18) | render() {
FILE: components/button/button-group.tsx
type ButtonGroupProps (line 17) | type ButtonGroupProps = Partial<ExtractPropTypes<ReturnType<typeof butto...
method setup (line 25) | setup(props, { slots }) {
FILE: components/button/button.tsx
type Loading (line 26) | type Loading = boolean | number;
function isUnBorderedButtonType (line 31) | function isUnBorderedButtonType(type: ButtonType | undefined) {
method setup (line 46) | setup(props, { slots, attrs, emit, expose }) {
FILE: components/button/buttonTypes.ts
type ButtonType (line 8) | type ButtonType = 'link' | 'default' | 'primary' | 'ghost' | 'dashed' | ...
type ButtonShape (line 9) | type ButtonShape = 'default' | 'circle' | 'round';
type ButtonHTMLType (line 11) | type ButtonHTMLType = 'submit' | 'button' | 'reset';
type LegacyButtonType (line 13) | type LegacyButtonType = ButtonType | 'danger';
function convertLegacyProps (line 14) | function convertLegacyProps(type?: LegacyButtonType): ButtonProps {
type ButtonProps (line 45) | type ButtonProps = Partial<ExtractPropTypes<ReturnType<typeof buttonProp...
FILE: components/button/style/index.ts
type ComponentToken (line 10) | interface ComponentToken {}
type ButtonToken (line 12) | interface ButtonToken extends FullToken<'Button'> {
FILE: components/calendar/Header.tsx
type SharedProps (line 13) | interface SharedProps<DateType> {
function YearSelect (line 24) | function YearSelect<DateType>(props: SharedProps<DateType>) {
function MonthSelect (line 78) | function MonthSelect<DateType>(props: SharedProps<DateType>) {
type ModeSwitchProps (line 122) | interface ModeSwitchProps<DateType> extends Omit<SharedProps<DateType>, ...
function ModeSwitch (line 127) | function ModeSwitch<DateType>(props: ModeSwitchProps<DateType>) {
type CalendarHeaderProps (line 145) | interface CalendarHeaderProps<DateType> {
method setup (line 170) | setup(_props, { attrs }) {
FILE: components/calendar/__tests__/index.test.js
function openSelect (line 16) | function openSelect(wrapper, className) {
function findSelectItem (line 20) | function findSelectItem(wrapper) {
function clickSelectItem (line 24) | function clickSelectItem(wrapper, index = 0) {
method render (line 32) | render() {
method render (line 53) | render() {
method render (line 77) | render() {
method render (line 101) | render() {
method render (line 136) | render() {
method render (line 260) | render() {
method render (line 318) | render() {
method render (line 348) | render() {
FILE: components/calendar/generateCalendar.tsx
type InjectDefaultProps (line 22) | type InjectDefaultProps<Props> = Omit<
type SelectInfo (line 30) | interface SelectInfo {
type PickerPanelBaseProps (line 35) | type PickerPanelBaseProps<DateType> = InjectDefaultProps<RCPickerPanelBa...
type PickerPanelDateProps (line 36) | type PickerPanelDateProps<DateType> = InjectDefaultProps<RCPickerPanelDa...
type PickerPanelTimeProps (line 37) | type PickerPanelTimeProps<DateType> = InjectDefaultProps<RCPickerPanelTi...
type PickerProps (line 39) | type PickerProps<DateType> =
type CalendarMode (line 44) | type CalendarMode = 'year' | 'month';
type HeaderRender (line 45) | type HeaderRender<DateType> = (config: {
type CustomRenderType (line 52) | type CustomRenderType<DateType> = (config: { current: DateType }) => Vue...
type CalendarProps (line 54) | interface CalendarProps<DateType> {
function generateCalendar (line 75) | function generateCalendar<
FILE: components/calendar/style/index.tsx
type ComponentToken (line 10) | interface ComponentToken {
type CalendarToken (line 16) | interface CalendarToken extends InputToken<FullToken<'Calendar'>>, Picke...
FILE: components/card/Card.tsx
type CardTabListType (line 15) | interface CardTabListType {
type CardType (line 23) | type CardType = 'inner';
type CardSize (line 24) | type CardSize = 'default' | 'small';
type CardProps (line 52) | type CardProps = Partial<ExtractPropTypes<ReturnType<typeof cardProps>>>;
method setup (line 68) | setup(props, { slots, attrs }) {
FILE: components/card/Grid.tsx
type CardGridProps (line 9) | type CardGridProps = Partial<ExtractPropTypes<ReturnType<typeof cardGrid...
method setup (line 15) | setup(props, { slots }) {
FILE: components/card/Meta.tsx
type CardGridProps (line 14) | type CardGridProps = Partial<ExtractPropTypes<ReturnType<typeof cardMeta...
method setup (line 25) | setup(props, { slots }) {
FILE: components/card/__tests__/index.test.js
method render (line 17) | render() {
method render (line 30) | render() {
method render (line 55) | render() {
method render (line 73) | render() {
FILE: components/card/style/index.tsx
type ComponentToken (line 6) | interface ComponentToken {}
type CardToken (line 8) | interface CardToken extends FullToken<'Card'> {
FILE: components/carousel/__tests__/index.test.js
method render (line 110) | render() {
method render (line 129) | render() {
FILE: components/carousel/index.tsx
type SwipeDirection (line 13) | type SwipeDirection = 'left' | 'down' | 'right' | 'up' | string;
type LazyLoadTypes (line 15) | type LazyLoadTypes = 'ondemand' | 'progressive';
type CarouselEffect (line 17) | type CarouselEffect = 'scrollx' | 'fade';
type DotPosition (line 18) | type DotPosition = 'top' | 'bottom' | 'left' | 'right';
type CarouselRef (line 20) | interface CarouselRef {
type CarouselProps (line 74) | type CarouselProps = Partial<ExtractPropTypes<ReturnType<typeof carousel...
method setup (line 80) | setup(props, { slots, attrs, expose }) {
FILE: components/carousel/style/index.tsx
type ComponentToken (line 5) | interface ComponentToken {
type CarouselToken (line 11) | interface CarouselToken extends FullToken<'Carousel'> {
FILE: components/cascader/__tests__/index.test.js
function $$ (line 7) | function $$(className) {
function filter (line 45) | function filter(inputValue, path) {
function toggleOpen (line 49) | function toggleOpen(wrapper) {
function isOpen (line 53) | function isOpen(wrapper) {
FILE: components/cascader/index.tsx
type FieldNamesType (line 41) | type FieldNamesType = FieldNames;
type FilledFieldNamesType (line 43) | type FilledFieldNamesType = Required<FieldNamesType>;
function highlightKeyword (line 45) | function highlightKeyword(str: string, lowerKeyword: string, prefixCls?:...
type CascaderOptionType (line 99) | interface CascaderOptionType extends DefaultOptionType {
function cascaderProps (line 105) | function cascaderProps<DataNodeType extends CascaderOptionType = Cascade...
type CascaderProps (line 122) | type CascaderProps = Partial<ExtractPropTypes<ReturnType<typeof cascader...
type CascaderRef (line 124) | interface CascaderRef {
method setup (line 138) | setup(props, { attrs, expose, slots, emit }) {
FILE: components/cascader/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type CascaderToken (line 13) | type CascaderToken = FullToken<'Cascader'>;
FILE: components/checkbox/Checkbox.tsx
method setup (line 33) | setup(props, { emit, attrs, slots, expose }) {
FILE: components/checkbox/Group.tsx
method setup (line 17) | setup(props, { slots, attrs, emit, expose }) {
FILE: components/checkbox/__tests__/group.test.js
method render (line 12) | render() {
method render (line 44) | render() {
method render (line 68) | render() {
method render (line 89) | render() {
method render (line 117) | render() {
FILE: components/checkbox/interface.ts
type CheckboxValueType (line 7) | type CheckboxValueType = string | number | boolean;
type CheckboxOptionType (line 8) | interface CheckboxOptionType {
type CheckboxChangeEvent (line 16) | interface CheckboxChangeEvent {
type CheckboxChangeEventTarget (line 23) | interface CheckboxChangeEventTarget extends CheckboxProps {
type CheckboxGroupProps (line 49) | type CheckboxGroupProps = Partial<ExtractPropTypes<ReturnType<typeof che...
type CheckboxProps (line 78) | type CheckboxProps = Partial<ExtractPropTypes<ReturnType<typeof checkbox...
type CheckboxGroupContext (line 80) | type CheckboxGroupContext = {
FILE: components/checkbox/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type CheckboxToken (line 8) | interface CheckboxToken extends FullToken<'Checkbox'> {
function getStyle (line 292) | function getStyle(prefixCls: string, token: FullToken<'Checkbox'>) {
FILE: components/collapse/Collapse.tsx
type Key (line 24) | type Key = number | string;
function getActiveKeysArray (line 26) | function getActiveKeysArray(activeKey: Key | Key[]) {
type CollapseProps (line 36) | type CollapseProps = Partial<ExtractPropTypes<ReturnType<typeof collapse...
method setup (line 51) | setup(props, { attrs, slots, emit }) {
FILE: components/collapse/CollapsePanel.tsx
type CollapsePanelProps (line 11) | type CollapsePanelProps = Partial<ExtractPropTypes<ReturnType<typeof col...
method onItemClick (line 19) | onItemClick() {}
method setup (line 31) | setup(props, { slots, emit, attrs }) {
FILE: components/collapse/PanelContent.tsx
method setup (line 9) | setup(props, { slots }) {
FILE: components/collapse/__tests__/index.test.js
method render (line 7) | render() {
FILE: components/collapse/commonProps.ts
type CollapsibleType (line 5) | type CollapsibleType = 'header' | 'icon' | 'disabled';
type ActiveKeyType (line 7) | type ActiveKeyType = Array<string | number> | string | number;
type PanelProps (line 9) | interface PanelProps {
FILE: components/collapse/style/index.tsx
type ComponentToken (line 6) | interface ComponentToken {}
type CollapseToken (line 8) | type CollapseToken = FullToken<'Collapse'> & {
FILE: components/comment/__tests__/index.test.js
method data (line 14) | data() {
method handleSubmit (line 23) | handleSubmit() {
method handleChange (line 44) | handleChange(e) {
method render (line 48) | render() {
FILE: components/comment/index.tsx
type CommentProps (line 26) | type CommentProps = Partial<ExtractPropTypes<ReturnType<typeof commentPr...
method setup (line 41) | setup(props, { slots, attrs }) {
FILE: components/comment/style/index.ts
type ComponentToken (line 4) | interface ComponentToken {}
type CommentToken (line 6) | type CommentToken = FullToken<'Comment'> & {
FILE: components/config-provider/DisabledContext.ts
type DisabledType (line 4) | type DisabledType = boolean | undefined;
FILE: components/config-provider/SizeContext.ts
type SizeType (line 3) | type SizeType = 'small' | 'middle' | 'large' | undefined;
FILE: components/config-provider/__tests__/index.test.js
method render (line 9) | render() {
method render (line 23) | render() {
method data (line 36) | data() {
method render (line 41) | render() {
FILE: components/config-provider/context.ts
type GlobalFormCOntextProps (line 16) | type GlobalFormCOntextProps = {
type DirectionType (line 20) | type DirectionType = 'ltr' | 'rtl' | undefined;
type CSPConfig (line 36) | interface CSPConfig {
type Theme (line 39) | interface Theme {
type SizeType (line 48) | type SizeType = 'small' | 'middle' | 'large' | undefined;
type Direction (line 50) | type Direction = 'ltr' | 'rtl';
type MappingAlgorithm (line 52) | type MappingAlgorithm = DerivativeFunc<SeedToken, MapToken>;
type ThemeConfig (line 54) | interface ThemeConfig {
type ConfigProviderProps (line 113) | type ConfigProviderProps = Partial<ExtractPropTypes<ReturnType<typeof co...
type ConfigProviderInnerProps (line 115) | interface ConfigProviderInnerProps {
FILE: components/config-provider/cssVariables.ts
function getStyle (line 12) | function getStyle(globalPrefixCls: string, theme: Theme) {
function registerTheme (line 95) | function registerTheme(globalPrefixCls: string, theme: Theme) {
FILE: components/config-provider/hooks/useTheme.ts
function useTheme (line 6) | function useTheme(theme?: Ref<ThemeConfig>, parentTheme?: Ref<ThemeConfi...
FILE: components/config-provider/index.tsx
function getGlobalPrefixCls (line 41) | function getGlobalPrefixCls() {
function getGlobalIconPrefixCls (line 45) | function getGlobalIconPrefixCls() {
type GlobalConfigProviderProps (line 86) | type GlobalConfigProviderProps = {
method setup (line 128) | setup(props, { slots }) {
FILE: components/config-provider/renderEmpty.tsx
type RenderEmptyProps (line 5) | interface RenderEmptyProps {
function renderEmpty (line 29) | function renderEmpty(componentName?: string): VueNode {
type RenderEmptyHandler (line 33) | type RenderEmptyHandler = typeof renderEmpty;
FILE: components/date-picker/PickerTag.tsx
function PickerTag (line 4) | function PickerTag(props: TagProps, { slots, attrs }) {
FILE: components/date-picker/__tests__/DatePicker.test.js
method render (line 58) | render() {
FILE: components/date-picker/__tests__/RangePicker.test.js
method setup (line 27) | setup(props) {
FILE: components/date-picker/__tests__/WeekPicker.test.js
method render (line 17) | render() {
FILE: components/date-picker/__tests__/other.test.js
function matchPicker (line 23) | function matchPicker(name, Picker, props) {
FILE: components/date-picker/__tests__/utils.js
function $$ (line 1) | function $$(className) {
function hasSelected (line 4) | function hasSelected(wrapper, date) {
function openPanel (line 12) | function openPanel(wrapper) {
function clearInput (line 16) | function clearInput(wrapper) {
function nextYear (line 20) | function nextYear() {
function nextMonth (line 24) | function nextMonth() {
function selectDateFromBody (line 28) | function selectDateFromBody(date, index) {
function openPicker (line 36) | function openPicker(wrapper, index = 0) {
function closePicker (line 40) | function closePicker(wrapper, index = 0) {
function selectCell (line 44) | function selectCell(wrapper, text, index = 0) {
FILE: components/date-picker/date-fns.tsx
type DatePickerProps (line 11) | type DatePickerProps = PickerProps<Date> & ExtraDatePickerProps<Date>;
type MonthPickerProps (line 12) | type MonthPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDat...
type WeekPickerProps (line 13) | type WeekPickerProps = Omit<PickerDateProps<Date>, 'picker'> & ExtraDate...
type RangePickerProps (line 14) | type RangePickerProps = BaseRangePickerProps<Date> & ExtraRangePickerPro...
FILE: components/date-picker/dayjs.tsx
type DatePickerProps (line 12) | type DatePickerProps = PickerProps<Dayjs> & ExtraDatePickerProps<Dayjs>;
type MonthPickerProps (line 13) | type MonthPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDa...
type WeekPickerProps (line 14) | type WeekPickerProps = Omit<PickerDateProps<Dayjs>, 'picker'> & ExtraDat...
type RangePickerProps (line 15) | type RangePickerProps = BaseRangePickerProps<Dayjs> & ExtraRangePickerPr...
FILE: components/date-picker/generatePicker/generateRangePicker.tsx
function generateRangePicker (line 28) | function generateRangePicker<DateType, ExtraProps = {}>(
FILE: components/date-picker/generatePicker/generateSinglePicker.tsx
function generateSinglePicker (line 25) | function generateSinglePicker<DateType, ExtraProps = {}>(
FILE: components/date-picker/generatePicker/index.tsx
function toArray (line 13) | function toArray<T>(list: T | T[]): T[] {
function getTimeProps (line 20) | function getTimeProps<DateType, DisabledTime>(
function generatePicker (line 63) | function generatePicker<DateType, ExtraProps extends {} = {}>(
FILE: components/date-picker/generatePicker/interface.ts
type InjectDefaultProps (line 15) | type InjectDefaultProps<Props> = Omit<
type PickerLocale (line 31) | type PickerLocale = {
type AdditionalPickerLocaleProps (line 36) | type AdditionalPickerLocaleProps = {
type AdditionalPickerLocaleLangProps (line 43) | type AdditionalPickerLocaleLangProps = {
type PickerBaseProps (line 57) | type PickerBaseProps<DateType> = InjectDefaultProps<RCPickerBaseProps<Da...
type PickerDateProps (line 58) | type PickerDateProps<DateType> = InjectDefaultProps<RCPickerDateProps<Da...
type PickerTimeProps (line 59) | type PickerTimeProps<DateType> = InjectDefaultProps<RCPickerTimeProps<Da...
type PickerProps (line 61) | type PickerProps<DateType> =
type RangePickerBaseProps (line 67) | type RangePickerBaseProps<DateType> = InjectDefaultProps<RCRangePickerBa...
type RangePickerDateProps (line 68) | type RangePickerDateProps<DateType> = InjectDefaultProps<RCRangePickerDa...
type RangePickerTimeProps (line 69) | type RangePickerTimeProps<DateType> = InjectDefaultProps<RCRangePickerTi...
type RangePickerProps (line 71) | type RangePickerProps<DateType> =
FILE: components/date-picker/generatePicker/props.ts
type DataPickerPlacement (line 31) | type DataPickerPlacement = (typeof DataPickerPlacements)[number];
type RangeShowTimeObject (line 33) | type RangeShowTimeObject<DateType> = Omit<SharedTimeProps<DateType>, 'de...
function commonProps (line 37) | function commonProps<DateType = any>() {
type CommonProps (line 115) | interface CommonProps<DateType> {
function datePickerProps (line 176) | function datePickerProps<DateType = any>() {
type DatePickerProps (line 191) | interface DatePickerProps<DateType> {
function rangePickerProps (line 204) | function rangePickerProps<DateType>() {
type RangePickerProps (line 251) | interface RangePickerProps<DateType> {
type ExtraDatePickerProps (line 286) | type ExtraDatePickerProps<DateType> = {
type ExtraRangePickerProps (line 293) | type ExtraRangePickerProps<DateType> = {
FILE: components/date-picker/moment.tsx
type DatePickerProps (line 12) | type DatePickerProps = PickerProps<Moment> & ExtraDatePickerProps<Moment>;
type MonthPickerProps (line 13) | type MonthPickerProps = Omit<PickerDateProps<Moment>, 'picker'> &
type WeekPickerProps (line 15) | type WeekPickerProps = Omit<PickerDateProps<Moment>, 'picker'> &
type RangePickerProps (line 17) | type RangePickerProps = BaseRangePickerProps<Moment> & ExtraRangePickerP...
FILE: components/date-picker/style/index.ts
type ComponentToken (line 25) | interface ComponentToken {
type PickerPanelToken (line 31) | type PickerPanelToken = {
type PickerToken (line 51) | type PickerToken = InputToken<FullToken<'DatePicker'>> & PickerPanelToken;
type SharedPickerToken (line 53) | type SharedPickerToken = Omit<PickerToken, 'zIndexPopup' | 'presetsWidth...
FILE: components/date-picker/util.ts
function getPlaceholder (line 6) | function getPlaceholder(
function getRangePlaceholder (line 33) | function getRangePlaceholder(
function transPlacement2DropdownAlign (line 57) | function transPlacement2DropdownAlign(
FILE: components/descriptions/Cell.tsx
function notEmpty (line 3) | function notEmpty(val: any) {
type CellProps (line 7) | interface CellProps extends HTMLAttributes {
FILE: components/descriptions/Row.tsx
type CellConfig (line 7) | interface CellConfig {
type RowProps (line 14) | interface RowProps {
FILE: components/descriptions/__tests__/index.test.js
method render (line 23) | render() {
method render (line 47) | render() {
method render (line 66) | render() {
method render (line 87) | render() {
method render (line 106) | render() {
method render (line 123) | render() {
method render (line 138) | render() {
method render (line 151) | render() {
method render (line 166) | render() {
method render (line 191) | render() {
method render (line 212) | render() {
function matchSpan (line 237) | function matchSpan(rowIndex, spans) {
method render (line 253) | render() {
FILE: components/descriptions/index.tsx
type DescriptionsItemProp (line 46) | type DescriptionsItemProp = Partial<
method setup (line 54) | setup(_, { slots }) {
constant DEFAULT_COLUMN_MAP (line 59) | const DEFAULT_COLUMN_MAP: Partial<Record<Breakpoint, number>> = {
function getColumn (line 69) | function getColumn(column: DescriptionsProps['column'], screens: ScreenM...
function getFilledItem (line 86) | function getFilledItem(node: VNode, rowRestCol: number, span?: number): ...
function getRows (line 103) | function getRows(children: VNode[], column: number) {
type DescriptionsProps (line 150) | type DescriptionsProps = HTMLAttributes &
type DescriptionsContextProp (line 153) | interface DescriptionsContextProp {
method setup (line 172) | setup(props, { slots, attrs }) {
FILE: components/descriptions/style/index.ts
type DescriptionsToken (line 6) | interface DescriptionsToken extends FullToken<'Descriptions'> {
FILE: components/divider/index.tsx
type DividerProps (line 28) | type DividerProps = Partial<ExtractPropTypes<ReturnType<typeof dividerPr...
method setup (line 35) | setup(props, { slots, attrs }) {
FILE: components/divider/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type DividerToken (line 11) | interface DividerToken extends FullToken<'Divider'> {
FILE: components/drawer/__tests__/Drawer.test.js
method render (line 24) | render() {
FILE: components/drawer/__tests__/DrawerEvent.test.js
method data (line 17) | data() {
method mounted (line 22) | mounted() {
method onClose (line 28) | onClose() {
method open (line 31) | open() {
method render (line 35) | render() {
FILE: components/drawer/__tests__/MultiDrawer.test.js
function $$ (line 5) | function $$(className) {
method data (line 15) | data() {
method showDrawer (line 22) | showDrawer() {
method onClose (line 25) | onClose() {
method showChildrenDrawer (line 28) | showChildrenDrawer() {
method onChildrenDrawerClose (line 31) | onChildrenDrawerClose() {
method render (line 35) | render() {
FILE: components/drawer/index.tsx
type ILevelMove (line 30) | type ILevelMove = number | [number, number];
type placementType (line 33) | type placementType = (typeof PlacementTypes)[number];
type sizeType (line 36) | type sizeType = (typeof SizeTypes)[number];
type PushState (line 38) | interface PushState {
type getContainerFunc (line 43) | type getContainerFunc = () => HTMLElement;
type DrawerProps (line 103) | type DrawerProps = Partial<ExtractPropTypes<ReturnType<typeof drawerProp...
method setup (line 127) | setup(props, { emit, slots, attrs }) {
FILE: components/drawer/style/index.ts
type ComponentToken (line 5) | interface ComponentToken {
type DrawerToken (line 9) | interface DrawerToken extends FullToken<'Drawer'> {
FILE: components/dropdown/__tests__/dropdown-button.test.js
method render (line 42) | render() {
FILE: components/dropdown/dropdown-button.tsx
type DropdownButtonProps (line 16) | type DropdownButtonProps = Partial<ExtractPropTypes<ReturnType<typeof dr...
method setup (line 36) | setup(props, { slots, attrs, emit }) {
FILE: components/dropdown/dropdown.tsx
type DropdownProps (line 19) | type DropdownProps = Partial<ExtractPropTypes<ReturnType<typeof dropdown...
method setup (line 36) | setup(props, { slots, attrs, emit }) {
FILE: components/dropdown/props.ts
type Align (line 9) | type Align = {
type Trigger (line 22) | type Trigger = 'click' | 'hover' | 'contextmenu';
type DropdownArrowOptions (line 24) | type DropdownArrowOptions = {
FILE: components/dropdown/style/index.ts
type ComponentToken (line 17) | interface ComponentToken {
type DropdownToken (line 21) | interface DropdownToken extends FullToken<'Dropdown'> {
FILE: components/empty/__tests__/index.test.js
method render (line 10) | render() {
method render (line 19) | render() {
FILE: components/empty/empty.tsx
method setup (line 8) | setup() {
FILE: components/empty/index.tsx
type Locale (line 14) | interface Locale {
type EmptyProps (line 25) | type EmptyProps = Partial<ExtractPropTypes<ReturnType<typeof emptyProps>>>;
method setup (line 32) | setup(props, { slots = {}, attrs }) {
FILE: components/empty/simple.tsx
method setup (line 7) | setup() {
FILE: components/empty/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type EmptyToken (line 8) | interface EmptyToken extends FullToken<'Empty'> {
FILE: components/flex/__tests__/index.test.js
method render (line 10) | render() {
method render (line 15) | render() {
method render (line 27) | render() {
method render (line 32) | render() {
method render (line 42) | render() {
method render (line 47) | render() {
FILE: components/flex/index.tsx
method setup (line 17) | setup(props, { slots, attrs }) {
FILE: components/flex/interface.ts
type FlexProps (line 16) | type FlexProps = Partial<ExtractPropTypes<ReturnType<typeof flexProps>> ...
FILE: components/flex/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {
type FlexToken (line 12) | interface FlexToken extends FullToken<'Flex'> {
FILE: components/flex/utils.ts
function createFlexClassNames (line 60) | function createFlexClassNames(prefixCls: string, props: FlexProps) {
FILE: components/float-button/BackTop.tsx
method setup (line 38) | setup(props, { slots, attrs, emit }) {
FILE: components/float-button/FloatButton.tsx
method setup (line 23) | setup(props, { attrs, slots }) {
FILE: components/float-button/FloatButtonContent.tsx
method setup (line 11) | setup(props, { attrs, slots }) {
FILE: components/float-button/FloatButtonGroup.tsx
method setup (line 26) | setup(props, { attrs, slots, emit }) {
FILE: components/float-button/__tests__/index.test.js
method render (line 10) | render() {
method render (line 19) | render() {
method render (line 28) | render() {
method render (line 35) | render() {
method render (line 42) | render() {
FILE: components/float-button/__tests__/wave.test.js
function clickFloatButton (line 6) | async function clickFloatButton(wrapper) {
method render (line 18) | render() {
method render (line 30) | render() {
method render (line 42) | render() {
method render (line 54) | render() {
method render (line 66) | render() {
FILE: components/float-button/context.ts
type FloatButtonGroupContext (line 6) | interface FloatButtonGroupContext {
FILE: components/float-button/interface.ts
type FloatButtonType (line 7) | type FloatButtonType = 'default' | 'primary';
type FloatButtonShape (line 9) | type FloatButtonShape = 'circle' | 'square';
type FloatButtonGroupTrigger (line 11) | type FloatButtonGroupTrigger = 'click' | 'hover';
type FloatButtonBadgeProps (line 13) | type FloatButtonBadgeProps = Omit<BadgeProps, 'status' | 'text' | 'title...
type FloatButtonProps (line 29) | type FloatButtonProps = Partial<ExtractPropTypes<ReturnType<typeof float...
type FloatButtonContentProps (line 37) | type FloatButtonContentProps = Partial<
type FloatButtonGroupProps (line 55) | type FloatButtonGroupProps = Partial<
type BackTopProps (line 70) | type BackTopProps = Partial<ExtractPropTypes<ReturnType<typeof backTopPr...
FILE: components/float-button/style/index.ts
type ComponentToken (line 11) | interface ComponentToken {
type FloatButtonToken (line 15) | type FloatButtonToken = FullToken<'FloatButton'> & {
FILE: components/form/ErrorList.tsx
type ErrorListProps (line 9) | interface ErrorListProps {
method setup (line 21) | setup(props, { attrs }) {
FILE: components/form/Form.tsx
type RequiredMark (line 45) | type RequiredMark = boolean | 'optional';
type FormLayout (line 46) | type FormLayout = 'horizontal' | 'inline' | 'vertical';
type FormProps (line 77) | type FormProps = Partial<ExtractPropTypes<ReturnType<typeof formProps>>>;
type FormExpose (line 79) | type FormExpose = {
type FormInstance (line 100) | type FormInstance = ComponentPublicInstance<FormProps, FormExpose>;
function isEqualName (line 102) | function isEqualName(name1: NamePath, name2: NamePath) {
method setup (line 118) | setup(props, { emit, slots, expose, attrs }) {
FILE: components/form/FormItem.tsx
type ValidateStatus (line 56) | type ValidateStatus = (typeof ValidateStatuses)[number];
type FieldExpose (line 58) | interface FieldExpose {
function getPropByPath (line 76) | function getPropByPath(obj: any, namePathList: any, strict?: boolean) {
type FormItemProps (line 132) | type FormItemProps = Partial<ExtractPropTypes<ReturnType<typeof formItem...
type FormItemExpose (line 134) | type FormItemExpose = {
type FormItemInstance (line 141) | type FormItemInstance = ComponentPublicInstance<FormItemProps, FormItemE...
method setup (line 161) | setup(props, { slots, attrs, expose }) {
FILE: components/form/FormItemContext.ts
type FormItemContext (line 16) | type FormItemContext = {
type InternalFormItemContext (line 23) | type InternalFormItemContext = {
method setup (line 101) | setup(_, { slots }) {
type FormItemStatusContextProps (line 110) | interface FormItemStatusContextProps {
method setup (line 121) | setup(_, { slots }) {
FILE: components/form/FormItemInput.tsx
type FormItemInputMiscProps (line 12) | interface FormItemInputMiscProps {
type FormItemInputProps (line 19) | interface FormItemInputProps {
method setup (line 47) | setup(props, { slots }) {
FILE: components/form/FormItemLabel.tsx
type FormItemLabelProps (line 14) | interface FormItemLabelProps {
FILE: components/form/context.ts
type FormContextProps (line 9) | interface FormContextProps {
type FormItemPrefixContextProps (line 60) | interface FormItemPrefixContextProps {
FILE: components/form/interface.ts
type FormLabelAlign (line 3) | type FormLabelAlign = 'left' | 'right';
type InternalNamePath (line 5) | type InternalNamePath = (string | number)[];
type NamePath (line 6) | type NamePath = string | number | InternalNamePath;
type StoreValue (line 8) | type StoreValue = any;
type Store (line 9) | interface Store {
type Meta (line 13) | interface Meta {
type InternalFieldData (line 20) | interface InternalFieldData extends Meta {
type FieldData (line 27) | interface FieldData extends Partial<Omit<InternalFieldData, 'name'>> {
type RuleType (line 31) | type RuleType =
type Validator (line 46) | type Validator = (
type ValidatorRule (line 52) | interface ValidatorRule {
type BaseRule (line 59) | interface BaseRule {
type AggregationRule (line 87) | type AggregationRule = BaseRule & Partial<ValidatorRule>;
type ArrayRule (line 89) | interface ArrayRule extends Omit<AggregationRule, 'type'> {
type RuleObject (line 94) | type RuleObject = AggregationRule | ArrayRule;
type Rule (line 96) | type Rule = RuleObject;
type ValidateErrorEntity (line 98) | interface ValidateErrorEntity<Values = any> {
type FieldError (line 104) | interface FieldError {
type RuleError (line 109) | interface RuleError {
type ValidateOptions (line 114) | interface ValidateOptions {
type InternalValidateFields (line 119) | type InternalValidateFields = (
type ValidateFields (line 123) | type ValidateFields = (nameList?: NamePath[]) => Promise<Store>;
type ValueUpdateInfo (line 126) | interface ValueUpdateInfo {
type ValidateFinishInfo (line 131) | interface ValidateFinishInfo {
type ResetInfo (line 135) | interface ResetInfo {
type SetFieldInfo (line 139) | interface SetFieldInfo {
type DependenciesUpdateInfo (line 144) | interface DependenciesUpdateInfo {
type NotifyInfo (line 154) | type NotifyInfo =
type ValuedNotifyInfo (line 161) | type ValuedNotifyInfo = NotifyInfo & {
type Callbacks (line 165) | interface Callbacks<Values = any> {
type EventArgs (line 178) | type EventArgs = any[];
type ValidateMessage (line 180) | type ValidateMessage = string | (() => string);
type ValidateMessages (line 181) | interface ValidateMessages {
FILE: components/form/style/index.ts
type FormToken (line 8) | interface FormToken extends FullToken<'Form'> {
FILE: components/form/useForm.ts
type DebounceSettings (line 14) | interface DebounceSettings {
function isRequired (line 22) | function isRequired(rules: any[]) {
function toArray (line 36) | function toArray(value: string | string[]) {
type Props (line 44) | interface Props {
type validateOptions (line 48) | interface validateOptions {
type namesType (line 54) | type namesType = string | string[];
type ValidateInfo (line 55) | interface ValidateInfo {
type validateInfos (line 62) | interface validateInfos {
function getPropByPath (line 66) | function getPropByPath(obj: Props, path: string, strict: boolean) {
function useForm (line 93) | function useForm(
FILE: components/form/utils/asyncUtil.ts
function allPromiseFinish (line 3) | function allPromiseFinish(promiseList: Promise<FieldError>[]): Promise<F...
FILE: components/form/utils/typeUtil.ts
function toArray (line 1) | function toArray<T>(value?: T | T[] | null): T[] {
FILE: components/form/utils/useDebounce.ts
function useDebounce (line 4) | function useDebounce<T>(value: Ref<T[]>): Ref<T[]> {
FILE: components/form/utils/validateUtil.ts
function replaceMessage (line 17) | function replaceMessage(template: string, kv: Record<string, string>): s...
function validateRule (line 24) | async function validateRule(
function validateRules (line 99) | function validateRules(
function finishOnAllFailed (line 215) | async function finishOnAllFailed(rulePromises: Promise<RuleError>[]): Pr...
function finishOnFirstFailed (line 225) | async function finishOnFirstFailed(rulePromises: Promise<RuleError>[]): ...
FILE: components/form/utils/valueUtil.ts
function getNamePath (line 13) | function getNamePath(path: NamePath | null): InternalNamePath {
function getValue (line 17) | function getValue<T>(store: T, namePath: InternalNamePath) {
function setValue (line 22) | function setValue<T>(
function containsNamePath (line 32) | function containsNamePath(namePathList: InternalNamePath[], namePath: In...
function isObject (line 36) | function isObject(obj: any) {
function internalSetValues (line 44) | function internalSetValues<T>(store: T, values: T): T {
function setValues (line 63) | function setValues<T>(store: T, ...restValues: T[]): T {
function cloneByNamePathList (line 70) | function cloneByNamePathList<T>(store: T, namePathList: InternalNamePath...
function matchNamePath (line 80) | function matchNamePath(
FILE: components/grid/Col.tsx
type ColSpanType (line 8) | type ColSpanType = number | string;
type FlexType (line 10) | type FlexType = number | 'none' | 'auto' | string;
type ColSize (line 12) | interface ColSize {
function parseFlex (line 20) | function parseFlex(flex: FlexType): string {
type ColProps (line 66) | type ColProps = Partial<ExtractPropTypes<ReturnType<typeof colProps>>>;
method setup (line 74) | setup(props, { slots, attrs }) {
FILE: components/grid/Row.tsx
type Responsive (line 22) | type Responsive = 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs';
type ResponsiveLike (line 23) | type ResponsiveLike<T> = {
type Gap (line 27) | type Gap = number | undefined;
type Gutter (line 28) | type Gutter = number | undefined | Partial<Record<Breakpoint, number>>;
type ResponsiveAligns (line 30) | type ResponsiveAligns = ResponsiveLike<(typeof RowAligns)[number]>;
type ResponsiveJustify (line 31) | type ResponsiveJustify = ResponsiveLike<(typeof RowJustify)[number]>;
type rowContextState (line 33) | interface rowContextState {
type RowProps (line 45) | type RowProps = Partial<ExtractPropTypes<ReturnType<typeof rowProps>>>;
method setup (line 52) | setup(props, { slots, attrs }) {
FILE: components/grid/__tests__/index.test.js
method render (line 23) | render() {
FILE: components/grid/context.ts
type RowContext (line 4) | interface RowContext {
FILE: components/grid/style/index.ts
type GridRowToken (line 5) | interface GridRowToken extends FullToken<'Grid'> {}
type GridColToken (line 7) | interface GridColToken extends FullToken<'Grid'> {
FILE: components/image/PreviewGroup.tsx
type ImageGroupProps (line 34) | type ImageGroupProps = Partial<ExtractPropTypes<ReturnType<typeof previe...
method setup (line 41) | setup(props, { attrs, slots }) {
FILE: components/image/__tests__/index.test.js
method render (line 8) | render() {
method render (line 21) | render() {
FILE: components/image/index.tsx
type ImageProps (line 12) | type ImageProps = Partial<
method setup (line 20) | setup(props, { slots, attrs }) {
FILE: components/image/style/index.ts
type ComponentToken (line 9) | interface ComponentToken {
type ImageToken (line 16) | interface ImageToken extends FullToken<'Image'> {
type PositionType (line 22) | type PositionType = 'static' | 'relative' | 'fixed' | 'absolute' | 'stic...
FILE: components/input-number/__tests__/index.test.js
method render (line 15) | render() {
FILE: components/input-number/index.tsx
type InputNumberProps (line 45) | type InputNumberProps = Partial<ExtractPropTypes<ReturnType<typeof input...
method setup (line 62) | setup(props, { emit, expose, attrs, slots }) {
FILE: components/input-number/src/InputNumber.tsx
method setup (line 92) | setup(props, { attrs, slots, emit, expose }) {
FILE: components/input-number/src/StepHandler.tsx
constant STEP_INTERVAL (line 10) | const STEP_INTERVAL = 200;
constant STEP_DELAY (line 15) | const STEP_DELAY = 600;
method setup (line 32) | setup(props, { slots, emit }) {
FILE: components/input-number/src/hooks/useCursor.ts
function useCursor (line 9) | function useCursor(
FILE: components/input-number/src/utils/MiniDecimal.ts
type ValueType (line 6) | type ValueType = string | number;
function isEmpty (line 8) | function isEmpty(value: ValueType) {
type DecimalClass (line 12) | interface DecimalClass {
class NumberDecimal (line 39) | class NumberDecimal implements DecimalClass {
method constructor (line 44) | constructor(value: ValueType) {
method negate (line 54) | negate() {
method add (line 58) | add(value: ValueType) {
method isEmpty (line 84) | isEmpty() {
method isNaN (line 88) | isNaN() {
method isInvalidate (line 92) | isInvalidate() {
method equals (line 96) | equals(target: DecimalClass) {
method lessEquals (line 100) | lessEquals(target: DecimalClass) {
method toNumber (line 104) | toNumber() {
method toString (line 108) | toString(safe = true) {
class BigIntDecimal (line 121) | class BigIntDecimal implements DecimalClass {
method constructor (line 131) | constructor(value: string | number) {
method getMark (line 167) | private getMark() {
method getIntegerStr (line 171) | private getIntegerStr() {
method getDecimalStr (line 175) | private getDecimalStr() {
method alignDecimal (line 183) | private alignDecimal(decimalLength: number): bigint {
method negate (line 191) | negate() {
method add (line 197) | add(value: ValueType): BigIntDecimal {
method isEmpty (line 222) | isEmpty() {
method isNaN (line 226) | isNaN() {
method isInvalidate (line 230) | isInvalidate() {
method equals (line 234) | equals(target: DecimalClass) {
method lessEquals (line 238) | lessEquals(target: DecimalClass) {
method toNumber (line 242) | toNumber() {
method toString (line 249) | toString(safe = true) {
function getMiniDecimal (line 262) | function getMiniDecimal(value: ValueType): DecimalClass {
function toFixed (line 275) | function toFixed(numStr: string, separatorStr: string, precision?: numbe...
FILE: components/input-number/src/utils/numberUtil.ts
function trimNumber (line 6) | function trimNumber(numStr: string) {
function isE (line 49) | function isE(number: string | number) {
function getNumberPrecision (line 59) | function getNumberPrecision(number: string | number) {
function num2str (line 80) | function num2str(number: number): string {
function validateNumber (line 97) | function validateNumber(num: string | number) {
FILE: components/input-number/src/utils/supportUtil.ts
function supportBigInt (line 1) | function supportBigInt() {
FILE: components/input-number/style/index.tsx
type ComponentToken (line 17) | interface ComponentToken {
type InputNumberToken (line 25) | type InputNumberToken = InputToken<FullToken<'InputNumber'>>;
FILE: components/input/ClearableLabeledInput.tsx
method setup (line 45) | setup(props, { slots, attrs }) {
FILE: components/input/Group.tsx
method setup (line 20) | setup(props, { slots, attrs }) {
FILE: components/input/Input.tsx
method setup (line 27) | setup(props, { slots, attrs, expose, emit }) {
FILE: components/input/Password.tsx
method setup (line 34) | setup(props, { slots, attrs, expose, emit }) {
FILE: components/input/ResizableTextArea.tsx
constant RESIZE_START (line 21) | const RESIZE_START = 0;
constant RESIZE_MEASURING (line 22) | const RESIZE_MEASURING = 1;
constant RESIZE_STABLE (line 23) | const RESIZE_STABLE = 2;
method setup (line 30) | setup(props, { attrs, emit, expose }) {
FILE: components/input/Search.tsx
method setup (line 34) | setup(props, { slots, attrs, expose, emit }) {
FILE: components/input/TextArea.tsx
function fixEmojiLength (line 28) | function fixEmojiLength(value: string, maxLength: number) {
function setTriggerValue (line 32) | function setTriggerValue(
method setup (line 57) | setup(props, { attrs, expose, emit }) {
FILE: components/input/__tests__/Search.test.js
method render (line 14) | render() {
method render (line 28) | render() {
method render (line 41) | render() {
method render (line 50) | render() {
FILE: components/input/__tests__/index.test.js
method render (line 177) | render() {
FILE: components/input/calculateNodeHeight.tsx
constant HIDDEN_TEXTAREA_STYLE (line 6) | const HIDDEN_TEXTAREA_STYLE = `
constant SIZING_STYLE (line 19) | const SIZING_STYLE = [
type NodeType (line 40) | interface NodeType {
function calculateNodeStyling (line 50) | function calculateNodeStyling(node: HTMLElement, useCache = false) {
function calculateAutoSizeStyle (line 89) | function calculateAutoSizeStyle(
FILE: components/input/inputProps.ts
type AutoSizeType (line 10) | interface AutoSizeType {
type InputProps (line 23) | type InputProps = Partial<ExtractPropTypes<ReturnType<typeof inputProps>>>;
type ShowCountProps (line 24) | interface ShowCountProps {
type TextAreaProps (line 40) | type TextAreaProps = Partial<ExtractPropTypes<ReturnType<typeof textArea...
FILE: components/input/style/index.ts
type InputToken (line 8) | type InputToken<T extends GlobalToken = FullToken<'Input'>> = T & {
function initInputToken (line 877) | function initInputToken<T extends GlobalToken = GlobalToken>(token: T): ...
FILE: components/input/util.ts
function hasPrefixSuffix (line 10) | function hasPrefixSuffix(propsAndSlots: any) {
function hasAddon (line 18) | function hasAddon(propsAndSlots: any) {
FILE: components/layout/Sider.tsx
type CollapseType (line 32) | type CollapseType = 'clickTrigger' | 'responsive';
type SiderProps (line 53) | type SiderProps = Partial<ExtractPropTypes<ReturnType<typeof siderProps>>>;
type SiderContextProps (line 55) | interface SiderContextProps {
method setup (line 80) | setup(props, { emit, attrs, slots }) {
FILE: components/layout/__tests__/index.test.js
method render (line 15) | render() {
method render (line 33) | render() {
method render (line 53) | render() {
FILE: components/layout/injectionKey.ts
type SiderCollapsed (line 3) | type SiderCollapsed = Ref<boolean>;
type SiderHookProvider (line 7) | interface SiderHookProvider {
FILE: components/layout/layout.tsx
type BasicProps (line 13) | type BasicProps = Partial<ExtractPropTypes<ReturnType<typeof basicProps>...
type GeneratorArgument (line 15) | type GeneratorArgument = {
function generator (line 21) | function generator({ suffixCls, tagName, name }: GeneratorArgument) {
method setup (line 46) | setup(props, { slots }) {
method setup (line 55) | setup(props, { slots, attrs }) {
FILE: components/layout/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {
type LayoutToken (line 12) | interface LayoutToken extends FullToken<'Layout'> {
FILE: components/list/Item.tsx
type ListItemProps (line 22) | type ListItemProps = Partial<ExtractPropTypes<ReturnType<typeof listItem...
method setup (line 34) | setup(props, { slots, attrs }) {
FILE: components/list/ItemMeta.tsx
type ListItemMetaProps (line 14) | type ListItemMetaProps = Partial<ExtractPropTypes<ReturnType<typeof list...
method setup (line 28) | setup(props, { slots }) {
FILE: components/list/__tests__/empty.test.js
method render (line 7) | render() {
FILE: components/list/__tests__/index.test.js
method render (line 13) | render() {
FILE: components/list/__tests__/loading.test.js
method render (line 11) | render() {
method render (line 23) | render() {
method render (line 32) | render() {
FILE: components/list/contextKey.ts
type ListContext (line 3) | interface ListContext {
FILE: components/list/index.tsx
type ColumnType (line 36) | type ColumnType = 'gutter' | 'column' | 'xs' | 'sm' | 'md' | 'lg' | 'xl'...
type ColumnCount (line 38) | type ColumnCount = number;
type ListGridType (line 39) | interface ListGridType {
type ListSize (line 51) | type ListSize = 'small' | 'default' | 'large';
type ListItemLayout (line 52) | type ListItemLayout = 'horizontal' | 'vertical';
type ListLocale (line 73) | interface ListLocale {
type ListProps (line 77) | type ListProps = Partial<ExtractPropTypes<ReturnType<typeof listProps>>>;
method setup (line 101) | setup(props, { slots, attrs }) {
FILE: components/list/style/index.tsx
type ComponentToken (line 6) | interface ComponentToken {
type ListToken (line 10) | interface ListToken extends FullToken<'List'> {
FILE: components/locale-provider/__tests__/index.test.js
method render (line 144) | render() {
method render (line 183) | render() {
method mounted (line 200) | mounted() {
method render (line 205) | render() {
method render (line 213) | render() {
method data (line 244) | data() {
method render (line 249) | render() {
FILE: components/locale/LocaleReceiver.tsx
type LocaleComponentName (line 5) | type LocaleComponentName = Exclude<keyof Locale, 'locale'>;
type LocaleReceiverProps (line 7) | interface LocaleReceiverProps {
type LocaleInterface (line 13) | interface LocaleInterface {
type LocaleReceiverContext (line 17) | interface LocaleReceiverContext {
method setup (line 35) | setup(props, { slots }) {
function useLocaleReceiver (line 66) | function useLocaleReceiver<T extends LocaleComponentName>(
FILE: components/locale/index.tsx
type TransferLocaleForEmpty (line 15) | interface TransferLocaleForEmpty {
type Locale (line 18) | interface Locale {
type LocaleProviderProps (line 55) | interface LocaleProviderProps {
constant ANT_MARK (line 61) | const ANT_MARK = 'internalMark';
method setup (line 72) | setup(props, { slots }) {
FILE: components/mentions/__tests__/index.test.js
function $$ (line 9) | function $$(className) {
function triggerInput (line 13) | function triggerInput(wrapper, text = '') {
method render (line 47) | render() {
method render (line 67) | render() {
method render (line 83) | render() {
FILE: components/mentions/index.tsx
type MentionsConfig (line 22) | interface MentionsConfig {
type MentionsOptionProps (line 27) | interface MentionsOptionProps {
type MentionsEntity (line 34) | interface MentionsEntity {
type MentionPlacement (line 39) | type MentionPlacement = 'top' | 'bottom';
function loadingFilterOption (line 41) | function loadingFilterOption() {
type MentionsProps (line 100) | type MentionsProps = Partial<ExtractPropTypes<ReturnType<typeof mentions...
method setup (line 112) | setup(props, { slots, emit, attrs, expose }) {
FILE: components/mentions/style/index.ts
type ComponentToken (line 14) | interface ComponentToken {
type MentionsToken (line 20) | type MentionsToken = InputToken<FullToken<'Mentions'>>;
FILE: components/menu/__tests__/index.test.js
function $$ (line 8) | function $$(className) {
method render (line 15) | render() {
method render (line 38) | render() {
method render (line 63) | render() {
method render (line 85) | render() {
method default (line 132) | default() {
method render (line 137) | render() {
method default (line 195) | default() {
method render (line 200) | render() {
method render (line 233) | render() {
method render (line 259) | render() {
method render (line 295) | render() {
method render (line 345) | render() {
method render (line 404) | render() {
method render (line 498) | render() {
FILE: components/menu/src/Divider.tsx
type MenuDividerProps (line 10) | type MenuDividerProps = Partial<ExtractPropTypes<ReturnType<typeof menuD...
method setup (line 16) | setup(props) {
FILE: components/menu/src/InlineSubMenuList.tsx
method setup (line 15) | setup(props, { slots }) {
FILE: components/menu/src/ItemGroup.tsx
type MenuItemGroupProps (line 17) | type MenuItemGroupProps = Partial<ExtractPropTypes<ReturnType<typeof men...
method setup (line 28) | setup(props, { slots, attrs }) {
FILE: components/menu/src/Menu.tsx
type MenuProps (line 90) | type MenuProps = Partial<ExtractPropTypes<ReturnType<typeof menuProps>>>;
constant EMPTY_LIST (line 92) | const EMPTY_LIST: string[] = [];
method setup (line 103) | setup(props, { slots, emit, attrs }) {
FILE: components/menu/src/MenuItem.tsx
type MenuItemProps (line 42) | type MenuItemProps = Partial<ExtractPropTypes<ReturnType<typeof menuItem...
method setup (line 55) | setup(props, { slots, emit, attrs }) {
FILE: components/menu/src/OverrideContext.ts
type OverrideContextProps (line 6) | interface OverrideContextProps {
FILE: components/menu/src/PopupTrigger.tsx
method setup (line 37) | setup(props, { slots, emit }) {
FILE: components/menu/src/SubMenu.tsx
type SubMenuProps (line 55) | type SubMenuProps = Partial<ExtractPropTypes<ReturnType<typeof subMenuPr...
method setup (line 68) | setup(props, { slots, attrs, emit }) {
FILE: components/menu/src/hooks/useDirectionStyle.ts
function useDirectionStyle (line 5) | function useDirectionStyle(level: ComputedRef<number>): ComputedRef<CSSP...
FILE: components/menu/src/hooks/useItems.tsx
type MenuItemType (line 17) | interface MenuItemType extends VcMenuItemType {
type SubMenuType (line 23) | interface SubMenuType extends Omit<VcSubMenuType, 'children'> {
type MenuItemGroupType (line 28) | interface MenuItemGroupType extends Omit<VcMenuItemGroupType, 'children'> {
type MenuDividerType (line 33) | interface MenuDividerType extends VcMenuDividerType {
type ItemType (line 38) | type ItemType = MenuItemType | SubMenuType | MenuItemGroupType | MenuDiv...
function convertItemsToNodes (line 40) | function convertItemsToNodes(
function useItems (line 116) | function useItems(props: MenuProps) {
FILE: components/menu/src/hooks/useKeyPath.ts
constant OVERFLOW_KEY (line 6) | const OVERFLOW_KEY = '$$__vc-menu-more__key';
method setup (line 32) | setup(_props, { slots }) {
FILE: components/menu/src/hooks/useMenuContext.ts
type StoreMenuInfo (line 13) | interface StoreMenuInfo {
type MenuContextProps (line 21) | interface MenuContextProps {
method setup (line 117) | setup(props, { slots }) {
FILE: components/menu/src/interface.ts
type ItemSharedProps (line 6) | interface ItemSharedProps {
type SubMenuType (line 11) | interface SubMenuType extends ItemSharedProps {
type MenuItemType (line 41) | interface MenuItemType extends ItemSharedProps {
type MenuItemGroupType (line 58) | interface MenuItemGroupType extends ItemSharedProps {
type MenuDividerType (line 66) | interface MenuDividerType extends ItemSharedProps {
type ItemType (line 70) | type ItemType = SubMenuType | MenuItemType | MenuItemGroupType | MenuDiv...
type MenuTheme (line 72) | type MenuTheme = 'light' | 'dark';
type MenuMode (line 75) | type MenuMode = 'horizontal' | 'vertical' | 'inline';
type BuiltinPlacements (line 77) | type BuiltinPlacements = Record<string, any>;
type TriggerSubMenuAction (line 79) | type TriggerSubMenuAction = 'click' | 'hover';
type RenderIconInfo (line 81) | interface RenderIconInfo {
type RenderIconType (line 88) | type RenderIconType = (props: RenderIconInfo) => any;
type MenuInfo (line 90) | interface MenuInfo {
type MenuTitleInfo (line 99) | interface MenuTitleInfo {
type MenuHoverEventHandler (line 105) | type MenuHoverEventHandler = (info: { key: Key; domEvent: MouseEvent }) ...
type SelectInfo (line 108) | interface SelectInfo extends MenuInfo {
type SelectEventHandler (line 112) | type SelectEventHandler = (info: SelectInfo) => void;
type MenuClickEventHandler (line 115) | type MenuClickEventHandler = (info: MenuInfo) => void;
FILE: components/menu/style/index.ts
type ComponentToken (line 14) | interface ComponentToken {
type MenuToken (line 61) | interface MenuToken extends FullToken<'Menu'> {
FILE: components/message/PurePanel.tsx
type PureContentProps (line 23) | interface PureContentProps {
method setup (line 34) | setup(props, { slots }) {
type PurePanelProps (line 46) | interface PurePanelProps
method setup (line 58) | setup(props, { slots, attrs }) {
FILE: components/message/index.tsx
function getKeyThenIncreaseKey (line 24) | function getKeyThenIncreaseKey() {
type ConfigOptions (line 28) | interface ConfigOptions {
function setMessageConfig (line 38) | function setMessageConfig(options: ConfigOptions) {
function getMessageInstance (line 68) | function getMessageInstance(args: MessageArgsProps, callback: (i: Notifi...
type NoticeType (line 98) | type NoticeType = 'info' | 'success' | 'error' | 'warning' | 'loading';
type ThenableArgument (line 100) | interface ThenableArgument {
type MessageType (line 112) | interface MessageType extends PromiseLike<any> {
type MessageArgsProps (line 116) | interface MessageArgsProps {
function notice (line 132) | function notice(args: MessageArgsProps): MessageType {
type ConfigDuration (line 179) | type ConfigDuration = number;
type JointContent (line 180) | type JointContent = VueNode | MessageArgsProps;
type ConfigOnClose (line 181) | type ConfigOnClose = () => void;
function isArgsProps (line 183) | function isArgsProps(content: JointContent): content is MessageArgsProps {
method destroy (line 193) | destroy(messageKey?: Key) {
function attachTypeApi (line 207) | function attachTypeApi(originalApi: MessageApi, type: NoticeType) {
type MessageInstance (line 230) | interface MessageInstance {
type MessageApi (line 240) | interface MessageApi extends MessageInstance {
FILE: components/message/interface.ts
type NoticeType (line 4) | type NoticeType = 'info' | 'success' | 'error' | 'warning' | 'loading';
type ConfigOptions (line 6) | interface ConfigOptions {
type ArgsProps (line 16) | interface ArgsProps {
type JointContent (line 28) | type JointContent = VueNode | ArgsProps;
type MessageType (line 30) | interface MessageType extends PromiseLike<boolean> {
type TypeOpen (line 34) | type TypeOpen = (
type MessageInstance (line 40) | interface MessageInstance {
FILE: components/message/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {
type MessageToken (line 14) | interface MessageToken extends FullToken<'Message'> {
FILE: components/message/useMessage.tsx
constant DEFAULT_OFFSET (line 23) | const DEFAULT_OFFSET = 8;
constant DEFAULT_DURATION (line 24) | const DEFAULT_DURATION = 3;
type HolderProps (line 29) | type HolderProps = ConfigOptions & {
type HolderRef (line 33) | interface HolderRef extends NotificationAPI {
method setup (line 53) | setup(props, { expose }) {
function useInternalMessage (line 115) | function useInternalMessage(
function useMessage (line 228) | function useMessage(messageConfig?: ConfigOptions) {
FILE: components/modal/ConfirmDialog.tsx
type ConfirmDialogProps (line 14) | interface ConfirmDialogProps extends ModalFuncProps {
function renderSomeContent (line 25) | function renderSomeContent(someContent: any) {
method setup (line 75) | setup(props, { attrs }) {
FILE: components/modal/Modal.tsx
type MousePosition (line 22) | type MousePosition = { x: number; y: number } | null;
type ModalProps (line 89) | type ModalProps = Partial<ExtractPropTypes<ReturnType<typeof modalProps>>>;
type ModalFuncProps (line 91) | interface ModalFuncProps {
type getContainerFunc (line 140) | type getContainerFunc = () => HTMLElement;
type ModalFunc (line 142) | type ModalFunc = (props: ModalFuncProps) => {
type ModalLocale (line 147) | interface ModalLocale {
method setup (line 162) | setup(props, { emit, slots, attrs }) {
FILE: components/modal/__tests__/Modal.test.js
method getContainer (line 9) | getContainer() {
method render (line 13) | render() {
method render (line 32) | render() {
method render (line 58) | render() {
FILE: components/modal/__tests__/confirm.test.js
function $$ (line 23) | function $$(className) {
function open (line 27) | function open(args) {
FILE: components/modal/confirm.tsx
type ConfigUpdate (line 11) | type ConfigUpdate = ModalFuncProps | ((prevConfig: ModalFuncProps) => Mo...
type ModalStaticFunctions (line 12) | type ModalStaticFunctions<T = ModalFunc> = Record<NonNullable<ModalFuncP...
type ModalFunc (line 14) | type ModalFunc = (props: ModalFuncProps) => {
function destroy (line 27) | function destroy(...args: any[]) {
function close (line 46) | function close(this: typeof close, ...args: any[]) {
function update (line 63) | function update(configUpdate: ConfigUpdate) {
function render (line 96) | function render(props: ModalFuncProps) {
function withWarn (line 113) | function withWarn(props: ModalFuncProps): ModalFuncProps {
function withInfo (line 120) | function withInfo(props: ModalFuncProps): ModalFuncProps {
function withSuccess (line 127) | function withSuccess(props: ModalFuncProps): ModalFuncProps {
function withError (line 134) | function withError(props: ModalFuncProps): ModalFuncProps {
function withConfirm (line 141) | function withConfirm(props: ModalFuncProps): ModalFuncProps {
FILE: components/modal/index.tsx
function modalWarn (line 10) | function modalWarn(props: ModalFuncProps) {
FILE: components/modal/locale.ts
type ModalLocale (line 3) | interface ModalLocale {
function changeConfirmLocale (line 13) | function changeConfirmLocale(newLocale?: ModalLocale) {
function getConfirmLocale (line 26) | function getConfirmLocale() {
FILE: components/modal/style/index.ts
type ComponentToken (line 9) | interface ComponentToken {
type ModalToken (line 13) | interface ModalToken extends FullToken<'Modal'> {
function box (line 39) | function box(position: CSSProperties['position']): CSSProperties {
FILE: components/modal/useModal/HookModal.tsx
type HookModalProps (line 9) | interface HookModalProps {
type HookModalRef (line 16) | interface HookModalRef {
method setup (line 37) | setup(props: HookModalProps, { expose }) {
FILE: components/modal/useModal/index.tsx
type ElementsHolderRef (line 14) | interface ElementsHolderRef {
method setup (line 21) | setup(_, { expose }) {
type ModalFuncWithRef (line 37) | type ModalFuncWithRef = (props: MaybeRef<ModalFuncProps>) => {
function useModal (line 42) | function useModal(): readonly [
FILE: components/notification/PurePanel.tsx
function getCloseIcon (line 17) | function getCloseIcon(prefixCls: string, closeIcon?: VueNode) {
type PureContentProps (line 27) | interface PureContentProps {
function PureContent (line 51) | function PureContent({
type PurePanelProps (line 82) | interface PurePanelProps
method setup (line 93) | setup(props) {
FILE: components/notification/__tests__/placement.test.js
function $$ (line 7) | function $$(className) {
function getStyle (line 11) | function getStyle(el, prop) {
function open (line 18) | function open(args) {
function config (line 26) | function config(args) {
method getContainer (line 162) | getContainer() {
FILE: components/notification/index.tsx
type NotificationPlacement (line 17) | type NotificationPlacement =
type IconType (line 25) | type IconType = 'success' | 'info' | 'error' | 'warning';
type ConfigProps (line 27) | interface ConfigProps {
function setNotificationConfig (line 50) | function setNotificationConfig(options: ConfigProps) {
function getNotificationInstance (line 81) | function getNotificationInstance(
type NotificationArgsProps (line 142) | interface NotificationArgsProps {
function notice (line 164) | function notice(args: NotificationArgsProps) {
method close (line 205) | close(key: string) {
method destroy (line 213) | destroy() {
type NotificationInstance (line 235) | interface NotificationInstance {
type NotificationApi (line 243) | interface NotificationApi extends NotificationInstance {
FILE: components/notification/interface.ts
type NotificationPlacement (line 4) | type NotificationPlacement =
type IconType (line 12) | type IconType = 'success' | 'info' | 'error' | 'warning';
type ArgsProps (line 14) | interface ArgsProps {
type StaticFn (line 30) | type StaticFn = (args: ArgsProps) => void;
type NotificationInstance (line 32) | interface NotificationInstance {
type GlobalConfigProps (line 41) | interface GlobalConfigProps {
type NotificationConfig (line 53) | interface NotificationConfig {
FILE: components/notification/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {
type NotificationToken (line 13) | interface NotificationToken extends FullToken<'Notification'> {
FILE: components/notification/useNotification.tsx
constant DEFAULT_OFFSET (line 19) | const DEFAULT_OFFSET = 24;
constant DEFAULT_DURATION (line 20) | const DEFAULT_DURATION = 4.5;
type HolderProps (line 25) | type HolderProps = NotificationConfig & {
type HolderRef (line 30) | interface HolderRef extends NotificationAPI {
method setup (line 39) | setup(props: HolderProps, { expose }) {
function useInternalNotification (line 83) | function useInternalNotification(
function useNotification (line 148) | function useNotification(notificationConfig?: NotificationConfig) {
FILE: components/notification/util.ts
function getPlacementStyle (line 5) | function getPlacementStyle(
function getMotion (line 69) | function getMotion(prefixCls: string): CSSMotionProps {
FILE: components/page-header/__tests__/index.test.js
method render (line 21) | render() {
method render (line 36) | render() {
method render (line 46) | render() {
method render (line 57) | render() {
method render (line 70) | render() {
method render (line 82) | render() {
method render (line 91) | render() {
method render (line 114) | render() {
method render (line 121) | render() {
FILE: components/page-header/index.tsx
type PageHeaderProps (line 40) | type PageHeaderProps = Partial<ExtractPropTypes<ReturnType<typeof pageHe...
method setup (line 59) | setup(props, { emit, slots, attrs }) {
FILE: components/page-header/style/index.ts
type PageHeaderToken (line 7) | interface PageHeaderToken extends FullToken<'PageHeader'> {
FILE: components/pagination/Pagination.tsx
type PaginationPosition (line 56) | type PaginationPosition = 'top' | 'bottom' | 'both';
type PaginationProps (line 62) | type PaginationProps = Partial<ExtractPropTypes<ReturnType<typeof pagina...
type PaginationConfig (line 63) | type PaginationConfig = Partial<ExtractPropTypes<ReturnType<typeof pagin...
type PaginationLocale (line 65) | interface PaginationLocale {
method setup (line 84) | setup(props, { slots, attrs }) {
FILE: components/pagination/Select.tsx
method setup (line 10) | setup(props, { attrs, slots }) {
method setup (line 27) | setup(props, { attrs, slots }) {
FILE: components/pagination/style/index.tsx
type PaginationToken (line 12) | interface PaginationToken extends InputToken<FullToken<'Pagination'>> {
FILE: components/popconfirm/__tests__/index.test.js
function $$ (line 4) | function $$(className) {
method render (line 52) | render() {
method render (line 78) | render() {
FILE: components/popconfirm/index.tsx
type PopconfirmProps (line 47) | type PopconfirmProps = Partial<ExtractPropTypes<ReturnType<typeof popcon...
type PopconfirmLocale (line 49) | interface PopconfirmLocale {
method setup (line 82) | setup(props: PopconfirmProps, { slots, emit, expose, attrs }) {
FILE: components/popconfirm/style/index.ts
type ComponentToken (line 4) | interface ComponentToken {
type PopconfirmToken (line 8) | interface PopconfirmToken extends FullToken<'Popconfirm'> {}
FILE: components/popover/__tests__/index.test.js
method render (line 8) | render() {
method render (line 19) | render() {
FILE: components/popover/index.tsx
type PopoverProps (line 21) | type PopoverProps = Partial<ExtractPropTypes<ReturnType<typeof popoverPr...
method setup (line 34) | setup(props, { expose, slots, attrs }) {
FILE: components/popover/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type PopoverToken (line 12) | type PopoverToken = FullToken<'Popover'> & {
FILE: components/progress/Circle.tsx
type CircleProps (line 11) | interface CircleProps extends ProgressProps {
constant CIRCLE_MIN_STROKE_WIDTH (line 20) | const CIRCLE_MIN_STROKE_WIDTH = 3;
method setup (line 31) | setup(props, { slots, attrs }) {
FILE: components/progress/Line.tsx
type LineProps (line 17) | type LineProps = Partial<ExtractPropTypes<ReturnType<typeof lineProps>>>;
method setup (line 78) | setup(props, { slots, attrs }) {
FILE: components/progress/Steps.tsx
type StepsProps (line 16) | type StepsProps = Partial<ExtractPropTypes<ReturnType<typeof stepsProps>>>;
method setup (line 22) | setup(props, { slots }) {
FILE: components/progress/__tests__/index.test.js
method render (line 135) | render() {
method render (line 144) | render() {
method render (line 153) | render() {
method render (line 162) | render() {
method render (line 171) | render() {
method render (line 199) | render() {
method render (line 209) | render() {
method render (line 230) | render() {
method render (line 239) | render() {
method render (line 252) | render() {
method render (line 277) | render() {
method render (line 294) | render() {
method render (line 312) | render() {
FILE: components/progress/progress.tsx
method setup (line 34) | setup(props, { slots, attrs }) {
FILE: components/progress/props.ts
type ProgressStatusesType (line 13) | type ProgressStatusesType = (typeof progressStatuses)[number];
type ProgressType (line 15) | type ProgressType = (typeof ProgressType)[number];
type ProgressSize (line 17) | type ProgressSize = (typeof ProgressSize)[number] | number | [number, nu...
type StringGradients (line 18) | type StringGradients = { [percentage: string]: string };
type FromToGradients (line 19) | type FromToGradients = { from: string; to: string };
type ProgressGradient (line 20) | type ProgressGradient = { direction?: string } & (StringGradients | From...
type SuccessProps (line 22) | interface SuccessProps {
type ProgressProps (line 53) | type ProgressProps = Partial<ExtractPropTypes<ReturnType<typeof progress...
FILE: components/progress/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {}
type ProgressToken (line 9) | interface ProgressToken extends FullToken<'Progress'> {
FILE: components/progress/utils.ts
function validProgress (line 6) | function validProgress(progress: number | undefined) {
function getSuccessPercent (line 16) | function getSuccessPercent({ success, successPercent }: ProgressProps) {
function getPercentage (line 33) | function getPercentage({ percent, success, successPercent }: ProgressPro...
function getStrokeColor (line 38) | function getStrokeColor({
FILE: components/qrcode/QRCode.tsx
type Modules (line 8) | type Modules = ReturnType<qrcodegen.QrCode['getModules']>;
type Excavation (line 9) | type Excavation = { x: number; y: number; w: number; h: number };
constant ERROR_LEVEL_MAP (line 11) | const ERROR_LEVEL_MAP: { [index: string]: qrcodegen.QrCode.Ecc } = {
constant DEFAULT_SIZE (line 18) | const DEFAULT_SIZE = 128;
constant DEFAULT_LEVEL (line 19) | const DEFAULT_LEVEL = 'L';
constant DEFAULT_BGCOLOR (line 20) | const DEFAULT_BGCOLOR = '#FFFFFF';
constant DEFAULT_FGCOLOR (line 21) | const DEFAULT_FGCOLOR = '#000000';
constant DEFAULT_INCLUDEMARGIN (line 22) | const DEFAULT_INCLUDEMARGIN = false;
constant SPEC_MARGIN_SIZE (line 24) | const SPEC_MARGIN_SIZE = 4;
constant DEFAULT_MARGIN_SIZE (line 25) | const DEFAULT_MARGIN_SIZE = 0;
constant DEFAULT_IMG_SCALE (line 31) | const DEFAULT_IMG_SCALE = 0.1;
function generatePath (line 33) | function generatePath(modules: Modules, margin = 0): string {
function excavateModules (line 73) | function excavateModules(modules: Modules, excavation: Excavation): Modu...
function getImageSettings (line 87) | function getImageSettings(
function getMarginSize (line 122) | function getMarginSize(includeMargin: boolean, marginSize?: number): num...
constant SUPPORTS_PATH2D (line 134) | const SUPPORTS_PATH2D = (function () {
method setup (line 147) | setup(props, { attrs, expose }) {
method setup (line 281) | setup(props) {
FILE: components/qrcode/__tests__/index.test.js
method render (line 8) | render() {
method render (line 19) | render() {
method render (line 29) | render() {
method render (line 40) | render() {
method render (line 62) | render() {
method render (line 72) | render() {
method render (line 82) | render() {
FILE: components/qrcode/index.tsx
type QRCodeProps (line 15) | type QRCodeProps = Partial<ExtractPropTypes<ReturnType<typeof qrcodeProp...
method setup (line 21) | setup(props, { emit, attrs, expose }) {
FILE: components/qrcode/interface.ts
type ImageSettings (line 3) | interface ImageSettings {
type QRCodeCanvasColor (line 36) | interface QRCodeCanvasColor {
type QRCodeCanvasOptions (line 41) | interface QRCodeCanvasOptions {
FILE: components/qrcode/qrcodegen.ts
type bit (line 12) | type bit = number;
type byte (line 13) | type byte = number;
type int (line 14) | type int = number;
class QrCode (line 34) | class QrCode {
method encodeText (line 42) | public static encodeText(text: string, ecl: QrCode.Ecc): QrCode {
method encodeBinary (line 51) | public static encodeBinary(data: Readonly<Array<byte>>, ecl: QrCode.Ec...
method encodeSegments (line 67) | public static encodeSegments(
method constructor (line 161) | public constructor(
method getModule (line 220) | public getModule(x: int, y: int): boolean {
method getModules (line 225) | public getModules() {
method drawFunctionPatterns (line 232) | private drawFunctionPatterns(): void {
method drawFormatBits (line 264) | private drawFormatBits(mask: int): void {
method drawVersion (line 287) | private drawVersion(): void {
method drawFinderPattern (line 308) | private drawFinderPattern(x: int, y: int): void {
method drawAlignmentPattern (line 322) | private drawAlignmentPattern(x: int, y: int): void {
method setFunctionModule (line 331) | private setFunctionModule(x: int, y: int, isDark: boolean): void {
method addEccAndInterleave (line 340) | private addEccAndInterleave(data: Readonly<Array<byte>>): Array<byte> {
method drawCodewords (line 381) | private drawCodewords(data: Readonly<Array<byte>>): void {
method applyMask (line 412) | private applyMask(mask: int): void {
method getPenaltyScore (line 452) | private getPenaltyScore(): int {
method getAlignmentPatternPositions (line 529) | private getAlignmentPatternPositions(): Array<int> {
method getNumRawDataModules (line 545) | private static getNumRawDataModules(ver: int): int {
method getNumDataCodewords (line 561) | private static getNumDataCodewords(ver: int, ecl: QrCode.Ecc): int {
method reedSolomonComputeDivisor (line 571) | private static reedSolomonComputeDivisor(degree: int): Array<byte> {
method reedSolomonComputeRemainder (line 595) | private static reedSolomonComputeRemainder(
method reedSolomonMultiply (line 611) | private static reedSolomonMultiply(x: byte, y: byte): byte {
method finderPenaltyCountPatterns (line 625) | private finderPenaltyCountPatterns(runHistory: Readonly<Array<int>>): ...
method finderPenaltyTerminateAndCount (line 641) | private finderPenaltyTerminateAndCount(
method finderPenaltyAddHistory (line 657) | private finderPenaltyAddHistory(currentRunLength: int, runHistory: Arr...
function appendBits (line 721) | function appendBits(val: int, len: int, bb: Array<bit>): void {
function getBit (line 732) | function getBit(x: int, i: int): boolean {
function assert (line 737) | function assert(cond: boolean): void {
class QrSegment (line 754) | class QrSegment {
method makeBytes (line 760) | public static makeBytes(data: Readonly<Array<byte>>): QrSegment {
method makeNumeric (line 767) | public static makeNumeric(digits: string): QrSegment {
method makeAlphanumeric (line 783) | public static makeAlphanumeric(text: string): QrSegment {
method makeSegments (line 802) | public static makeSegments(text: string): Array<QrSegment> {
method makeEci (line 812) | public static makeEci(assignVal: int): QrSegment {
method isNumeric (line 828) | public static isNumeric(text: string): boolean {
method isAlphanumeric (line 835) | public static isAlphanumeric(text: string): boolean {
method constructor (line 844) | public constructor(
method getData (line 863) | public getData(): Array<bit> {
method getTotalBits (line 869) | public static getTotalBits(segs: Readonly<Array<QrSegment>>, version: ...
method toUtf8ByteArray (line 880) | private static toUtf8ByteArray(str: string): Array<byte> {
type int (line 911) | type int = number;
class Ecc (line 916) | class Ecc {
method constructor (line 926) | private constructor(
type int (line 938) | type int = number;
class Mode (line 943) | class Mode {
method constructor (line 954) | private constructor(
method numCharCountBits (line 965) | public numCharCountBits(ver: int): int {
FILE: components/qrcode/style/index.ts
type ComponentToken (line 5) | interface ComponentToken {}
type QRCodeToken (line 7) | interface QRCodeToken extends FullToken<'QRCode'> {
FILE: components/radio/Group.tsx
type RadioGroupSize (line 17) | type RadioGroupSize = (typeof RadioGroupSizeTypes)[number];
type RadioGroupOption (line 19) | type RadioGroupOption = RadioGroupOptionType;
type RadioGroupChildOption (line 21) | type RadioGroupChildOption = {
type RadioGroupProps (line 41) | type RadioGroupProps = Partial<ExtractPropTypes<ReturnType<typeof radioG...
method setup (line 49) | setup(props, { slots, emit, attrs }) {
FILE: components/radio/Radio.tsx
type RadioProps (line 35) | type RadioProps = Partial<ExtractPropTypes<ReturnType<typeof radioProps>>>;
method setup (line 42) | setup(props, { emit, expose, slots, attrs }) {
FILE: components/radio/RadioButton.tsx
method setup (line 11) | setup(props, { slots, attrs }) {
FILE: components/radio/__tests__/group.test.js
function createRadioGroup (line 7) | function createRadioGroup(props) {
function createRadioGroupByOption (line 26) | function createRadioGroupByOption() {
method render (line 44) | render() {
method render (line 89) | render() {
method render (line 222) | render() {
FILE: components/radio/__tests__/radio.test.js
method render (line 15) | render() {
method render (line 28) | render() {
FILE: components/radio/interface.ts
type RadioChangeEventTarget (line 3) | interface RadioChangeEventTarget extends RadioProps {
type RadioGroupButtonStyle (line 7) | type RadioGroupButtonStyle = 'outline' | 'solid';
type RadioGroupOptionType (line 8) | type RadioGroupOptionType = 'default' | 'button';
type RadioChangeEvent (line 10) | interface RadioChangeEvent {
type RadioGroupContext (line 17) | interface RadioGroupContext {
type RadioOptionTypeContextProps (line 31) | type RadioOptionTypeContextProps = RadioGroupOptionType;
FILE: components/radio/style/index.tsx
type ComponentToken (line 7) | interface ComponentToken {}
type RadioToken (line 9) | interface RadioToken extends FullToken<'Radio'> {
FILE: components/rate/Star.tsx
type StarProps (line 19) | type StarProps = Partial<ExtractPropTypes<typeof starProps>>;
method setup (line 27) | setup(props, { emit }) {
FILE: components/rate/index.tsx
type RateProps (line 42) | type RateProps = Partial<ExtractPropTypes<ReturnType<typeof rateProps>>>;
method setup (line 57) | setup(props, { slots, attrs, emit, expose }) {
FILE: components/rate/style/index.ts
type ComponentToken (line 6) | type ComponentToken = {};
type RateToken (line 8) | interface RateToken extends FullToken<'Rate'> {
FILE: components/rate/util.ts
function getScroll (line 1) | function getScroll(w: Window) {
function getClientPosition (line 16) | function getClientPosition(elem: HTMLElement) {
function getOffsetLeft (line 33) | function getOffsetLeft(el: HTMLElement) {
FILE: components/result/__tests__/index.test.js
method render (line 9) | render() {
method render (line 47) | render() {
method render (line 56) | render() {
method render (line 65) | render() {
FILE: components/result/index.tsx
type ExceptionStatusType (line 30) | type ExceptionStatusType = 403 | 404 | 500 | '403' | '404' | '500';
type ResultStatusType (line 31) | type ResultStatusType = ExceptionStatusType | keyof typeof IconMap;
type ResultProps (line 45) | type ResultProps = Partial<ExtractPropTypes<ReturnType<typeof resultProp...
method setup (line 76) | setup(props, { slots, attrs }) {
FILE: components/result/style/index.tsx
type ComponentToken (line 5) | interface ComponentToken {
type ResultToken (line 10) | interface ResultToken extends FullToken<'Result'> {
FILE: components/segmented/__tests__/index.test.js
method render (line 5) | render() {
FILE: components/segmented/src/MotionThumb.tsx
type ThumbRect (line 7) | type ThumbRect = {
type MotionThumbInterface (line 13) | interface MotionThumbInterface {
method setup (line 49) | setup(props, { emit }) {
FILE: components/segmented/src/segmented.tsx
type SegmentedValue (line 11) | type SegmentedValue = string | number;
type segmentedSize (line 12) | type segmentedSize = 'large' | 'small';
type SegmentedBaseOption (line 13) | interface SegmentedBaseOption {
type SegmentedOption (line 23) | interface SegmentedOption extends SegmentedBaseOption {
function normalizeOptions (line 27) | function normalizeOptions(options: (SegmentedOption | string | number)[]) {
type SegmentedProps (line 53) | type SegmentedProps = Partial<ExtractPropTypes<ReturnType<typeof segment...
method setup (line 121) | setup(props, { emit, slots, attrs }) {
FILE: components/segmented/style/index.ts
type ComponentToken (line 6) | interface ComponentToken {}
type SegmentedToken (line 8) | interface SegmentedToken extends FullToken<'Segmented'> {
function getItemDisabledStyle (line 20) | function getItemDisabledStyle(cls: string, token: SegmentedToken): CSSOb...
function getItemSelectedStyle (line 29) | function getItemSelectedStyle(token: SegmentedToken): CSSObject {
FILE: components/select/__tests__/index.test.js
function $$ (line 7) | function $$(className) {
function getStyle (line 10) | function getStyle(el, prop) {
method render (line 22) | render() {
method render (line 34) | render() {
method render (line 56) | render() {
method render (line 77) | render() {
method render (line 98) | render() {
method render (line 129) | render() {
method render (line 165) | render() {
method render (line 211) | render() {
FILE: components/select/index.tsx
type RawValue (line 30) | type RawValue = string | number;
type OptionType (line 32) | type OptionType = typeof Option;
type LabeledValue (line 35) | interface LabeledValue {
type SelectValue (line 40) | type SelectValue = RawValue | RawValue[] | LabeledValue | LabeledValue[]...
type SelectProps (line 68) | type SelectProps = Partial<ExtractPropTypes<ReturnType<typeof selectProp...
constant SECRET_COMBOBOX_MODE_DO_NOT_USE (line 70) | const SECRET_COMBOBOX_MODE_DO_NOT_USE = 'SECRET_COMBOBOX_MODE_DO_NOT_USE';
method setup (line 96) | setup(props, { attrs, emit, slots, expose }) {
FILE: components/select/style/index.ts
type ComponentToken (line 10) | interface ComponentToken {
type SelectToken (line 14) | interface SelectToken extends FullToken<'Select'> {
FILE: components/select/style/multiple.ts
constant FIXED_ITEM_MARGIN (line 6) | const FIXED_ITEM_MARGIN = 2;
function getSelectItemStyle (line 8) | function getSelectItemStyle({
function genSizeStyle (line 18) | function genSizeStyle(token: SelectToken, suffix?: string): CSSObject {
function genMultipleStyle (line 194) | function genMultipleStyle(token: SelectToken): CSSInterpolation {
FILE: components/select/style/single.ts
function genSizeStyle (line 6) | function genSizeStyle(token: SelectToken, suffix?: string): CSSObject {
function genSingleStyle (line 135) | function genSingleStyle(token: SelectToken): CSSInterpolation {
FILE: components/select/utils/iconUtil.tsx
function getIcons (line 8) | function getIcons(props: any, slots: any = {}) {
FILE: components/skeleton/Avatar.tsx
type SkeletonAvatarProps (line 16) | type SkeletonAvatarProps = Partial<ExtractPropTypes<ReturnType<typeof av...
method setup (line 25) | setup(props) {
FILE: components/skeleton/Button.tsx
type SkeletonButtonProps (line 17) | type SkeletonButtonProps = Partial<ExtractPropTypes<ReturnType<typeof sk...
method setup (line 25) | setup(props) {
FILE: components/skeleton/Element.tsx
type SkeletonElementProps (line 11) | type SkeletonElementProps = Partial<
FILE: components/skeleton/Image.tsx
type SkeletonImageProps (line 9) | type SkeletonImageProps = Omit<SkeletonElementProps, 'size' | 'shape' | ...
method setup (line 18) | setup(props) {
FILE: components/skeleton/Input.tsx
type SkeletonInputProps (line 10) | interface SkeletonInputProps extends Omit<SkeletonElementProps, 'size' |...
method setup (line 23) | setup(props) {
FILE: components/skeleton/Paragraph.tsx
type widthUnit (line 4) | type widthUnit = number | string;
type SkeletonParagraphProps (line 11) | type SkeletonParagraphProps = Partial<
method setup (line 19) | setup(props) {
FILE: components/skeleton/Skeleton.tsx
type SkeletonAvatarProps (line 15) | type SkeletonAvatarProps = Omit<AvatarProps, 'active'>;
type SkeletonProps (line 36) | type SkeletonProps = Partial<ExtractPropTypes<ReturnType<typeof skeleton...
function getComponentProps (line 38) | function getComponentProps<T>(prop: T | boolean | undefined): T | {} {
function getAvatarBasicProps (line 44) | function getAvatarBasicProps(hasTitle: boolean, hasParagraph: boolean): ...
function getTitleBasicProps (line 53) | function getTitleBasicProps(hasAvatar: boolean, hasParagraph: boolean): ...
function getParagraphBasicProps (line 65) | function getParagraphBasicProps(hasAvatar: boolean, hasTitle: boolean): ...
method setup (line 91) | setup(props, { slots }) {
FILE: components/skeleton/Title.tsx
type SkeletonTitleProps (line 9) | type SkeletonTitleProps = Partial<ExtractPropTypes<ReturnType<typeof ske...
method setup (line 15) | setup(props) {
FILE: components/skeleton/style/index.ts
type ComponentToken (line 6) | type ComponentToken = {
type SkeletonToken (line 20) | interface SkeletonToken extends FullToken<'Skeleton'> {
FILE: components/slider/SliderTooltip.tsx
method setup (line 10) | setup(props, { attrs, slots }) {
FILE: components/slider/index.tsx
type SliderValue (line 27) | type SliderValue = number | [number, number];
type SliderMarks (line 29) | interface SliderMarks {
type HandleGeneratorInfo (line 38) | interface HandleGeneratorInfo {
type SliderRange (line 43) | interface SliderRange {
type HandleGeneratorFn (line 46) | type HandleGeneratorFn = (config: {
type Value (line 51) | type Value = [number, number] | number;
type SliderProps (line 89) | type SliderProps = Partial<ExtractPropTypes<ReturnType<typeof sliderProp...
type Visibles (line 90) | type Visibles = { [index: number]: boolean };
method setup (line 102) | setup(props, { attrs, slots, emit, expose }) {
FILE: components/slider/style/index.tsx
type ComponentToken (line 14) | interface ComponentToken {
type SliderToken (line 24) | interface SliderToken extends FullToken<'Slider'> {
FILE: components/space/Compact.tsx
type SpaceCompactItemContextType (line 21) | type SpaceCompactItemContextType = Partial<
method setup (line 53) | setup(_, { slots }) {
type SpaceCompactProps (line 71) | type SpaceCompactProps = Partial<ExtractPropTypes<ReturnType<typeof spac...
method setup (line 76) | setup(props, { slots }) {
method setup (line 87) | setup(props, { attrs, slots }) {
FILE: components/space/__tests__/index.test.js
method render (line 10) | render() {
method render (line 19) | render() {
method render (line 34) | render() {
method render (line 49) | render() {
method render (line 64) | render() {
FILE: components/space/index.tsx
type SpaceSize (line 15) | type SpaceSize = SizeType | number;
type SpaceProps (line 31) | type SpaceProps = Partial<ExtractPropTypes<ReturnType<typeof spaceProps>>>;
function getNumberSize (line 33) | function getNumberSize(size: SpaceSize) {
method setup (line 46) | setup(props, { slots, attrs }) {
FILE: components/space/style/compact.tsx
type ComponentToken (line 3) | interface ComponentToken {
type SpaceToken (line 7) | interface SpaceToken extends FullToken<'Space'> {
FILE: components/space/style/index.tsx
type ComponentToken (line 6) | interface ComponentToken {
type SpaceToken (line 10) | interface SpaceToken extends FullToken<'Space'> {
FILE: components/spin/Spin.tsx
type SpinSize (line 10) | type SpinSize = 'small' | 'default' | 'large';
type SpinProps (line 21) | type SpinProps = Partial<ExtractPropTypes<ReturnType<typeof spinProps>>>;
function shouldDelay (line 26) | function shouldDelay(spinning?: boolean, delay?: number): boolean {
function setDefaultIndicator (line 30) | function setDefaultIndicator(Content: any) {
method setup (line 44) | setup(props, { attrs, slots }) {
FILE: components/spin/__tests__/index.test.js
method render (line 8) | render() {
method render (line 24) | render() {
FILE: components/spin/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type SpinToken (line 11) | interface SpinToken extends FullToken<'Spin'> {
FILE: components/statistic/Countdown.tsx
constant REFRESH_INTERVAL (line 10) | const REFRESH_INTERVAL = 1000 / 30;
function getTime (line 12) | function getTime(value?: countdownValueType) {
type CountdownProps (line 25) | type CountdownProps = Partial<ExtractPropTypes<ReturnType<typeof countdo...
method setup (line 33) | setup(props, { emit, slots }) {
FILE: components/statistic/Number.tsx
type NumberProps (line 4) | interface NumberProps extends FormatConfig {
FILE: components/statistic/Statistic.tsx
type StatisticProps (line 30) | type StatisticProps = Partial<ExtractPropTypes<ReturnType<typeof statist...
method setup (line 48) | setup(props, { slots, attrs }) {
FILE: components/statistic/style/index.tsx
type StatisticToken (line 6) | interface StatisticToken extends FullToken<'Statistic'> {
FILE: components/statistic/utils.ts
type valueType (line 3) | type valueType = number | string;
type countdownValueType (line 4) | type countdownValueType = number | string;
type Formatter (line 6) | type Formatter =
type FormatConfig (line 12) | interface FormatConfig {
type CountdownFormatConfig (line 20) | interface CountdownFormatConfig extends FormatConfig {
function formatTimeStr (line 35) | function formatTimeStr(duration: number, format: string) {
function formatCountdown (line 62) | function formatCountdown(value: valueType, config: CountdownFormatConfig) {
FILE: components/steps/index.tsx
type StepsProps (line 51) | type StepsProps = Partial<ExtractPropTypes<ReturnType<typeof stepsProps>>>;
type StepProps (line 53) | type StepProps = Partial<ExtractPropTypes<ReturnType<typeof stepProps>>>;
method setup (line 70) | setup(props, { attrs, slots, emit }) {
FILE: components/steps/style/index.tsx
type ComponentToken (line 15) | interface ComponentToken {
type StepsToken (line 19) | interface StepsToken extends FullToken<'Steps'> {
type StepItemStatusEnum (line 70) | enum StepItemStatusEnum {
FILE: components/style/compact-item-vertical.ts
function compactItemVerticalBorder (line 6) | function compactItemVerticalBorder(token: DerivativeToken, parentCls: st...
function compactItemBorderVerticalRadius (line 25) | function compactItemBorderVerticalRadius(prefixCls: string, parentCls: s...
function genCompactItemVerticalStyle (line 47) | function genCompactItemVerticalStyle<T extends OverrideComponent>(
FILE: components/style/compact-item.ts
type CompactItemOptions (line 6) | interface CompactItemOptions {
function compactItemBorder (line 21) | function compactItemBorder(
function compactItemBorderRadius (line 58) | function compactItemBorderRadius(
function genCompactItemStyle (line 89) | function genCompactItemStyle<T extends OverrideComponent>(
FILE: components/style/motion/move.ts
type MoveMotionTypes (line 119) | type MoveMotionTypes = 'move-up' | 'move-down' | 'move-left' | 'move-rig...
FILE: components/style/motion/slide.ts
type SlideMotionTypes (line 119) | type SlideMotionTypes = 'slide-up' | 'slide-down' | 'slide-left' | 'slid...
FILE: components/style/motion/zoom.ts
type ZoomMotionTypes (line 157) | type ZoomMotionTypes =
FILE: components/style/placementArrow.ts
function connectArrowCls (line 6) | function connectArrowCls(classList: string[], showArrowCls = '') {
constant MAX_VERTICAL_CONTENT_RADIUS (line 10) | const MAX_VERTICAL_CONTENT_RADIUS = 8;
function getArrowOffset (line 12) | function getArrowOffset(options: {
function getArrowStyle (line 28) | function getArrowStyle<Token extends TokenWithCommonCls<AliasToken>>(
FILE: components/style/presetColor.tsx
type CalcColor (line 7) | interface CalcColor {
type GenCSS (line 18) | type GenCSS = (colorKey: PresetColorKey, calcColor: CalcColor) => CSSObj...
function genPresetColor (line 20) | function genPresetColor<Token extends TokenWithCommonCls<AliasToken>>(
FILE: components/switch/__tests__/index.test.js
method setup (line 15) | setup() {
method render (line 37) | render() {
method render (line 52) | render() {
method render (line 79) | render() {
FILE: components/switch/index.tsx
type CheckedType (line 18) | type CheckedType = boolean | string | number;
type SwitchProps (line 57) | type SwitchProps = Partial<ExtractPropTypes<ReturnType<typeof switchProp...
method setup (line 71) | setup(props, { attrs, slots, expose, emit }) {
FILE: components/switch/style/index.ts
type SwitchToken (line 7) | interface SwitchToken extends FullToken<'Switch'> {
FILE: components/table/Column.tsx
type ColumnProps (line 5) | type ColumnProps<RecordType = unknown> = ColumnType<RecordType>;
method render (line 14) | render() {
FILE: components/table/ColumnGroup.tsx
method render (line 12) | render() {
FILE: components/table/ExpandIcon.tsx
type DefaultExpandIconProps (line 4) | interface DefaultExpandIconProps<RecordType> {
function renderExpandIcon (line 12) | function renderExpandIcon(locale: TableLocale) {
FILE: components/table/Table.tsx
constant EMPTY_LIST (line 66) | const EMPTY_LIST: any[] = [];
type ChangeEventInfo (line 68) | interface ChangeEventInfo<RecordType = DefaultRecordType> {
type TableProps (line 83) | interface TableProps<RecordType = DefaultRecordType>
method setup (line 200) | setup(props, { attrs, slots, expose, emit }) {
method setup (line 669) | setup(props, { attrs, slots, expose }) {
FILE: components/table/__tests__/Table.filter.test.js
function $$ (line 6) | function $$(className) {
function getTableOptions (line 42) | function getTableOptions(props = {}) {
function renderedNames (line 55) | function renderedNames(wrapper) {
method render (line 75) | render() {
method render (line 103) | render() {
method render (line 134) | render() {
method render (line 254) | render() {
method data (line 335) | data() {
method handleChange (line 341) | handleChange(pagination, filters) {
method render (line 345) | render() {
method render (line 367) | render() {
FILE: components/table/__tests__/Table.pagination.test.js
function getTableOptions (line 23) | function getTableOptions(props = {}) {
function renderedNames (line 35) | function renderedNames(wrapper) {
FILE: components/table/__tests__/Table.rowSelection.test.js
function getTableOptions (line 29) | function getTableOptions(props = {}) {
function renderedNames (line 41) | function renderedNames(wrapper) {
function getSelections (line 47) | function getSelections(wrapper) {
method render (line 207) | render() {
method render (line 228) | render() {
method render (line 252) | render() {
method render (line 287) | render() {
method render (line 320) | render() {
method render (line 351) | render() {
method render (line 549) | render() {
function clickFilter (line 556) | function clickFilter(indexList) {
function clickItem (line 565) | function clickItem() {
FILE: components/table/__tests__/Table.sorter.test.js
function getTableOptions (line 23) | function getTableOptions(props = {}, columnProps = {}) {
function renderedNames (line 41) | function renderedNames(wrapper) {
FILE: components/table/__tests__/Table.test.js
method render (line 29) | render() {
FILE: components/table/__tests__/empty.test.js
method render (line 51) | render() {
method render (line 66) | render() {
method render (line 81) | render() {
method render (line 103) | render() {
FILE: components/table/context.ts
type ContextSlots (line 5) | type ContextSlots = {
type SlotsContextProps (line 20) | type SlotsContextProps = ComputedRef<ContextSlots>;
type ContextProps (line 32) | type ContextProps = {
FILE: components/table/hooks/useColumns.tsx
function fillSlots (line 9) | function fillSlots<RecordType>(columns: ColumnsType<RecordType>, context...
function useColumns (line 48) | function useColumns<RecordType>(
FILE: components/table/hooks/useFilter/FilterDropdown.tsx
type FilterResetProps (line 31) | interface FilterResetProps {
function hasSubMenu (line 38) | function hasSubMenu(filters: ColumnFilterItem[]) {
function searchValueMatched (line 42) | function searchValueMatched(searchValue: string, text: any) {
function renderFilterItems (line 49) | function renderFilterItems({
type TreeColumnFilterItem (line 103) | type TreeColumnFilterItem = ColumnFilterItem;
type FilterDropdownProps (line 104) | interface FilterDropdownProps<RecordType> {
method setup (line 136) | setup(props, { slots }) {
FILE: components/table/hooks/useFilter/FilterSearch.tsx
method setup (line 18) | setup(props) {
FILE: components/table/hooks/useFilter/index.tsx
type FilterState (line 21) | interface FilterState<RecordType = DefaultRecordType> {
function collectFilterStates (line 28) | function collectFilterStates<RecordType>(
function injectFilter (line 72) | function injectFilter<RecordType>(
function flattenKeys (line 136) | function flattenKeys(filters?: ColumnFilterItem[]) {
function generateFilterInfo (line 147) | function generateFilterInfo<RecordType>(filterStates: FilterState<Record...
function getFilterData (line 167) | function getFilterData<RecordType>(
function getMergedColumns (line 190) | function getMergedColumns<RecordType>(
type FilterConfig (line 201) | interface FilterConfig<RecordType> {
function useFilter (line 213) | function useFilter<RecordType>({
FILE: components/table/hooks/useLazyKVMap.ts
type MapCache (line 5) | interface MapCache<RecordType> {
function useLazyKVMap (line 9) | function useLazyKVMap<RecordType>(
FILE: components/table/hooks/usePagination.ts
constant DEFAULT_PAGE_SIZE (line 8) | const DEFAULT_PAGE_SIZE = 10;
function getPaginationParam (line 10) | function getPaginationParam(
function usePagination (line 31) | function usePagination(
FILE: components/table/hooks/useSelection.tsx
constant SELECTION_COLUMN (line 35) | const SELECTION_COLUMN = {} as const;
constant SELECTION_ALL (line 36) | const SELECTION_ALL = 'SELECT_ALL' as const;
constant SELECTION_INVERT (line 37) | const SELECTION_INVERT = 'SELECT_INVERT' as const;
constant SELECTION_NONE (line 38) | const SELECTION_NONE = 'SELECT_NONE' as const;
constant EMPTY_LIST (line 39) | const EMPTY_LIST: Key[] = [];
type UseSelectionConfig (line 40) | interface UseSelectionConfig<RecordType> {
type INTERNAL_SELECTION_ITEM (line 52) | type INTERNAL_SELECTION_ITEM =
function flattenData (line 58) | function flattenData<RecordType>(childrenColumnName: string, data: Recor...
function useSelection (line 74) | function useSelection<RecordType>(
FILE: components/table/hooks/useSorter.tsx
constant ASCEND (line 25) | const ASCEND = 'ascend';
constant DESCEND (line 26) | const DESCEND = 'descend';
function getMultiplePriority (line 28) | function getMultiplePriority<RecordType>(column: ColumnType<RecordType>)...
function getSortFunction (line 35) | function getSortFunction<RecordType>(
function nextSortDirection (line 47) | function nextSortDirection(sortDirections: SortOrder[], current: SortOrd...
type SortState (line 55) | interface SortState<RecordType = DefaultRecordType> {
function collectSortStates (line 62) | function collectSortStates<RecordType>(
function injectSorter (line 109) | function injectSorter<RecordType>(
function stateToInfo (line 245) | function stateToInfo<RecordType>(sorterStates: SortState<RecordType>) {
function generateSorterInfo (line 250) | function generateSorterInfo<RecordType>(
function getSortData (line 271) | function getSortData<RecordType>(
type SorterConfig (line 325) | interface SorterConfig<RecordType> {
function useFilterSorter (line 337) | function useFilterSorter<RecordType>({
FILE: components/table/hooks/useTitleColumns.tsx
function fillTitle (line 5) | function fillTitle<RecordType>(
function useTitleColumns (line 22) | function useTitleColumns<RecordType>(
FILE: components/table/interface.tsx
type Key (line 21) | type Key = string | number;
type RowSelectionType (line 23) | type RowSelectionType = 'checkbox' | 'radio';
type SelectionItemSelectFn (line 25) | type SelectionItemSelectFn = (currentRowKeys: Key[]) => void;
type ExpandType (line 27) | type ExpandType = null | 'row' | 'nest';
type TableLocale (line 29) | interface TableLocale {
type SortOrder (line 49) | type SortOrder = 'descend' | 'ascend' | null;
type TableAction (line 52) | type TableAction = (typeof TableActions)[number];
type CompareFn (line 54) | type CompareFn<T> = (a: T, b: T, sortOrder?: SortOrder) => number;
type ColumnFilterItem (line 56) | interface ColumnFilterItem {
type ColumnTitleProps (line 61) | interface ColumnTitleProps<RecordType> {
type ColumnTitleNode (line 71) | type ColumnTitleNode = VueNode | VNodeArrayChildren;
type ColumnTitle (line 72) | type ColumnTitle<RecordType> =
type FilterValue (line 76) | type FilterValue = (Key | boolean)[];
type FilterKey (line 77) | type FilterKey = Key[] | null;
type FilterSearchType (line 78) | type FilterSearchType<RecordType = Record<string, any>> =
type FilterConfirmProps (line 81) | interface FilterConfirmProps {
type FilterResetProps (line 84) | interface FilterResetProps {
type FilterDropdownProps (line 89) | interface FilterDropdownProps<RecordType> {
type ColumnType (line 102) | interface ColumnType<RecordType = DefaultRecordType>
type ColumnGroupType (line 143) | interface ColumnGroupType<RecordType> extends Omit<ColumnType<RecordType...
type ColumnsType (line 147) | type ColumnsType<RecordType = DefaultRecordType> = (
type SelectionItem (line 152) | interface SelectionItem {
type SelectionSelectFn (line 158) | type SelectionSelectFn<T> = (
type TableRowSelection (line 165) | interface TableRowSelection<T = DefaultRecordType> {
type TransformColumns (line 194) | type TransformColumns<RecordType> = (
type TableCurrentDataSource (line 198) | interface TableCurrentDataSource<RecordType = DefaultRecordType> {
type SorterResult (line 203) | interface SorterResult<RecordType = DefaultRecordType> {
type GetPopupContainer (line 210) | type GetPopupContainer = (triggerNode: HTMLElement) => HTMLElement;
type TablePaginationPosition (line 212) | type TablePaginationPosition =
type TablePaginationConfig (line 220) | interface TablePaginationConfig extends PaginationProps {
type TransformCellTextProps (line 226) | interface TransformCellTextProps {
FILE: components/table/style/index.ts
type ComponentToken (line 22) | interface ComponentToken {}
type TableToken (line 24) | interface TableToken extends FullToken<'Table'> {
FILE: components/table/util.ts
function getColumnKey (line 4) | function getColumnKey<RecordType>(column: ColumnType<RecordType>, defaul...
function getColumnPos (line 15) | function getColumnPos(index: number, pos?: string) {
function renderColumnTitle (line 19) | function renderColumnTitle<RecordType>(
function convertChildrenToColumns (line 30) | function convertChildrenToColumns<RecordType>(
FILE: components/tabs/__tests__/index.test.js
method render (line 12) | render() {
method render (line 38) | render() {
FILE: components/tabs/src/TabContext.ts
type TabContextProps (line 5) | interface TabContextProps {
method setup (line 28) | setup(props, { slots }) {
FILE: components/tabs/src/TabNavList/AddButton.tsx
type AddButtonProps (line 5) | interface AddButtonProps {
method setup (line 20) | setup(props, { expose, attrs }) {
FILE: components/tabs/src/TabNavList/OperationNode.tsx
type OperationNodeProps (line 36) | type OperationNodeProps = Partial<ExtractPropTypes<typeof operationNodeP...
method setup (line 48) | setup(props, { attrs, slots }) {
FILE: components/tabs/src/TabNavList/TabNode.tsx
type TabNodeProps (line 8) | interface TabNodeProps {
method setup (line 45) | setup(props, { expose, attrs }) {
FILE: components/tabs/src/TabNavList/index.tsx
constant DEFAULT_SIZE (line 33) | const DEFAULT_SIZE = { width: 0, height: 0, left: 0, top: 0, right: 0 };
type TabNavListProps (line 59) | type TabNavListProps = Partial<ExtractPropTypes<ReturnType<typeof tabNav...
type ExtraContentProps (line 61) | interface ExtraContentProps {
method setup (line 108) | setup(props, { attrs, slots }) {
FILE: components/tabs/src/TabPanelList/TabPane.tsx
type TabPaneProps (line 22) | type TabPaneProps = Partial<ExtractPropTypes<ReturnType<typeof tabPanePr...
method setup (line 35) | setup(props, { attrs, slots }) {
FILE: components/tabs/src/TabPanelList/index.tsx
type TabPanelListProps (line 8) | interface TabPanelListProps {
method setup (line 28) | setup(props) {
FILE: components/tabs/src/Tabs.tsx
type TabsType (line 45) | type TabsType = 'line' | 'card' | 'editable-card';
type TabsPosition (line 46) | type TabsPosition = 'top' | 'right' | 'bottom' | 'left';
type TabsProps (line 86) | type TabsProps = Partial<ExtractPropTypes<ReturnType<typeof tabsProps>>>;
function parseTabList (line 88) | function parseTabList(children: any[]): Tab[] {
method setup (line 152) | setup(props, { attrs, slots }) {
method setup (line 371) | setup(props, { attrs, slots, emit }) {
FILE: components/tabs/src/hooks/useOffsets.ts
constant DEFAULT_SIZE (line 5) | const DEFAULT_SIZE = { width: 0, height: 0, left: 0, top: 0 };
function useOffsets (line 7) | function useOffsets(
FILE: components/tabs/src/hooks/useRaf.ts
function useRaf (line 5) | function useRaf<Callback extends Function>(callback: Callback) {
type Callback (line 26) | type Callback<T> = (ori: T) => T;
function useRafState (line 28) | function useRafState<T>(
FILE: components/tabs/src/hooks/useSyncState.ts
type Updater (line 4) | type Updater<T> = (prev: T) => T;
function useSyncState (line 6) | function useSyncState<T>(
FILE: components/tabs/src/hooks/useTouchMove.ts
type TouchEventHandler (line 5) | type TouchEventHandler = (e: TouchEvent) => void;
type WheelEventHandler (line 6) | type WheelEventHandler = (e: WheelEvent) => void;
constant MIN_SWIPE_DISTANCE (line 8) | const MIN_SWIPE_DISTANCE = 0.1;
constant STOP_SWIPE_DISTANCE (line 9) | const STOP_SWIPE_DISTANCE = 0.01;
constant REFRESH_INTERVAL (line 10) | const REFRESH_INTERVAL = 20;
constant SPEED_OFF_MULTIPLE (line 11) | const SPEED_OFF_MULTIPLE = 0.995 ** REFRESH_INTERVAL;
function useTouchMove (line 13) | function useTouchMove(
FILE: components/tabs/src/interface.ts
type TabSizeMap (line 4) | type TabSizeMap = Map<Key, { width: number; height: number; left: number...
type TabOffset (line 6) | interface TabOffset {
type TabOffsetMap (line 13) | type TabOffsetMap = Map<Key, TabOffset>;
type TabPosition (line 15) | type TabPosition = 'left' | 'right' | 'top' | 'bottom';
type Tab (line 17) | interface Tab extends TabPaneProps {
type RenderTabBar (line 22) | type RenderTabBar = (props: { DefaultTabBar: any; [key: string]: any }) ...
type TabsLocale (line 24) | interface TabsLocale {
type EditableConfig (line 30) | interface EditableConfig {
type AnimatedConfig (line 37) | interface AnimatedConfig {
type OnTabScroll (line 42) | type OnTabScroll = (info: { direction: 'left' | 'right' | 'top' | 'botto...
type TabBarExtraPosition (line 44) | type TabBarExtraPosition = 'left' | 'right';
type TabBarExtraMap (line 46) | type TabBarExtraMap = Partial<Record<TabBarExtraPosition, any>>;
type TabBarExtraContent (line 48) | type TabBarExtraContent = VueNode;
FILE: components/tabs/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {
type TabsToken (line 11) | interface TabsToken extends FullToken<'Tabs'> {
FILE: components/tag/CheckableTag.tsx
type CheckableTagProps (line 18) | type CheckableTagProps = Partial<ExtractPropTypes<ReturnType<typeof chec...
method setup (line 26) | setup(props, { slots, emit, attrs }) {
FILE: components/tag/__tests__/index.test.js
method render (line 13) | render() {
method render (line 42) | render() {
FILE: components/tag/index.tsx
type TagProps (line 36) | type TagProps = HTMLAttributes & Partial<ExtractPropTypes<ReturnType<typ...
method setup (line 49) | setup(props, { slots, emit, attrs }) {
FILE: components/tag/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {}
type TagToken (line 10) | interface TagToken extends FullToken<'Tag'> {
type CssVariableType (line 22) | type CssVariableType = 'Success' | 'Info' | 'Error' | 'Warning';
FILE: components/theme/convertLegacyToken.ts
function convertLegacyToken (line 4) | function convertLegacyToken(mapToken: MapToken) {
FILE: components/theme/index.ts
function useToken (line 12) | function useToken() {
FILE: components/theme/interface/alias.ts
type AliasToken (line 9) | interface AliasToken extends MapToken {
FILE: components/theme/interface/components.ts
type ComponentTokenMap (line 53) | interface ComponentTokenMap {
FILE: components/theme/interface/index.ts
type OverrideToken (line 4) | type OverrideToken = {
type GlobalToken (line 9) | type GlobalToken = AliasToken & ComponentTokenMap;
FILE: components/theme/interface/maps/colors.ts
type ColorNeutralMapToken (line 1) | interface ColorNeutralMapToken {
type ColorPrimaryMapToken (line 112) | interface ColorPrimaryMapToken {
type ColorSuccessMapToken (line 175) | interface ColorSuccessMapToken {
type ColorWarningMapToken (line 241) | interface ColorWarningMapToken {
type ColorInfoMapToken (line 302) | interface ColorInfoMapToken {
type ColorErrorMapToken (line 356) | interface ColorErrorMapToken {
type ColorMapToken (line 408) | interface ColorMapToken
FILE: components/theme/interface/maps/font.ts
type FontMapToken (line 1) | interface FontMapToken {
FILE: components/theme/interface/maps/index.ts
type CommonMapToken (line 13) | interface CommonMapToken extends StyleMapToken {
type MapToken (line 25) | interface MapToken
FILE: components/theme/interface/maps/size.ts
type SizeMapToken (line 1) | interface SizeMapToken {
type HeightMapToken (line 47) | interface HeightMapToken {
FILE: components/theme/interface/maps/style.ts
type StyleMapToken (line 1) | interface StyleMapToken {
FILE: components/theme/interface/presetColors.ts
type PresetColorKey (line 17) | type PresetColorKey = (typeof PresetColors)[number];
type PresetColorType (line 19) | type PresetColorType = Record<PresetColorKey, string>;
type ColorPaletteKeyIndex (line 21) | type ColorPaletteKeyIndex = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
type ColorPalettes (line 23) | type ColorPalettes = {
FILE: components/theme/interface/seeds.ts
type SeedToken (line 7) | interface SeedToken extends PresetColorType {
FILE: components/theme/internal.ts
type DesignTokenContext (line 65) | interface DesignTokenContext {
method setup (line 99) | setup(props, { slots }) {
function useToken (line 107) | function useToken(): [
type UseComponentStyleResult (line 141) | type UseComponentStyleResult = [(node: VueNode) => VueNode, Ref<string>];
type GenerateStyle (line 143) | type GenerateStyle<
FILE: components/theme/themes/ColorMap.ts
type ColorMap (line 3) | interface ColorMap {
type GenerateColorMap (line 16) | type GenerateColorMap = (baseColor: string) => ColorMap;
type GenerateNeutralColorMap (line 17) | type GenerateNeutralColorMap = (
FILE: components/theme/themes/compact/genCompactSizeMapToken.ts
function genSizeMapToken (line 3) | function genSizeMapToken(token: SeedToken): SizeMapToken {
FILE: components/theme/themes/default/index.ts
function derivative (line 11) | function derivative(token: SeedToken): MapToken {
FILE: components/theme/themes/shared/genColorMapToken.ts
type PaletteGenerators (line 5) | interface PaletteGenerators {
function genColorMapToken (line 10) | function genColorMapToken(
FILE: components/theme/themes/shared/genCommonMapToken.ts
function genCommonMapToken (line 4) | function genCommonMapToken(token: SeedToken): CommonMapToken {
FILE: components/theme/themes/shared/genFontSizes.ts
function getFontSizes (line 2) | function getFontSizes(base: number) {
FILE: components/theme/themes/shared/genSizeMapToken.ts
function genSizeMapToken (line 3) | function genSizeMapToken(token: SeedToken): SizeMapToken {
FILE: components/theme/util/alias.ts
type RawMergedToken (line 7) | type RawMergedToken = MapToken & OverrideToken & { override: Partial<Ali...
function formatToken (line 14) | function formatToken(derivativeToken: RawMergedToken): AliasToken {
FILE: components/theme/util/genComponentStyleHook.ts
type OverrideTokenWithoutDerivative (line 13) | type OverrideTokenWithoutDerivative = ComponentTokenMap;
type OverrideComponent (line 14) | type OverrideComponent = keyof OverrideTokenWithoutDerivative;
type GlobalTokenWithComponent (line 15) | type GlobalTokenWithComponent<ComponentName extends OverrideComponent> =...
type StyleInfo (line 18) | interface StyleInfo<ComponentName extends OverrideComponent> {
type TokenWithCommonCls (line 26) | type TokenWithCommonCls<T> = T & {
type FullToken (line 36) | type FullToken<ComponentName extends OverrideComponent> = TokenWithCommo...
function genComponentStyleHook (line 40) | function genComponentStyleHook<ComponentName extends OverrideComponent>(
FILE: components/theme/util/getAlphaColor.ts
function isStableColor (line 3) | function isStableColor(color: number): boolean {
function getAlphaColor (line 7) | function getAlphaColor(frontColor: string, backgroundColor: string): str...
FILE: components/theme/util/statistic.ts
function merge (line 11) | function merge<T extends object>(...objs: Partial<T>[]): T {
function noop (line 48) | function noop() {}
function statisticToken (line 51) | function statisticToken<T extends object>(token: T) {
FILE: components/time-picker/__tests__/index.test.js
method render (line 27) | render() {
method render (line 51) | render() {
FILE: components/time-picker/date-fns.tsx
type TimeRangePickerProps (line 8) | interface TimeRangePickerProps extends Omit<RangePickerTimeProps<Date>, ...
type TimePickerProps (line 12) | interface TimePickerProps extends Omit<PickerTimeProps<Date>, 'picker'> {
FILE: components/time-picker/dayjs.tsx
type TimeRangePickerProps (line 9) | interface TimeRangePickerProps extends Omit<RangePickerTimeProps<Dayjs>,...
type TimePickerProps (line 13) | interface TimePickerProps extends Omit<PickerTimeProps<Dayjs>, 'picker'> {
FILE: components/time-picker/index.tsx
type TimePickerLocale (line 3) | interface TimePickerLocale {
FILE: components/time-picker/moment.tsx
type TimeRangePickerProps (line 9) | interface TimeRangePickerProps extends Omit<RangePickerTimeProps<Moment>...
type TimePickerProps (line 13) | interface TimePickerProps extends Omit<PickerTimeProps<Moment>, 'picker'> {
FILE: components/time-picker/time-picker.tsx
type TimePickerLocale (line 22) | interface TimePickerLocale {
type CommonTimePickerProps (line 41) | type CommonTimePickerProps = Partial<ExtractPropTypes<ReturnType<typeof ...
type TimeRangePickerProps (line 42) | type TimeRangePickerProps<DateType> = Omit<
type TimePickerProps (line 63) | type TimePickerProps<DateType> = CommonProps<DateType> &
function createTimePicker (line 69) | function createTimePicker<
FILE: components/timeline/Timeline.tsx
type TimelineProps (line 26) | type TimelineProps = Partial<ExtractPropTypes<ReturnType<typeof timeline...
method setup (line 41) | setup(props, { slots, attrs }) {
FILE: components/timeline/TimelineItem.tsx
type TimelineItemProps (line 19) | type TimelineItemProps = Partial<ExtractPropTypes<ReturnType<typeof time...
method setup (line 33) | setup(props, { slots }) {
FILE: components/timeline/style/index.tsx
type ComponentToken (line 6) | interface ComponentToken {}
type TimelineToken (line 8) | interface TimelineToken extends FullToken<'Timeline'> {
FILE: components/tooltip/Tooltip.tsx
type TooltipAlignConfig (line 30) | interface TooltipAlignConfig {
type TooltipProps (line 69) | type TooltipProps = Partial<ExtractPropTypes<ReturnType<typeof tooltipPr...
method setup (line 89) | setup(props, { slots, emit, attrs, expose }) {
FILE: components/tooltip/__tests__/tooltip.test.js
method render (line 13) | render() {
FILE: components/tooltip/abstractTooltipProps.ts
type TriggerType (line 4) | type TriggerType = 'hover' | 'focus' | 'click' | 'contextmenu';
type TooltipPlacement (line 8) | type TooltipPlacement =
FILE: components/tooltip/style/index.ts
type ComponentToken (line 8) | interface ComponentToken {
type TooltipToken (line 13) | interface TooltipToken extends FullToken<'Tooltip'> {
FILE: components/tooltip/util.ts
function parseColor (line 5) | function parseColor(prefixCls: string, color?: string) {
FILE: components/tour/__tests__/index.test.js
method setup (line 10) | setup() {
FILE: components/tour/index.tsx
method setup (line 22) | setup(props, { attrs, emit, slots }) {
FILE: components/tour/interface.ts
type TourProps (line 14) | type TourProps = Partial<ExtractPropTypes<ReturnType<typeof tourProps>>>;
type TourBtnProps (line 16) | interface TourBtnProps {
type TourStepProps (line 36) | type TourStepProps = Partial<ExtractPropTypes<ReturnType<typeof tourStep...
type TourLocale (line 38) | interface TourLocale {
FILE: components/tour/panelRender.tsx
method setup (line 19) | setup(props, { attrs, slots }) {
FILE: components/tour/style/index.ts
type ComponentToken (line 7) | interface ComponentToken {}
type TourToken (line 9) | interface TourToken extends FullToken<'Tour'> {
FILE: components/tour/useMergedType.ts
type Props (line 5) | interface Props {
FILE: components/transfer/ListBody.tsx
type TransferListBodyProps (line 22) | type TransferListBodyProps = Partial<ExtractPropTypes<typeof transferLis...
function parsePagination (line 24) | function parsePagination(pagination) {
method setup (line 52) | setup(props, { emit, expose }) {
FILE: components/transfer/ListItem.tsx
function noop (line 13) | function noop() {}
type TransferListItemProps (line 27) | type TransferListItemProps = Partial<ExtractPropTypes<typeof transferLis...
method setup (line 35) | setup(props, { emit }) {
FILE: components/transfer/__tests__/index.test.js
method setup (line 93) | setup() {
method setup (line 106) | setup() {
method setup (line 124) | setup() {
method setup (line 144) | setup() {
method setup (line 163) | setup() {
method setup (line 183) | setup() {
method setup (line 244) | setup() {
method setup (line 282) | setup() {
method setup (line 460) | setup() {
method render (line 486) | render() {
FILE: components/transfer/__tests__/search.test.js
method render (line 54) | render() {
FILE: components/transfer/index.tsx
type TransferDirection (line 37) | type TransferDirection = 'left' | 'right';
type RenderResultObject (line 39) | interface RenderResultObject {
type RenderResult (line 44) | type RenderResult = VueNode | RenderResultObject | string | null;
type TransferItem (line 46) | interface TransferItem {
type KeyWise (line 54) | type KeyWise<T> = T & { key: string };
type KeyWiseTransferItem (line 56) | type KeyWiseTransferItem = KeyWise<TransferItem>;
type TransferRender (line 58) | type TransferRender<RecordType> = (item: RecordType) => RenderResult;
type ListStyle (line 60) | interface ListStyle {
type SelectAllLabel (line 64) | type SelectAllLabel =
type TransferLocale (line 68) | interface TransferLocale {
type TransferProps (line 121) | type TransferProps = Partial<ExtractPropTypes<ReturnType<typeof transfer...
method setup (line 140) | setup(props, { emit, attrs, slots, expose }) {
FILE: components/transfer/interface.ts
type PaginationType (line 1) | type PaginationType =
FILE: components/transfer/list.tsx
function isRenderResultPlainObject (line 20) | function isRenderResultPlainObject(result: VNode) {
function getEnabledItemKeys (line 28) | function getEnabledItemKeys<RecordType extends TransferItem>(items: Reco...
type TransferListProps (line 65) | type TransferListProps = Partial<ExtractPropTypes<typeof transferListPro...
method setup (line 78) | setup(props, { attrs, slots }) {
FILE: components/transfer/operation.tsx
function noop (line 7) | function noop() {}
type TransferOperationProps (line 9) | interface TransferOperationProps {
FILE: components/transfer/search.tsx
type TransferSearchProps (line 17) | type TransferSearchProps = Partial<ExtractPropTypes<typeof transferSearc...
method setup (line 27) | setup(props, { emit }) {
FILE: components/transfer/style/index.tsx
type ComponentToken (line 7) | interface ComponentToken {
type TransferToken (line 13) | interface TransferToken extends FullToken<'Transfer'> {
FILE: components/tree-select/index.tsx
type RawValue (line 49) | type RawValue = string | number;
type LabeledValue (line 51) | interface LabeledValue {
type SelectValue (line 57) | type SelectValue = RawValue | RawValue[] | LabeledValue | LabeledValue[];
type RefTreeSelectProps (line 59) | type RefTreeSelectProps = BaseSelectRef;
function treeSelectProps (line 61) | function treeSelectProps<
type TreeSelectProps (line 89) | type TreeSelectProps = Partial<ExtractPropTypes<ReturnType<typeof treeSe...
method setup (line 115) | setup(props, { attrs, slots, expose, emit }) {
FILE: components/tree-select/style/index.tsx
type TreeSelectToken (line 7) | interface TreeSelectToken extends FullToken<'TreeSelect'> {
function useTreeSelectStyle (line 67) | function useTreeSelectStyle(prefixCls: Ref<string>, treePrefixCls: Ref<s...
FILE: components/tree/DirectoryTree.tsx
type ExpandAction (line 24) | type ExpandAction = false | 'click' | 'doubleclick' | 'dblclick';
type DirectoryTreeProps (line 31) | type DirectoryTreeProps = Partial<ExtractPropTypes<ReturnType<typeof dir...
function getIcon (line 33) | function getIcon(props: AntdTreeNodeAttribute) {
method setup (line 68) | setup(props, { attrs, slots, emit, expose }) {
FILE: components/tree/Tree.tsx
type AntdTreeNodeAttribute (line 24) | interface AntdTreeNodeAttribute {
type AntTreeNodeProps (line 44) | type AntTreeNodeProps = TreeNodeProps;
type TreeDataItem (line 47) | type TreeDataItem = DataNode;
type AntTreeNodeBaseEvent (line 49) | interface AntTreeNodeBaseEvent {
type AntTreeNodeCheckedEvent (line 54) | interface AntTreeNodeCheckedEvent extends AntTreeNodeBaseEvent {
type AntTreeNodeSelectedEvent (line 60) | interface AntTreeNodeSelectedEvent extends AntTreeNodeBaseEvent {
type AntTreeNodeExpandedEvent (line 66) | interface AntTreeNodeExpandedEvent extends AntTreeNodeBaseEvent {
type AntTreeNodeMouseEvent (line 70) | interface AntTreeNodeMouseEvent {
type AntTreeNodeDragEnterEvent (line 75) | interface AntTreeNodeDragEnterEvent extends AntTreeNodeMouseEvent {
type AntTreeNodeDropEvent (line 79) | interface AntTreeNodeDropEvent {
type TreeProps (line 142) | type TreeProps = Partial<ExtractPropTypes<ReturnType<typeof treeProps>>>;
method setup (line 163) | setup(props, { attrs, expose, emit, slots }) {
FILE: components/tree/style/index.ts
type TreeToken (line 58) | type TreeToken = DerivativeToken & {
FILE: components/tree/utils/dictUtil.ts
type Record (line 3) | enum Record {
function traverseNodesKey (line 9) | function traverseNodesKey(
function calcRangeKeys (line 26) | function calcRangeKeys({
function convertDirectoryKeysToNodes (line 83) | function convertDirectoryKeysToNodes(
FILE: components/tree/utils/dropIndicator.tsx
function dropIndicatorRender (line 5) | function dropIndicatorRender(props: {
FILE: components/tree/utils/iconUtil.tsx
type SwitcherIconProps (line 10) | interface SwitcherIconProps extends AntTreeNodeProps {
function renderSwitcherIcon (line 14) | function renderSwitcherIcon(
FILE: components/typography/Base.tsx
type BaseType (line 36) | type BaseType = 'secondary' | 'success' | 'warning' | 'danger';
type CopyConfig (line 41) | interface CopyConfig {
type EditConfig (line 47) | interface EditConfig {
type EllipsisConfig (line 59) | interface EllipsisConfig {
type BlockProps (line 69) | interface BlockProps extends TypographyProps {
type Locale (line 86) | interface Locale {
type InternalBlockProps (line 93) | interface InternalBlockProps extends BlockProps {
constant ELLIPSIS_STR (line 97) | const ELLIPSIS_STR = '...';
method setup (line 132) | setup(props, { slots, attrs, emit }) {
FILE: components/typography/Editable.tsx
type EditableProps (line 27) | type EditableProps = Partial<ExtractPropTypes<ReturnType<typeof editable...
method setup (line 34) | setup(props, { emit, slots, attrs }) {
FILE: components/typography/Link.tsx
type LinkProps (line 9) | type LinkProps = Partial<ExtractPropTypes<ReturnType<typeof linkProps>>> &
FILE: components/typography/Paragraph.tsx
type ParagraphProps (line 7) | type ParagraphProps = Partial<ExtractPropTypes<ReturnType<typeof paragra...
FILE: components/typography/Text.tsx
type TextProps (line 17) | type TextProps = Partial<ExtractPropTypes<ReturnType<typeof textProps>>>;
FILE: components/typography/Title.tsx
constant TITLE_ELE_LIST (line 7) | const TITLE_ELE_LIST = tupleNum(1, 2, 3, 4, 5);
type TitleProps (line 14) | type TitleProps = Partial<ExtractPropTypes<ReturnType<typeof titleProps>>>;
FILE: components/typography/Typography.tsx
type TypographyProps (line 10) | interface TypographyProps extends HTMLAttributes {
type InternalTypographyProps (line 15) | interface InternalTypographyProps extends TypographyProps {
method setup (line 28) | setup(props, { slots, attrs }) {
FILE: components/typography/__tests__/index.test.js
method get (line 29) | get() {
function copyTest (line 218) | function copyTest(name, text, target, icon) {
function testStep (line 266) | function testStep(name, submitFunc, expectFunc) {
FILE: components/typography/style/index.tsx
type ComponentToken (line 14) | interface ComponentToken {
type TypographyToken (line 19) | type TypographyToken = FullToken<'Typography'>;
FILE: components/typography/util.tsx
type MeasureResult (line 5) | interface MeasureResult {
type Option (line 9) | interface Option {
constant TEXT_NODE (line 15) | const TEXT_NODE = 3;
constant COMMENT_NODE (line 16) | const COMMENT_NODE = 8;
function resetDomStyles (line 27) | function resetDomStyles(target: HTMLElement, origin: HTMLElement) {
function getRealLineHeight (line 50) | function getRealLineHeight(originElement: HTMLElement) {
method render (line 87) | render() {
function inRange (line 103) | function inRange() {
function appendChildNode (line 137) | function appendChildNode(node: ChildNode) {
function measureText (line 142) | function measureText(
function measureNode (line 179) | function measureNode(childNode: ChildNode): MeasureResult {
FILE: components/upload/Dragger.tsx
method setup (line 10) | setup(props, { slots, attrs }) {
FILE: components/upload/Upload.tsx
constant LIST_IGNORE (line 23) | const LIST_IGNORE = `__LIST_IGNORE_${Date.now()}__`;
method setup (line 39) | setup(props, { slots, attrs, expose }) {
FILE: components/upload/UploadList/ListItem.tsx
type ListItemProps (line 63) | type ListItemProps = Partial<ExtractPropTypes<ReturnType<typeof listItem...
method setup (line 69) | setup(props, { slots, attrs }) {
FILE: components/upload/UploadList/index.tsx
method setup (line 49) | setup(props, { slots, expose }) {
FILE: components/upload/__tests__/mock.js
function setup (line 3) | function setup() {
FILE: components/upload/__tests__/upload.test.js
method mounted (line 16) | mounted() {
method render (line 19) | render() {
method beforeUpload (line 173) | beforeUpload() {}
FILE: components/upload/index.tsx
method install (line 13) | install(app: App) {
FILE: components/upload/interface.tsx
type FileType (line 17) | interface FileType extends OriRcFile {
type UploadFileStatus (line 21) | type UploadFileStatus = 'error' | 'success' | 'done' | 'uploading' | 're...
type HttpRequestHeader (line 23) | interface HttpRequestHeader {
type UploadFile (line 27) | interface UploadFile<T = any> {
type InternalUploadFile (line 48) | interface InternalUploadFile<T = any> extends UploadFile<T> {
type ShowUploadListInterface (line 52) | interface ShowUploadListInterface {
type UploadChangeParam (line 58) | interface UploadChangeParam<T = UploadFile> {
type UploadLocale (line 65) | interface UploadLocale {
type UploadType (line 73) | type UploadType = 'drag' | 'select';
type UploadListType (line 74) | type UploadListType = 'text' | 'picture' | 'picture-card';
type UploadListProgressProps (line 75) | type UploadListProgressProps = Omit<ProgressProps, 'percent' | 'type'> & {
type ItemRender (line 80) | type ItemRender<T = any> = (opt: {
type PreviewFileHandler (line 91) | type PreviewFileHandler = (file: FileType | Blob) => PromiseLike<string>;
type TransformFileHandler (line 92) | type TransformFileHandler = (
type BeforeUploadValueType (line 95) | type BeforeUploadValueType = void | boolean | string | Blob | FileType;
function uploadProps (line 97) | function uploadProps<T = any>() {
type UploadProps (line 160) | type UploadProps = Partial<ExtractPropTypes<ReturnType<typeof uploadProp...
type UploadState (line 162) | interface UploadState<T = any> {
function uploadListProps (line 167) | function uploadListProps<T = any>() {
type UploadListProps (line 193) | type UploadListProps = Partial<ExtractPropTypes<ReturnType<typeof upload...
FILE: components/upload/style/index.ts
type ComponentToken (line 11) | interface ComponentToken {}
type UploadToken (line 13) | interface UploadToken extends FullToken<'Upload'> {
FILE: components/upload/utils.tsx
function file2Obj (line 3) | function file2Obj(file: FileType): InternalUploadFile {
function updateFileList (line 18) | function updateFileList(file: UploadFile<any>, fileList: UploadFile<any>...
function getFileItem (line 29) | function getFileItem(file: FileType, fileList: UploadFile[]) {
function removeFileItem (line 34) | function removeFileItem(file: UploadFile, fileList: UploadFile[]) {
constant MEASURE_SIZE (line 76) | const MEASURE_SIZE = 200;
function previewImage (line 77) | function previewImage(file: File | Blob): Promise<string> {
FILE: components/vc-align/Align.tsx
type OnAlign (line 22) | type OnAlign = (source: HTMLElement, result: AlignResult) => void;
type AlignProps (line 24) | interface AlignProps {
type MonitorRef (line 42) | interface MonitorRef {
type RefAlign (line 47) | interface RefAlign {
function getElement (line 51) | function getElement(func: TargetType) {
function getPoint (line 56) | function getPoint(point: TargetType) {
method setup (line 66) | setup(props, { expose, slots }) {
FILE: components/vc-align/hooks/useBuffer.tsx
function cancelTrigger (line 7) | function cancelTrigger() {
function trigger (line 11) | function trigger(force?: boolean) {
FILE: components/vc-align/interface.ts
type AlignPoint (line 2) | type AlignPoint = string;
type AlignType (line 4) | interface AlignType {
type AlignResult (line 43) | interface AlignResult {
type TargetPoint (line 53) | interface TargetPoint {
type TargetType (line 60) | type TargetType = (() => HTMLElement) | TargetPoint;
FILE: components/vc-align/util.ts
function isSamePoint (line 5) | function isSamePoint(prev: TargetPoint, next: TargetPoint) {
function restoreFocus (line 20) | function restoreFocus(activeElement, container) {
function monitorResize (line 31) | function monitorResize(element: HTMLElement, callback: Function) {
FILE: components/vc-cascader/Cascader.tsx
type ShowSearchType (line 28) | interface ShowSearchType<OptionType extends BaseOptionType = DefaultOpti...
type FieldNames (line 41) | interface FieldNames {
type InternalFieldNames (line 47) | interface InternalFieldNames extends Required<FieldNames> {
type SingleValueType (line 51) | type SingleValueType = (string | number)[];
type ValueType (line 53) | type ValueType = SingleValueType | SingleValueType[];
type ShowCheckedStrategy (line 54) | type ShowCheckedStrategy = typeof SHOW_PARENT | typeof SHOW_CHILD;
type BaseOptionType (line 56) | interface BaseOptionType {
type DefaultOptionType (line 60) | interface DefaultOptionType extends BaseOptionType {
function baseCascaderProps (line 66) | function baseCascaderProps<OptionType extends BaseOptionType = DefaultOp...
type BaseCascaderProps (line 129) | type BaseCascaderProps = Partial<ExtractPropTypes<ReturnType<typeof base...
type OnSingleChange (line 131) | type OnSingleChange<OptionType> = (value: SingleValueType, selectOptions...
type OnMultipleChange (line 132) | type OnMultipleChange<OptionType> = (
function singleCascaderProps (line 137) | function singleCascaderProps<OptionType extends BaseOptionType = Default...
type SingleCascaderProps (line 145) | type SingleCascaderProps = Partial<ExtractPropTypes<ReturnType<typeof si...
function multipleCascaderProps (line 147) | function multipleCascaderProps<OptionType extends BaseOptionType = Defau...
type MultipleCascaderProps (line 155) | type MultipleCascaderProps = Partial<
function internalCascaderProps (line 159) | function internalCascaderProps<OptionType extends BaseOptionType = Defau...
type CascaderProps (line 169) | type CascaderProps = Partial<ExtractPropTypes<ReturnType<typeof internal...
type CascaderRef (line 170) | type CascaderRef = Omit<BaseSelectRef, 'scrollTo'>;
function isMultipleValue (line 172) | function isMultipleValue(value: ValueType): value is SingleValueType[] {
function toRawValues (line 176) | function toRawValues(value: ValueType): SingleValueType[] {
method setup (line 193) | setup(props, { attrs, expose, slots }) {
FILE: components/vc-cascader/OptionList/Checkbox.tsx
type CheckboxProps (line 4) | interface CheckboxProps {
function Checkbox (line 12) | function Checkbox({
FILE: components/vc-cascader/OptionList/Column.tsx
constant FIX_LABEL (line 8) | const FIX_LABEL = '__cascader_fix_label__';
type ColumnProps (line 9) | interface ColumnProps {
function Column (line 26) | function Column({
FILE: components/vc-cascader/OptionList/index.tsx
method setup (line 23) | setup(_props, context) {
FILE: components/vc-cascader/context.ts
type CascaderContextProps (line 11) | interface CascaderContextProps {
FILE: components/vc-cascader/hooks/useEntities.ts
type OptionsInfo (line 8) | interface OptionsInfo {
FILE: components/vc-cascader/hooks/useSearchConfig.ts
function useSearchConfig (line 7) | function useSearchConfig(showSearch?: Ref<BaseCascaderProps['showSearch'...
FILE: components/vc-cascader/hooks/useSearchOptions.ts
constant SEARCH_MARK (line 5) | const SEARCH_MARK = '__rc_cascader_search_mark__';
function dig (line 28) | function dig(list: DefaultOptionType[], pathOptions: DefaultOptionType[]) {
FILE: components/vc-cascader/utils/commonUtil.ts
constant VALUE_SPLIT (line 8) | const VALUE_SPLIT = '__RC_CASCADER_SPLIT__';
constant SHOW_PARENT (line 9) | const SHOW_PARENT = 'SHOW_PARENT';
constant SHOW_CHILD (line 10) | const SHOW_CHILD = 'SHOW_CHILD';
function toPathKey (line 12) | function toPathKey(value: SingleValueType) {
function toPathKeys (line 16) | function toPathKeys(value: SingleValueType[]) {
function toPathValueStr (line 20) | function toPathValueStr(pathKey: string) {
function fillFieldNames (line 24) | function fillFieldNames(fieldNames?: FieldNames): InternalFieldNames {
function isLeaf (line 35) | function isLeaf(option: DefaultOptionType, fieldNames: FieldNames) {
function scrollIntoParentView (line 39) | function scrollIntoParentView(element: HTMLElement) {
FILE: components/vc-cascader/utils/treeUtil.ts
function formatStrategyValues (line 11) | function formatStrategyValues(
function toPathOptions (line 28) | function toPathOptions(
FILE: components/vc-checkbox/Checkbox.tsx
method setup (line 32) | setup(props, { attrs, emit, expose }) {
FILE: components/vc-dialog/Content.tsx
type ContentRef (line 9) | type ContentRef = {
method setup (line 25) | setup(props, { expose, slots, attrs }) {
FILE: components/vc-dialog/Dialog.tsx
method setup (line 39) | setup(props, { attrs, slots }) {
FILE: components/vc-dialog/DialogWrap.tsx
method setup (line 16) | setup(props, { attrs, slots }) {
FILE: components/vc-dialog/IDialogPropTypes.ts
function dialogPropTypes (line 4) | function dialogPropTypes() {
type IDialogChildProps (line 48) | type IDialogChildProps = Partial<ExtractPropTypes<ReturnType<typeof dial...
FILE: components/vc-dialog/Mask.tsx
method setup (line 13) | setup(props, {}) {
FILE: components/vc-dialog/util.ts
function getMotionName (line 2) | function getMotionName(prefixCls: string, transitionName?: string, anima...
function getUUID (line 12) | function getUUID() {
function getScroll (line 18) | function getScroll(w: Window, top?: boolean): number {
type CompatibleDocument (line 31) | type CompatibleDocument = {
function offset (line 35) | function offset(el: Element) {
FILE: components/vc-drawer/src/DrawerChild.tsx
type scrollLockOptions (line 18) | interface scrollLockOptions {
method setup (line 27) | setup(props, { emit, slots }) {
FILE: components/vc-drawer/src/DrawerWrapper.tsx
method setup (line 27) | setup(props, { emit, slots }) {
FILE: components/vc-drawer/src/IDrawerPropTypes.ts
type IPlacement (line 5) | type IPlacement = 'left' | 'top' | 'right' | 'bottom';
type ILevelMove (line 6) | type ILevelMove = number | [number, number];
FILE: components/vc-drawer/src/utils.ts
function dataToArray (line 1) | function dataToArray(vars: any) {
function addEventListener (line 22) | function addEventListener(
function removeEventListener (line 36) | function removeEventListener(
function transformArguments (line 50) | function transformArguments(arg: any, cb: any) {
FILE: components/vc-dropdown/Dropdown.tsx
method setup (line 37) | setup(props, { slots, emit, expose }) {
FILE: components/vc-image/src/Image.tsx
type GetContainer (line 13) | type GetContainer = string | HTMLElement | (() => HTMLElement);
type ImagePreviewType (line 16) | type ImagePreviewType = Omit<
type ImageProps (line 54) | type ImageProps = Partial<ReturnType<typeof imageProps>>;
type ImageStatus (line 55) | type ImageStatus = 'normal' | 'error' | 'loading';
method setup (line 73) | setup(props, { attrs, slots, emit }) {
FILE: components/vc-image/src/Preview.tsx
type PreviewProps (line 26) | interface PreviewProps extends Omit<IDialogChildProps, 'onClose' | 'mask...
method setup (line 64) | setup(props, { emit, attrs }) {
FILE: components/vc-image/src/PreviewGroup.tsx
type PreviewGroupPreview (line 18) | interface PreviewGroupPreview
type GroupConsumerProps (line 27) | interface GroupConsumerProps {
type PreviewUrl (line 33) | interface PreviewUrl {
type GroupConsumerValue (line 38) | interface GroupConsumerValue extends GroupConsumerProps {
method setup (line 86) | setup(props, { slots }) {
FILE: components/vc-image/src/getFixScaleEleTransPosition.ts
function fixPoint (line 3) | function fixPoint(key: 'x' | 'y', start: number, width: number, clientWi...
function getFixScaleEleTransPosition (line 38) | function getFixScaleEleTransPosition(
FILE: components/vc-image/src/hooks/useFrameSetState.ts
type SetActionType (line 4) | type SetActionType<T> = Partial<T> | ((state: T) => Partial<T>);
function useFrameSetState (line 5) | function useFrameSetState<T extends object>(
FILE: components/vc-input/BaseInput.tsx
method setup (line 13) | setup(props, { slots, attrs }) {
FILE: components/vc-input/Input.tsx
method setup (line 24) | setup(props, { slots, attrs, expose, emit }) {
FILE: components/vc-input/inputProps.ts
type InputProps (line 105) | type InputProps = Partial<ExtractPropTypes<ReturnType<typeof inputProps>>>;
type ShowCountProps (line 107) | interface ShowCountProps {
type InputRef (line 111) | interface InputRef {
FILE: components/vc-input/utils/commonUtils.ts
function hasPrefixSuffix (line 10) | function hasPrefixSuffix(propsAndSlots: any) {
function hasAddon (line 18) | function hasAddon(propsAndSlots: any) {
function fixControlledValue (line 22) | function fixControlledValue(value: string | number) {
function resolveOnChange (line 29) | function resolveOnChange(
type InputFocusOptions (line 74) | interface InputFocusOptions extends FocusOptions {
function triggerFocus (line 78) | function triggerFocus(
FILE: components/vc-input/utils/types.ts
type LiteralUnion (line 3) | type LiteralUnion<T extends U, U> = T | (U & {});
FILE: components/vc-mentions/src/DropdownMenu.tsx
function noop (line 8) | function noop() {}
method setup (line 19) | setup(props, { slots }) {
FILE: components/vc-mentions/src/KeywordTrigger.tsx
constant BUILT_IN_PLACEMENTS (line 7) | const BUILT_IN_PLACEMENTS = {
method setup (line 59) | setup(props, { slots }) {
FILE: components/vc-mentions/src/Mentions.tsx
type MentionsProps (line 31) | type MentionsProps = Partial<ExtractPropTypes<typeof vcMentionsProps>>;
function noop (line 33) | function noop() {}
method setup (line 41) | setup(props, { emit, attrs, expose, slots }) {
FILE: components/vc-mentions/src/MentionsContext.ts
type MentionsContext (line 4) | interface MentionsContext {
FILE: components/vc-mentions/src/Option.tsx
type BaseOptionsProps (line 15) | type BaseOptionsProps = Partial<ExtractPropTypes<typeof baseOptionsProps...
type OptionProps (line 18) | type OptionProps = Partial<ExtractPropTypes<typeof optionProps>> & Parti...
method render (line 23) | render(_props: any, { slots }: any) {
FILE: components/vc-mentions/src/mentionsProps.ts
type Direction (line 12) | type Direction = 'ltr' | 'rtl';
FILE: components/vc-mentions/src/util.ts
function getBeforeSelectionText (line 7) | function getBeforeSelectionText(input: HTMLTextAreaElement) {
type MeasureIndex (line 12) | interface MeasureIndex {
function getLastMeasureIndex (line 19) | function getLastMeasureIndex(text: string, prefix: string | string[] = '...
type MeasureConfig (line 36) | interface MeasureConfig {
function lower (line 44) | function lower(char: string | undefined): string {
function reduceText (line 48) | function reduceText(text: string, targetText: string, split: string) {
function replaceWithMeasure (line 75) | function replaceWithMeasure(text: string, measureConfig: MeasureConfig) {
function setInputSelection (line 105) | function setInputSelection(input: HTMLTextAreaElement, location: number) {
function validateSearch (line 116) | function validateSearch(text: string, props: MentionsProps) {
function filterOption (line 121) | function filterOption(input: string, { value = '' }: OptionProps): boole...
FILE: components/vc-notification/HookNotification.tsx
function getUuid (line 14) | function getUuid() {
type Placement (line 20) | type Placement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft...
type OpenConfig (line 22) | interface OpenConfig extends NoticeProps {
type Placements (line 29) | type Placements = Partial<Record<Placement, OpenConfig[]>>;
type NoticeContent (line 31) | interface NoticeContent extends Omit<NoticeProps, 'prefixCls' | 'noticeK...
type NoticeFunc (line 42) | type NoticeFunc = (noticeProps: NoticeContent) => void;
type HolderReadyCallback (line 43) | type HolderReadyCallback = (
type NotificationInstance (line 48) | interface NotificationInstance {
type HookNotificationProps (line 56) | interface HookNotificationProps {
type NotificationState (line 72) | type NotificationState = {
method setup (line 96) | setup(props, { attrs, slots }) {
FILE: components/vc-notification/Notice.tsx
type DivProps (line 7) | interface DivProps extends HTMLAttributes {
type NoticeProps (line 12) | interface NoticeProps {
method setup (line 47) | setup(props, { attrs, slots }) {
FILE: components/vc-notification/Notification.tsx
function getUuid (line 23) | function getUuid() {
type NoticeContent (line 29) | interface NoticeContent extends Omit<NoticeProps, 'prefixCls' | 'noticeK...
type Placement (line 38) | type Placement = 'top' | 'topLeft' | 'topRight' | 'bottom' | 'bottomLeft...
type OpenConfig (line 40) | interface OpenConfig extends NoticeProps {
type NoticeFunc (line 47) | type NoticeFunc = (noticeProps: NoticeContent) => void;
type HolderReadyCallback (line 48) | type HolderReadyCallback = (
type NotificationInstance (line 53) | interface NotificationInstance {
type NotificationProps (line 60) | interface NotificationProps {
type NotificationState (line 69) | type NotificationState = {
method setup (line 80) | setup(props, { attrs, expose, slots }) {
method setup (line 232) | setup(_props, { attrs }) {
FILE: components/vc-notification/useNotification.tsx
type OptionalConfig (line 11) | type OptionalConfig = Partial<OpenConfig>;
type NotificationConfig (line 13) | interface NotificationConfig {
type NotificationAPI (line 31) | interface NotificationAPI {
type OpenTask (line 37) | interface OpenTask {
type CloseTask (line 42) | interface CloseTask {
type DestroyTask (line 47) | interface DestroyTask {
type Task (line 51) | type Task = OpenTask | CloseTask | DestroyTask;
function mergeConfig (line 55) | function mergeConfig<T>(...objList: Partial<T>[]): T {
function useNotification (line 73) | function useNotification(rootConfig: NotificationConfig = {}) {
FILE: components/vc-overflow/Item.tsx
constant UNDEFINED (line 8) | const UNDEFINED = undefined;
method setup (line 25) | setup(props, { slots, expose }) {
FILE: components/vc-overflow/Overflow.tsx
constant RESPONSIVE (line 12) | const RESPONSIVE = 'responsive' as const;
constant INVALIDATE (line 13) | const INVALIDATE = 'invalidate' as const;
function defaultRenderRest (line 15) | function defaultRenderRest<ItemType>(omittedItems: ItemType[]) {
type InterOverflowProps (line 45) | type InterOverflowProps = Partial<ExtractPropTypes<ReturnType<typeof ove...
type OverflowProps (line 46) | type OverflowProps = HTMLAttributes & InterOverflowProps;
method setup (line 52) | setup(props, { attrs, emit, slots }) {
FILE: components/vc-overflow/RawItem.tsx
method setup (line 23) | setup(props, { slots, attrs }) {
FILE: components/vc-overflow/context.ts
type OverflowContextProviderValueType (line 5) | interface OverflowContextProviderValueType {
method setup (line 33) | setup(props, { slots }) {
FILE: components/vc-pagination/Options.tsx
method setup (line 23) | setup(props) {
FILE: components/vc-pagination/Pager.tsx
method setup (line 29) | setup(props, { emit, attrs }) {
FILE: components/vc-pagination/Pagination.tsx
function isInteger (line 15) | function isInteger(value) {
function defaultItemRender (line 19) | function defaultItemRender({ originalElement }) {
function calculatePage (line 23) | function calculatePage(p, state, props) {
method data (line 62) | data() {
method current (line 77) | current(val) {
method pageSize (line 83) | pageSize(val) {
method stateCurrent (line 95) | stateCurrent(_val, oldValue) {
method total (line 109) | total() {
method getJumpPrevPage (line 129) | getJumpPrevPage() {
method getJumpNextPage (line 132) | getJumpNextPage() {
method getItemIcon (line 138) | getItemIcon(icon, label) {
method getValidValue (line 145) | getValidValue(e) {
method isValid (line 161) | isValid(page) {
method shouldDisplayQuickJumper (line 164) | shouldDisplayQuickJumper() {
method handleKeyDown (line 178) | handleKeyDown(event) {
method handleKeyUp (line 183) | handleKeyUp(e) {
method changePageSize (line 201) | changePageSize(size) {
method handleChange (line 231) | handleChange(p) {
method prev (line 254) | prev() {
method next (line 259) | next() {
method jumpPrev (line 264) | jumpPrev() {
method jumpNext (line 267) | jumpNext() {
method hasPrev (line 270) | hasPrev() {
method hasNext (line 273) | hasNext() {
method getShowSizeChanger (line 276) | getShowSizeChanger() {
method runIfEnter (line 283) | runIfEnter(event, callback, ...restParams) {
method runIfEnterPrev (line 289) | runIfEnterPrev(event) {
method runIfEnterNext (line 292) | runIfEnterNext(event) {
method runIfEnterJumpPrev (line 295) | runIfEnterJumpPrev(event) {
method runIfEnterJumpNext (line 298) | runIfEnterJumpNext(event) {
method handleGoTO (line 301) | handleGoTO(event) {
method renderPrev (line 307) | renderPrev(prevPage) {
method renderNext (line 321) | renderNext(nextPage) {
method render (line 334) | render() {
FILE: components/vc-picker/PanelContext.tsx
type ContextOperationRefProps (line 5) | type ContextOperationRefProps = {
type PanelContextProps (line 10) | type PanelContextProps = {
FILE: components/vc-picker/Picker.tsx
type PickerRefConfig (line 44) | type PickerRefConfig = {
type PickerSharedProps (line 49) | type PickerSharedProps<DateType> = {
type OmitPanelProps (line 105) | type OmitPanelProps<Props> = Omit<
type PickerBaseProps (line 110) | type PickerBaseProps<DateType> = {} & PickerSharedProps<DateType> &
type PickerDateProps (line 113) | type PickerDateProps<DateType> = {} & PickerSharedProps<DateType> &
type PickerTimeProps (line 116) | type PickerTimeProps<DateType> = {
type PickerProps (line 126) | type PickerProps<DateType> =
type OmitType (line 132) | type OmitType<DateType> = Omit<PickerBaseProps<DateType>, 'picker'> &
type MergedPickerProps (line 135) | type MergedPickerProps<DateType> = {
function Picker (line 139) | function Picker<DateType>() {
FILE: components/vc-picker/PickerPanel.tsx
type PickerPanelSharedProps (line 43) | type PickerPanelSharedProps<DateType> = {
type PickerPanelBaseProps (line 89) | type PickerPanelBaseProps<DateType> = {
type PickerPanelDateProps (line 93) | type PickerPanelDateProps<DateType> = {
type PickerPanelTimeProps (line 103) | type PickerPanelTimeProps<DateType> = {
type PickerPanelProps (line 108) | type PickerPanelProps<DateType> =
type OmitType (line 114) | type OmitType<DateType> = Omit<PickerPanelBaseProps<DateType>, 'picker'> &
type MergedPickerPanelProps (line 117) | type MergedPickerPanelProps<DateType> = {
function PickerPanel (line 121) | function PickerPanel<DateType>() {
FILE: components/vc-picker/PickerTrigger.tsx
constant BUILT_IN_PLACEMENTS (line 7) | const BUILT_IN_PLACEMENTS = {
type Placement (line 42) | type Placement = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';
type PickerTriggerProps (line 44) | type PickerTriggerProps = {
function PickerTrigger (line 57) | function PickerTrigger(props: PickerTriggerProps, { slots }) {
FILE: components/vc-picker/PresetPanel.tsx
method setup (line 14) | setup(props) {
FILE: components/vc-picker/RangeContext.tsx
type RangeContextProps (line 5) | type RangeContextProps = {
type RangeContextProviderValue (line 16) | type RangeContextProviderValue = {
method setup (line 52) | setup(props, { slots }) {
FILE: components/vc-picker/RangePicker.tsx
function reorderValues (line 50) | function reorderValues<DateType>(
function canValueTrigger (line 61) | function canValueTrigger<DateType>(
type RangeType (line 82) | type RangeType = 'start' | 'end';
type RangeInfo (line 84) | type RangeInfo = {
type RangeDateRender (line 88) | type RangeDateRender<DateType> = (props: {
type RangePickerSharedProps (line 94) | type RangePickerSharedProps<DateType> = {
type OmitPickerProps (line 138) | type OmitPickerProps<Props> = Omit<
type RangeShowTimeObject (line 159) | type RangeShowTimeObject<DateType> = Omit<SharedTimeProps<DateType>, 'de...
type RangePickerBaseProps (line 163) | type RangePickerBaseProps<DateType> = {} & RangePickerSharedProps<DateTy...
type RangePickerDateProps (line 166) | type RangePickerDateProps<DateType> = {
type RangePickerTimeProps (line 171) | type RangePickerTimeProps<DateType> = {
type RangePickerProps (line 176) | type RangePickerProps<DateType> =
type OmitType (line 182) | type OmitType<DateType> = Omit<RangePickerBaseProps<DateType>, 'picker'> &
type MergedRangePickerProps (line 186) | type MergedRangePickerProps<DateType> = {
function RangerPicker (line 189) | function RangerPicker<DateType>() {
FILE: components/vc-picker/generate/dayjs.ts
type IlocaleMapObject (line 31) | type IlocaleMapObject = Record<string, string>;
function findTargetStr (line 112) | function findTargetStr(val: string, index: number, segmentation: string) {
FILE: components/vc-picker/generate/index.ts
type GenerateConfig (line 1) | type GenerateConfig<DateType> = {
FILE: components/vc-picker/hooks/useCellClassName.ts
function useCellClassName (line 6) | function useCellClassName<DateType>({
FILE: components/vc-picker/hooks/useHoverValue.ts
function useHoverValue (line 7) | function useHoverValue<DateType>(
FILE: components/vc-picker/hooks/useMergeProps.ts
function useMergeProps (line 5) | function useMergeProps<T>(props: T) {
FILE: components/vc-picker/hooks/usePickerInput.ts
function usePickerInput (line 8) | function usePickerInput({
FILE: components/vc-picker/hooks/usePresets.ts
function usePresets (line 7) | function usePresets<T>(
FILE: components/vc-picker/hooks/useRangeDisabled.ts
function useRangeDisabled (line 8) | function useRangeDisabled<DateType>(
FILE: components/vc-picker/hooks/useRangeViewDates.ts
function getStartEndDistance (line 8) | function getStartEndDistance<DateType>(
function getRangeViewDate (line 37) | function getRangeViewDate<DateType>(
function useRangeViewDates (line 65) | function useRangeViewDates<DateType>({
FILE: components/vc-picker/hooks/useTextVal
Copy disabled (too large)
Download .json
Condensed preview — 2992 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (13,005K chars).
[
{
"path": ".antd-tools.config.js",
"chars": 1340,
"preview": "const fs = require('fs');\nconst path = require('path');\n\nconst restCssPath = path.join(process.cwd(), 'components', 'sty"
},
{
"path": ".codecov.yml",
"chars": 26,
"preview": "codecov:\n branch: master\n"
},
{
"path": ".editorconfig",
"chars": 168,
"preview": "# 🎨 editorconfig.org\n\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_style = space\nindent_size = 2\ntrim_traili"
},
{
"path": ".eslintignore",
"chars": 162,
"preview": "node_modules/\n**/*.spec.*\n**/style/\n*.html\n/components/test/*\nes/\nlib/\n_site/\ndist/\nsite/dist/\ncomponents/version/versio"
},
{
"path": ".eslintrc.js",
"chars": 3152,
"preview": "module.exports = {\n root: true,\n env: {\n browser: true,\n node: true,\n jasmine: true,\n jest: true,\n es6:"
},
{
"path": ".gitattributes",
"chars": 56,
"preview": "*.jsx linguist-language=Vue\n*.tsx linguist-language=Vue\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 124,
"preview": "# These are supported funding model platforms\n\ngithub: # [tangjinzhou]\nopen_collective: ant-design-vue\npatreon: tangjinz"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 626,
"preview": "blank_issues_enabled: true\ncontact_links:\n - name: Create new issue\n url: https://vuecomponent.github.io/issue-helpe"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/pr_cn.md",
"chars": 734,
"preview": "首先,感谢你的贡献! 😄\n\n新特性请提交至 feature 分支,其余可提交至 main 分支。在一个维护者审核通过后合并。请确保填写以下 pull request 的信息,谢谢!~\n\n[[English Template / 英文模板]("
},
{
"path": ".github/PULL_REQUEST_TEMPLATE/pr_en.md",
"chars": 1614,
"preview": "First of all, thank you for your contribution! 😄\n\nNew feature please send pull request to feature branch, and rest to ma"
},
{
"path": ".github/issue-close-app.yml",
"chars": 680,
"preview": "comment: \"Your issue has been closed because it does not conform to our issue requirements. Please use the [Issue Helper"
},
{
"path": ".github/workflows/cloudflare.yml",
"chars": 1524,
"preview": "name: Build and Deploy to Cloudflare\non:\n push:\n branches: [ main ]\n\njobs:\n build:\n runs-on: ubuntu-latest\n n"
},
{
"path": ".github/workflows/codecov.yml",
"chars": 1964,
"preview": "name: codecov\n\non: [push]\n\njobs:\n setup:\n runs-on: ubuntu-latest\n steps:\n - name: checkout\n uses: act"
},
{
"path": ".github/workflows/emoji-helper.yml",
"chars": 257,
"preview": "name: Emoji Helper\n\non:\n release:\n types: [published]\n\njobs:\n emoji:\n runs-on: ubuntu-latest\n steps:\n - "
},
{
"path": ".github/workflows/issue-close-require.yml",
"chars": 603,
"preview": "name: Issue Close Require\n\non:\n schedule:\n - cron: \"0 0 * * *\"\n\npermissions:\n contents: read\n \njobs:\n close-issue"
},
{
"path": ".github/workflows/issue-labeled.yml",
"chars": 4405,
"preview": "name: Issue Labeled\n\non:\n issues:\n types: [labeled]\n\npermissions:\n contents: read\n\njobs:\n issue-labeled:\n permi"
},
{
"path": ".github/workflows/issue-open-check.yml",
"chars": 1330,
"preview": "name: Issue Open Check\n\non:\n issues:\n types: [opened]\n\n\npermissions:\n contents: read\n\njobs:\n issue-open-check:\n "
},
{
"path": ".github/workflows/lock-issue.yml",
"chars": 730,
"preview": "name: 'Lock threads'\n\non:\n schedule:\n - cron: '0 0 * * *'\n\njobs:\n lock:\n runs-on: ubuntu-latest\n steps:\n "
},
{
"path": ".github/workflows/stale.yml",
"chars": 641,
"preview": "name: \"Close stale issues\"\n\non:\n schedule:\n - cron: \"30 1 * * *\"\n\njobs:\n stale:\n runs-on: ubuntu-latest\n steps:"
},
{
"path": ".github/workflows/test.yml",
"chars": 2813,
"preview": "name: test\n\non: [push, pull_request]\n\njobs:\n setup:\n runs-on: ubuntu-latest\n steps:\n - name: checkout\n "
},
{
"path": ".gitignore",
"chars": 1205,
"preview": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directo"
},
{
"path": ".husky/.gitignore",
"chars": 2,
"preview": "_\n"
},
{
"path": ".husky/pre-commit",
"chars": 81,
"preview": "#!/bin/sh\n. \"$(dirname \"$0\")/_/husky.sh\"\n\nnpx --no-install pretty-quick --staged\n"
},
{
"path": ".huskyrc",
"chars": 180,
"preview": "{\n \"hooks\": {\n \"pre-commit\": \"pretty-quick --staged\",\n \"pre-publish\": \"npm run lint\",\n \"commit-msg\": \"commitli"
},
{
"path": ".jest.js",
"chars": 1903,
"preview": "const libDir = process.env.LIB_DIR;\n\nconst transformIgnorePatterns = [\n '/dist/',\n // Ignore modules without es dir.\n "
},
{
"path": ".npmrc",
"chars": 29,
"preview": "enable-pre-post-scripts=true\n"
},
{
"path": ".prettierignore",
"chars": 292,
"preview": "**/*.svg\nlib/\nes/\ndist/\n_site/\ncoverage/\nCNAME\nLICENSE\nyarn.lock\nnetlify.toml\nyarn-error.log\n*.sh\n*.snap\n.gitignore\n.npm"
},
{
"path": ".prettierrc",
"chars": 301,
"preview": "{\n \"singleQuote\": true,\n \"trailingComma\": \"all\",\n \"endOfLine\": \"lf\",\n \"printWidth\": 100,\n \"proseWrap\": \"never\",\n \""
},
{
"path": ".stylelintrc",
"chars": 818,
"preview": "{\n \"extends\": [\"stylelint-config-standard\", \"stylelint-config-prettier\"],\n \"rules\": {\n \"comment-empty-line-before\":"
},
{
"path": ".stylelintrc.json",
"chars": 1062,
"preview": "{\n \"extends\": [\n \"stylelint-config-standard\",\n \"stylelint-config-rational-order\",\n \"stylelint-config-prettier\""
},
{
"path": ".vcmrc",
"chars": 305,
"preview": "{\n \"helpMessage\": \"\\nPlease fix your commit message (and consider using https://www.npmjs.com/package/commitizen)\\n\",\n "
},
{
"path": "BACKERS.md",
"chars": 5032,
"preview": "<h1 align=\"center\">Sponsors & Backers</h1>\n\n<br><br>\n\n<h2 align=\"center\">企业赞助</h2>\n<p align=\"center\">\n <a href=\"htt"
},
{
"path": "CHANGELOG.en-US.md",
"chars": 16542,
"preview": "# Change Log (The following content is translated by Google)\n\n`ant-design-vue` strictly follows [Semantic Versioning 2.0"
},
{
"path": "CHANGELOG.zh-CN.md",
"chars": 12334,
"preview": "# 更新日志\n\n`ant-design-vue` 严格遵循 [Semantic Versioning 2.0.0](http://semver.org/lang/zh-CN/) 语义化版本规范。\n\n#### 发布周期\n\n- 修订版本号:每周"
},
{
"path": "LICENSE",
"chars": 3284,
"preview": "\nMIT License\n\nCopyright (c) 2017-present ant-design-vue\n\nPermission is hereby granted, free of charge, to any person obt"
},
{
"path": "README-zh_CN.md",
"chars": 10094,
"preview": "<h1 align=\"center\">\n <a href=\"https://www.antdv.com/\" target=\"_blank\">Ant Design Vue</a>\n</h1>\n\n<div align=\"center\">\n\n基"
},
{
"path": "README.md",
"chars": 8603,
"preview": "<p align=\"center\">\n <a href=\"https://www.antdv.com/\">\n <img width=\"200\" src=\"https://www.antdv.com/logo.png\">\n </a>"
},
{
"path": "SECURITY.md",
"chars": 586,
"preview": "# Security Policy\n\n## Supported Versions\n\nUse this section to tell people about which versions of your project are curre"
},
{
"path": "antd-tools/apiCollection.js",
"chars": 1862,
"preview": "// Read all the api from current documents\n\nconst glob = require('glob');\nconst fs = require('fs');\n\nconst COMPONENT_NAM"
},
{
"path": "antd-tools/cli/index.js",
"chars": 559,
"preview": "#!/usr/bin/env node\n\n'use strict';\n\nrequire('colorful').colorful();\n\nconst program = require('commander');\nconst package"
},
{
"path": "antd-tools/cli/run.js",
"chars": 1106,
"preview": "#!/usr/bin/env node\n/* eslint-disable no-console */\n\n'use strict';\n\nrequire('colorful').colorful();\nconst gulp = require"
},
{
"path": "antd-tools/generator-types/README.md",
"chars": 53,
"preview": "fork github.com/youzan/vant packages/generator-types\n"
},
{
"path": "antd-tools/generator-types/index.js",
"chars": 721,
"preview": "const path = require('path');\nconst pkg = require('../../package.json');\nconst { parseAndWrite } = require('./lib/index."
},
{
"path": "antd-tools/generator-types/src/formatter.ts",
"chars": 3011,
"preview": "import type { Articals } from './parser';\nimport { formatType, removeVersion, toKebabCase } from './utils';\nimport type "
},
{
"path": "antd-tools/generator-types/src/index.ts",
"chars": 3067,
"preview": "import glob from 'fast-glob';\nimport { dirname, join } from 'path';\nimport { mdParser } from './parser';\nimport { format"
},
{
"path": "antd-tools/generator-types/src/parser.ts",
"chars": 2206,
"preview": "/* eslint-disable no-cond-assign */\nconst TITLE_REG = /^(#+)\\s+([^\\n]*)/;\nconst TABLE_REG = /^\\|.+\\r?\\n\\|\\s*-+/;\nconst T"
},
{
"path": "antd-tools/generator-types/src/type.ts",
"chars": 729,
"preview": "import type { PathLike } from 'fs';\n\nexport type VueSlot = {\n name: string;\n description: string;\n};\n\nexport type VueE"
},
{
"path": "antd-tools/generator-types/src/utils.ts",
"chars": 805,
"preview": "// myName -> my-name\nexport function toKebabCase(camel: string): string {\n return camel.replace(/((?<=[a-z\\d])[A-Z]|(?<"
},
{
"path": "antd-tools/generator-types/src/web-types.ts",
"chars": 499,
"preview": "import type { VueTag, Options } from './type';\n\n// create web-types.json to provide autocomplete in JetBrains IDEs\nexpor"
},
{
"path": "antd-tools/generator-types/tsconfig.json",
"chars": 253,
"preview": "{\n \"compilerOptions\": {\n \"target\": \"ES2017\",\n \"outDir\": \"./lib\",\n \"module\": \"commonjs\",\n \"strict\": true,\n "
},
{
"path": "antd-tools/getBabelCommonConfig.js",
"chars": 1892,
"preview": "const { resolve, isThereHaveBrowserslistConfig } = require('./utils/projectHelper');\n\nmodule.exports = function (modules"
},
{
"path": "antd-tools/getNpm.js",
"chars": 289,
"preview": "'use strict';\n\nconst runCmd = require('./runCmd');\n\nmodule.exports = function (done) {\n if (process.env.NPM_CLI) {\n "
},
{
"path": "antd-tools/getTSCommonConfig.js",
"chars": 562,
"preview": "'use strict';\n\nconst fs = require('fs');\nconst { getProjectPath } = require('./utils/projectHelper');\n\nmodule.exports = "
},
{
"path": "antd-tools/getWebpackConfig.js",
"chars": 6693,
"preview": "const { getProjectPath, resolve } = require('./utils/projectHelper');\nconst path = require('path');\nconst webpack = requ"
},
{
"path": "antd-tools/gulpfile.js",
"chars": 13561,
"preview": "/* eslint-disable no-console */\nconst { getProjectPath, getConfig } = require('./utils/projectHelper');\nconst runCmd = r"
},
{
"path": "antd-tools/replaceLib.js",
"chars": 1151,
"preview": "'use strict';\n\nconst { dirname } = require('path');\nconst fs = require('fs');\nconst { getProjectPath } = require('./util"
},
{
"path": "antd-tools/runCmd.js",
"chars": 512,
"preview": "'use strict';\n\nconst isWindows = require('is-windows');\nconst getRunCmdEnv = require('./utils/getRunCmdEnv');\n\nfunction "
},
{
"path": "antd-tools/sortApiTable.js",
"chars": 4394,
"preview": "const program = require('commander');\nconst majo = require('majo');\nconst fs = require('fs');\nconst path = require('path"
},
{
"path": "antd-tools/utils/CleanUpStatsPlugin.js",
"chars": 1078,
"preview": "// We should use `stats` props of webpack. But it not work in v4.\nclass CleanUpStatsPlugin {\n constructor(option) {\n "
},
{
"path": "antd-tools/utils/get-npm-args.js",
"chars": 538,
"preview": "'use strict';\n\n// NOTE: the following code was partially adopted from https://github.com/iarna/in-publish\nmodule.exports"
},
{
"path": "antd-tools/utils/getChangelog.js",
"chars": 638,
"preview": "const fs = require('fs');\n\nmodule.exports = function getChangelog(file, version) {\n const lines = fs.readFileSync(file)"
},
{
"path": "antd-tools/utils/getRunCmdEnv.js",
"chars": 665,
"preview": "'use strict';\n\nconst path = require('path');\nconst isWindows = require('is-windows');\n\nmodule.exports = function getRunC"
},
{
"path": "antd-tools/utils/projectHelper.js",
"chars": 1798,
"preview": "const fs = require('fs');\nconst path = require('path');\n\nconst cwd = process.cwd();\n\nfunction getProjectPath(...filePath"
},
{
"path": "babel.config.js",
"chars": 647,
"preview": "module.exports = {\n env: {\n test: {\n presets: [['@babel/preset-env']],\n plugins: [\n ['@vue/babel-pl"
},
{
"path": "build.sh",
"chars": 133,
"preview": "#!/usr/bin/env bash\nrm -rf dist\nmkdir dist\n./node_modules/.bin/webpack --config webpack.site.config.js\ncp dist/index.htm"
},
{
"path": "components/__tests__/util/domHook.js",
"chars": 1737,
"preview": "const __NULL__ = { notExist: true };\n\nexport function spyElementPrototypes(Element, properties) {\n const propNames = Ob"
},
{
"path": "components/_util/ActionButton.tsx",
"chars": 3560,
"preview": "import type { ExtractPropTypes, PropType } from 'vue';\nimport { shallowRef, onMounted, defineComponent, onBeforeUnmount "
},
{
"path": "components/_util/BaseInput.tsx",
"chars": 4624,
"preview": "import type { PropType } from 'vue';\nimport { computed, defineComponent, shallowRef, ref, watch } from 'vue';\nimport Pro"
},
{
"path": "components/_util/BaseInputInner.tsx",
"chars": 2657,
"preview": "import type { PropType } from 'vue';\nimport { defineComponent, shallowRef } from 'vue';\nimport PropTypes from './vue-typ"
},
{
"path": "components/_util/BaseMixin.ts",
"chars": 1336,
"preview": "import { nextTick } from 'vue';\nimport { getOptionProps } from './props-util';\n\nexport default {\n methods: {\n setSta"
},
{
"path": "components/_util/EventInterface.ts",
"chars": 656,
"preview": "export type FocusEventHandler = (e: FocusEvent) => void;\nexport type MouseEventHandler = (e: MouseEvent) => void;\nexport"
},
{
"path": "components/_util/KeyCode.ts",
"chars": 6996,
"preview": "/**\n * @ignore\n * some key-codes definition and utils from closure-library\n * @author yiminghe@gmail.com\n */\n\nconst KeyC"
},
{
"path": "components/_util/Portal.tsx",
"chars": 1660,
"preview": "import PropTypes from './vue-types';\nimport {\n defineComponent,\n nextTick,\n onBeforeMount,\n onMounted,\n onUpdated,\n"
},
{
"path": "components/_util/PortalWrapper.tsx",
"chars": 5344,
"preview": "import PropTypes from './vue-types';\nimport Portal from './Portal';\nimport {\n defineComponent,\n shallowRef,\n watch,\n "
},
{
"path": "components/_util/__mocks__/Portal.tsx",
"chars": 266,
"preview": "import { defineComponent } from 'vue';\n\nexport default defineComponent({\n compatConfig: { MODE: 3 },\n name: 'Portal',\n"
},
{
"path": "components/_util/__mocks__/RenderSlot.tsx",
"chars": 282,
"preview": "import { defineComponent } from 'vue';\nimport { customRenderSlot } from '../vnode';\n\nexport default defineComponent({\n "
},
{
"path": "components/_util/__tests__/easings.test.js",
"chars": 349,
"preview": "import { easeInOutCubic } from '../easings';\n\ndescribe('Test easings', () => {\n it('easeInOutCubic return value', () =>"
},
{
"path": "components/_util/__tests__/scrollTo.test.js",
"chars": 1171,
"preview": "import scrollTo from '../scrollTo';\n\ndescribe('Test ScrollTo function', () => {\n let dateNowMock;\n\n beforeAll(() => {\n"
},
{
"path": "components/_util/__tests__/unreachableException.test.js",
"chars": 319,
"preview": "import UnreachableException from '../unreachableException';\n\ndescribe('UnreachableException', () => {\n it('error thrown"
},
{
"path": "components/_util/__tests__/vNode.test.js",
"chars": 645,
"preview": "import RenderSlot from '../__mocks__/RenderSlot';\nimport { mount } from '@vue/test-utils';\nimport { nextTick } from 'vue"
},
{
"path": "components/_util/canUseDom.ts",
"chars": 148,
"preview": "function canUseDom() {\n return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}"
},
{
"path": "components/_util/classNames.ts",
"chars": 668,
"preview": "import { isArray, isString, isObject } from './util';\nfunction classNames(...args: any[]) {\n const classes = [];\n for "
},
{
"path": "components/_util/collapseMotion.tsx",
"chars": 1361,
"preview": "import { nextTick } from 'vue';\nimport { addClass, removeClass } from '../vc-util/Dom/class';\nimport type { CSSMotionPro"
},
{
"path": "components/_util/colors.ts",
"chars": 1026,
"preview": "import type { PresetColorKey } from '../theme/interface';\nimport { PresetColors } from '../theme/interface';\n\ntype Inver"
},
{
"path": "components/_util/component-classes.ts",
"chars": 3496,
"preview": "/**\n * source by `component-classes`\n * https://github.com/component/classes.git\n */\n\nimport indexOf from 'lodash-es/ind"
},
{
"path": "components/_util/copy-to-clipboard/index.ts",
"chars": 3505,
"preview": "import deselectCurrent from './toggle-selection';\n\ninterface Options {\n debug?: boolean;\n message?: string;\n format?:"
},
{
"path": "components/_util/copy-to-clipboard/toggle-selection.ts",
"chars": 915,
"preview": "// copy from https://github.com/sudodoki/toggle-selection\n// refactor to esm\nconst deselectCurrent = (): (() => void) =>"
},
{
"path": "components/_util/createContext.ts",
"chars": 609,
"preview": "import { inject, provide, reactive, watchEffect } from 'vue';\n\nfunction createContext<T extends Record<string, any>>(def"
},
{
"path": "components/_util/createRef.ts",
"chars": 619,
"preview": "export interface RefObject extends Function {\n current?: any;\n}\n\nfunction createRef(): any {\n const func: RefObject = "
},
{
"path": "components/_util/cssinjs/Cache.ts",
"chars": 864,
"preview": "export type KeyType = string | number;\ntype ValueType = [number, any]; // [times, realValue]\nconst SPLIT = '%';\nclass En"
},
{
"path": "components/_util/cssinjs/Keyframes.ts",
"chars": 386,
"preview": "import type { CSSInterpolation } from './hooks/useStyleRegister';\n\nclass Keyframe {\n private name: string;\n style: CSS"
},
{
"path": "components/_util/cssinjs/StyleContext.tsx",
"chars": 6702,
"preview": "import type { ShallowRef, ExtractPropTypes, InjectionKey, Ref } from 'vue';\nimport {\n provide,\n defineComponent,\n unr"
},
{
"path": "components/_util/cssinjs/hooks/useCacheToken.tsx",
"chars": 5409,
"preview": "import hash from '@emotion/hash';\nimport { ATTR_TOKEN, CSS_IN_JS_INSTANCE, useStyleInject } from '../StyleContext';\nimpo"
},
{
"path": "components/_util/cssinjs/hooks/useGlobalCache.tsx",
"chars": 1806,
"preview": "import { useStyleInject } from '../StyleContext';\nimport type { KeyType } from '../Cache';\nimport useHMR from './useHMR'"
},
{
"path": "components/_util/cssinjs/hooks/useHMR.ts",
"chars": 807,
"preview": "function useProdHMR() {\n return false;\n}\n\nlet webpackHMR = false;\n\nfunction useDevHMR() {\n return webpackHMR;\n}\n\nexpor"
},
{
"path": "components/_util/cssinjs/hooks/useStyleRegister/cacheMapUtil.ts",
"chars": 2328,
"preview": "import canUseDom from '../../../../_util/canUseDom';\nimport { ATTR_MARK } from '../../StyleContext';\n\nexport const ATTR_"
},
{
"path": "components/_util/cssinjs/hooks/useStyleRegister/index.tsx",
"chars": 17741,
"preview": "import hash from '@emotion/hash';\nimport type * as CSS from 'csstype';\n// @ts-ignore\nimport unitless from '@emotion/unit"
},
{
"path": "components/_util/cssinjs/index.ts",
"chars": 1914,
"preview": "import useCacheToken from './hooks/useCacheToken';\nimport type { CSSInterpolation, CSSObject } from './hooks/useStyleReg"
},
{
"path": "components/_util/cssinjs/linters/contentQuotesLinter.ts",
"chars": 944,
"preview": "import type { Linter } from './interface';\nimport { lintWarning } from './utils';\n\nconst linter: Linter = (key, value, i"
},
{
"path": "components/_util/cssinjs/linters/hashedAnimationLinter.ts",
"chars": 411,
"preview": "import type { Linter } from './interface';\nimport { lintWarning } from './utils';\n\nconst linter: Linter = (key, value, i"
},
{
"path": "components/_util/cssinjs/linters/index.ts",
"chars": 425,
"preview": "export { default as contentQuotesLinter } from './contentQuotesLinter';\nexport { default as hashedAnimationLinter } from"
},
{
"path": "components/_util/cssinjs/linters/interface.ts",
"chars": 191,
"preview": "export interface LinterInfo {\n path?: string;\n hashId?: string;\n parentSelectors: string[];\n}\n\nexport interface Linte"
},
{
"path": "components/_util/cssinjs/linters/legacyNotSelectorLinter.ts",
"chars": 948,
"preview": "import type { Linter, LinterInfo } from './interface';\nimport { lintWarning } from './utils';\n\nfunction isConcatSelector"
},
{
"path": "components/_util/cssinjs/linters/logicalPropertiesLinter.ts",
"chars": 3258,
"preview": "import type { Linter } from './interface';\nimport { lintWarning } from './utils';\n\nconst linter: Linter = (key, value, i"
},
{
"path": "components/_util/cssinjs/linters/parentSelectorLinter.ts",
"chars": 402,
"preview": "import type { Linter } from '..';\nimport { lintWarning } from './utils';\n\nconst linter: Linter = (_key, _value, info) =>"
},
{
"path": "components/_util/cssinjs/linters/utils.ts",
"chars": 415,
"preview": "import devWarning from '../../../vc-util/warning';\nimport type { LinterInfo } from './interface';\n\nexport function lintW"
},
{
"path": "components/_util/cssinjs/theme/Theme.ts",
"chars": 1126,
"preview": "import warning from '../../warning';\nimport type { DerivativeFunc, TokenType } from './interface';\n\nlet uuid = 0;\n\n/**\n "
},
{
"path": "components/_util/cssinjs/theme/ThemeCache.ts",
"chars": 3910,
"preview": "import type Theme from './Theme';\nimport type { DerivativeFunc } from './interface';\n\n// ==============================="
},
{
"path": "components/_util/cssinjs/theme/createTheme.ts",
"chars": 801,
"preview": "import ThemeCache from './ThemeCache';\nimport Theme from './Theme';\nimport type { DerivativeFunc, TokenType } from './in"
},
{
"path": "components/_util/cssinjs/theme/index.ts",
"chars": 216,
"preview": "export { default as createTheme } from './createTheme';\nexport { default as Theme } from './Theme';\nexport { default as "
},
{
"path": "components/_util/cssinjs/theme/interface.ts",
"chars": 216,
"preview": "export type TokenType = object;\nexport type DerivativeFunc<DesignToken extends TokenType, DerivativeToken extends TokenT"
},
{
"path": "components/_util/cssinjs/transformers/interface.ts",
"chars": 115,
"preview": "import type { CSSObject } from '..';\n\nexport interface Transformer {\n visit?: (cssObj: CSSObject) => CSSObject;\n}\n"
},
{
"path": "components/_util/cssinjs/transformers/legacyLogicalProperties.ts",
"chars": 4943,
"preview": "import type { CSSObject } from '..';\nimport type { Transformer } from './interface';\n\nfunction splitValues(value: string"
},
{
"path": "components/_util/cssinjs/transformers/px2rem.ts",
"chars": 2048,
"preview": "/**\n * respect https://github.com/cuth/postcss-pxtorem\n */\nimport unitless from '@emotion/unitless';\nimport type { CSSOb"
},
{
"path": "components/_util/cssinjs/util.ts",
"chars": 2947,
"preview": "import hash from '@emotion/hash';\nimport { removeCSS, updateCSS } from '../../vc-util/Dom/dynamicCSS';\nimport canUseDom "
},
{
"path": "components/_util/debouncedWatch.ts",
"chars": 2329,
"preview": "// copy from https://github.dev/vueuse/vueuse\n\nimport type { Ref, WatchOptions, WatchStopHandle } from 'vue';\nimport { u"
},
{
"path": "components/_util/eagerComputed.ts",
"chars": 431,
"preview": "import { watchEffect, shallowRef } from 'vue';\nimport type { ComputedRef } from 'vue';\nexport declare type ComputedGette"
},
{
"path": "components/_util/easings.ts",
"chars": 217,
"preview": "export function easeInOutCubic(t: number, b: number, c: number, d: number) {\n const cc = c - b;\n t /= d / 2;\n if (t <"
},
{
"path": "components/_util/env.ts",
"chars": 524,
"preview": "/* eslint-disable no-undef */\n// Browser environment sniffing\nexport const inBrowser = typeof window !== 'undefined';\nex"
},
{
"path": "components/_util/extendsObject.ts",
"chars": 442,
"preview": "type RecordType = Record<string, any>;\n\nfunction extendsObject<T extends RecordType>(...list: T[]) {\n const result: Rec"
},
{
"path": "components/_util/firstNotUndefined.ts",
"chars": 222,
"preview": "function firstNotUndefined<T>(arr: T[] = []): T {\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i] !=="
},
{
"path": "components/_util/gapSize.ts",
"chars": 573,
"preview": "import type { SizeType } from '../config-provider/SizeContext';\n\nexport function isPresetSize(size?: SizeType | string |"
},
{
"path": "components/_util/getRequestAnimationFrame.ts",
"chars": 1389,
"preview": "const availablePrefixs = ['moz', 'ms', 'webkit'];\n\nfunction requestAnimationFramePolyfill() {\n let lastTime = 0;\n retu"
},
{
"path": "components/_util/getScroll.ts",
"chars": 1232,
"preview": "export function isWindow(obj: any): obj is Window {\n return obj !== null && obj !== undefined && obj === obj.window;\n}\n"
},
{
"path": "components/_util/getScrollBarSize.ts",
"chars": 1597,
"preview": "/* eslint-disable no-param-reassign */\n\nlet cached: number;\n\nexport default function getScrollBarSize(fresh?: boolean) {"
},
{
"path": "components/_util/hooks/_vueuse/_configurable.ts",
"chars": 1001,
"preview": "import { isClient } from './is';\n\nexport interface ConfigurableWindow {\n /*\n * Specify a custom `window` instance, e."
},
{
"path": "components/_util/hooks/_vueuse/is.ts",
"chars": 1480,
"preview": "export const isClient = typeof window !== 'undefined';\nexport const isDef = <T = any>(val?: T): val is T => typeof val !"
},
{
"path": "components/_util/hooks/_vueuse/resolveUnref.ts",
"chars": 248,
"preview": "import { unref } from 'vue';\nimport type { MaybeComputedRef } from './types';\n\n/**\n * Get the value of value/ref/getter."
},
{
"path": "components/_util/hooks/_vueuse/tryOnMounted.ts",
"chars": 472,
"preview": "// eslint-disable-next-line no-restricted-imports\nimport { getCurrentInstance, nextTick, onMounted } from 'vue';\nimport "
},
{
"path": "components/_util/hooks/_vueuse/tryOnScopeDispose.ts",
"chars": 334,
"preview": "import { getCurrentScope, onScopeDispose } from 'vue';\nimport type { Fn } from './types';\n\n/**\n * Call onScopeDispose() "
},
{
"path": "components/_util/hooks/_vueuse/types.ts",
"chars": 2917,
"preview": "import type { ComputedRef, Ref, WatchOptions, WatchSource } from 'vue';\n\n/**\n * Any function\n */\nexport type Fn = () => "
},
{
"path": "components/_util/hooks/_vueuse/unrefElement.ts",
"chars": 930,
"preview": "import type { ComponentPublicInstance } from 'vue';\nimport type { MaybeComputedRef, MaybeRef } from './types';\nimport { "
},
{
"path": "components/_util/hooks/_vueuse/useElementSize.ts",
"chars": 1678,
"preview": "import { shallowRef, watch } from 'vue';\nimport type { MaybeComputedElementRef } from './unrefElement';\nimport type { Us"
},
{
"path": "components/_util/hooks/_vueuse/useMutationObserver.ts",
"chars": 1645,
"preview": "import { tryOnScopeDispose } from './tryOnScopeDispose';\nimport { watch } from 'vue';\nimport type { MaybeElementRef } fr"
},
{
"path": "components/_util/hooks/_vueuse/useResizeObserver.ts",
"chars": 2569,
"preview": "import { tryOnScopeDispose } from './tryOnScopeDispose';\nimport { watch } from 'vue';\nimport type { MaybeComputedElement"
},
{
"path": "components/_util/hooks/_vueuse/useSupported.ts",
"chars": 332,
"preview": "import { tryOnMounted } from './tryOnMounted';\nimport { shallowRef } from 'vue';\n\nexport function useSupported(callback:"
},
{
"path": "components/_util/hooks/useBreakpoint.ts",
"chars": 649,
"preview": "import type { Ref } from 'vue';\nimport { onMounted, onUnmounted, shallowRef } from 'vue';\nimport type { ScreenMap } from"
},
{
"path": "components/_util/hooks/useDestroyed.ts",
"chars": 234,
"preview": "import { onBeforeUnmount, shallowRef } from 'vue';\n\nconst useDestroyed = () => {\n const destroyed = shallowRef(false);\n"
},
{
"path": "components/_util/hooks/useFlexGapSupport.ts",
"chars": 261,
"preview": "import { onMounted, shallowRef } from 'vue';\nimport { detectFlexGapSupported } from '../styleChecker';\n\nexport default ("
},
{
"path": "components/_util/hooks/useId.ts",
"chars": 683,
"preview": "import { ref } from 'vue';\nimport canUseDom from '../../_util/canUseDom';\n\nlet uuid = 0;\n\n/** Is client side and not jsd"
},
{
"path": "components/_util/hooks/useLayoutState.ts",
"chars": 1043,
"preview": "import type { Ref } from 'vue';\nimport { onBeforeUnmount, shallowRef } from 'vue';\nimport raf from '../raf';\n\nexport typ"
},
{
"path": "components/_util/hooks/useMemo.ts",
"chars": 520,
"preview": "import type { Ref, WatchSource } from 'vue';\nimport { ref, watch } from 'vue';\n\nexport default function useMemo<T>(\n ge"
},
{
"path": "components/_util/hooks/useMergedState.ts",
"chars": 1488,
"preview": "import type { Ref, UnwrapRef } from 'vue';\nimport { toRaw, watchEffect, unref, watch, ref } from 'vue';\n\nexport default "
},
{
"path": "components/_util/hooks/useRefs.ts",
"chars": 574,
"preview": "import type { Ref, ComponentPublicInstance } from 'vue';\nimport { onBeforeUpdate, ref } from 'vue';\nimport type { Key } "
},
{
"path": "components/_util/hooks/useScrollLocker.ts",
"chars": 1289,
"preview": "import type { Ref } from 'vue';\nimport { computed, watchEffect } from 'vue';\nimport { updateCSS, removeCSS } from '../.."
},
{
"path": "components/_util/hooks/useState.ts",
"chars": 475,
"preview": "import type { Ref } from 'vue';\nimport { ref } from 'vue';\n\nexport default function useState<T, R = Ref<T>>(\n defaultSt"
},
{
"path": "components/_util/isNumeric.ts",
"chars": 130,
"preview": "const isNumeric = (value: any): boolean => {\n return !isNaN(parseFloat(value)) && isFinite(value);\n};\n\nexport default i"
},
{
"path": "components/_util/isValid.ts",
"chars": 134,
"preview": "const isValid = (value: any): boolean => {\n return value !== undefined && value !== null && value !== '';\n};\nexport def"
},
{
"path": "components/_util/isValidValue.ts",
"chars": 83,
"preview": "export default function (val: any) {\n return val !== undefined && val !== null;\n}\n"
},
{
"path": "components/_util/json2mq.ts",
"chars": 1372,
"preview": "/**\n * source by `json2mq`\n * https://github.com/akiran/json2mq.git\n */\n\nconst camel2hyphen = function (str: string) {\n "
},
{
"path": "components/_util/omit.ts",
"chars": 335,
"preview": "function omit<T extends object, K extends keyof T>(obj: T, fields: K[]): Omit<T, K> {\n // eslint-disable-next-line pref"
},
{
"path": "components/_util/pickAttrs.ts",
"chars": 3058,
"preview": "const attributes = `accept acceptcharset accesskey action allowfullscreen allowtransparency\nalt async autocomplete autof"
},
{
"path": "components/_util/placements.ts",
"chars": 2607,
"preview": "import { placements } from '../vc-tooltip/src/placements';\n\nconst autoAdjustOverflowEnabled = {\n adjustX: 1,\n adjustY:"
},
{
"path": "components/_util/props-util/index.ts",
"chars": 8080,
"preview": "import classNames from '../classNames';\nimport { isVNode, Fragment, Comment, Text } from 'vue';\nimport { camelize, hyphe"
},
{
"path": "components/_util/props-util/initDefaultProps.ts",
"chars": 883,
"preview": "import type { PropType } from 'vue';\nimport type { VueTypeValidableDef, VueTypeDef } from 'vue-types';\n\nconst initDefaul"
},
{
"path": "components/_util/raf.ts",
"chars": 1048,
"preview": "let raf = (callback: FrameRequestCallback) => setTimeout(callback, 16) as any;\nlet caf = (num: number) => clearTimeout(n"
},
{
"path": "components/_util/reactivePick.ts",
"chars": 427,
"preview": "import type { UnwrapRef } from 'vue';\nimport { reactive, toRef } from 'vue';\nimport fromPairs from 'lodash-es/fromPairs'"
},
{
"path": "components/_util/requestAnimationTimeout.ts",
"chars": 513,
"preview": "import getRequestAnimationFrame, {\n cancelRequestAnimationFrame as caf,\n} from './getRequestAnimationFrame';\nconst raf "
},
{
"path": "components/_util/responsiveObserve.ts",
"chars": 2833,
"preview": "import { computed } from 'vue';\nimport type { GlobalToken } from '../theme/interface';\nimport { useToken } from '../them"
},
{
"path": "components/_util/scrollTo.ts",
"chars": 1292,
"preview": "import raf from './raf';\nimport { easeInOutCubic } from './easings';\nimport getScroll, { isWindow } from './getScroll';\n"
},
{
"path": "components/_util/setStyle.ts",
"chars": 756,
"preview": "import type { CSSProperties } from 'vue';\n\n/**\n * Easy to set element style, return previous style\n * IE browser compati"
},
{
"path": "components/_util/shallowequal.ts",
"chars": 1126,
"preview": "import { toRaw } from 'vue';\n\nfunction shallowEqual(objA: any, objB: any, compare?: any, compareContext?: any) {\n let r"
},
{
"path": "components/_util/static-style-extract/__tests__/__snapshots__/index.test.js.snap",
"chars": 686167,
"preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`Static-Style-Extract should extract static styles with customTheme "
},
{
"path": "components/_util/static-style-extract/__tests__/index.test.js",
"chars": 2224,
"preview": "// import { StyleProvider } from '../../cssinjs';\nimport { extractStyle } from '../index';\nimport { ConfigProvider } fro"
},
{
"path": "components/_util/static-style-extract/index.tsx",
"chars": 2297,
"preview": "import { createCache, extractStyle as extStyle, StyleProvider } from '../cssinjs';\nimport * as antd from '../../componen"
},
{
"path": "components/_util/static-style-extract/interface.ts",
"chars": 96,
"preview": "import type { VueNode } from '../type';\n\nexport type CustomRender = (node: VueNode) => VueNode;\n"
},
{
"path": "components/_util/statusUtils.tsx",
"chars": 772,
"preview": "import type { ValidateStatus } from '../form/FormItem';\nimport classNames from './classNames';\n\nconst InputStatuses = ['"
},
{
"path": "components/_util/styleChecker.ts",
"chars": 1844,
"preview": "import canUseDom from './canUseDom';\n\nexport const canUseDocElement = () => canUseDom() && window.document.documentEleme"
},
{
"path": "components/_util/supportsPassive.js",
"chars": 389,
"preview": "// Test via a getter in the options object to see if the passive property is accessed\nlet supportsPassive = false;\ntry {"
},
{
"path": "components/_util/throttleByAnimationFrame.ts",
"chars": 613,
"preview": "import raf from './raf';\n\ntype throttledFn = (...args: any[]) => void;\n\ntype throttledCancelFn = { cancel: () => void };"
},
{
"path": "components/_util/toReactive.ts",
"chars": 1005,
"preview": "import { isRef, reactive } from 'vue';\nimport type { Ref } from 'vue';\ntype MaybeRef<T> = T | Ref<T>;\n/**\n * Converts re"
},
{
"path": "components/_util/transButton.tsx",
"chars": 2299,
"preview": "import type { CSSProperties } from 'vue';\nimport { defineComponent, shallowRef, onMounted } from 'vue';\n/**\n * Wrap of s"
},
{
"path": "components/_util/transKeys.ts",
"chars": 435,
"preview": "export const groupKeysMap = (keys: string[]) => {\n const map = new Map<string, number>();\n keys.forEach((key, index) ="
},
{
"path": "components/_util/transition.tsx",
"chars": 4566,
"preview": "import type {\n BaseTransitionProps,\n CSSProperties,\n Ref,\n TransitionGroupProps,\n TransitionProps,\n} from 'vue';\nim"
},
{
"path": "components/_util/type.ts",
"chars": 2964,
"preview": "// @ts-ignore\nimport type { App, PropType, Plugin, Ref, VNode, SlotsType } from 'vue';\n\n// https://stackoverflow.com/que"
},
{
"path": "components/_util/unreachableException.ts",
"chars": 169,
"preview": "export default class UnreachableException {\n error: Error;\n\n constructor(value: any) {\n this.error = new Error(`unr"
},
{
"path": "components/_util/util.ts",
"chars": 2831,
"preview": "import type { VueNode } from './type';\nexport const isFunction = val => typeof val === 'function';\nexport const controlD"
},
{
"path": "components/_util/vnode.ts",
"chars": 2417,
"preview": "import { filterEmpty } from './props-util';\nimport type { Slots, VNode, VNodeArrayChildren, VNodeProps } from 'vue';\nimp"
},
{
"path": "components/_util/vue-types/index.ts",
"chars": 982,
"preview": "import type { CSSProperties } from 'vue';\nimport type { VueTypeValidableDef, VueTypesInterface } from 'vue-types';\nimpor"
},
{
"path": "components/_util/warning.ts",
"chars": 615,
"preview": "import vcWarning, { resetWarned } from '../vc-util/warning';\n\nexport { resetWarned };\nexport function noop() {}\n\ntype Wa"
},
{
"path": "components/_util/wave/WaveEffect.tsx",
"chars": 4699,
"preview": "import type { CSSProperties } from 'vue';\nimport { onBeforeUnmount, onMounted, Transition, render, defineComponent, shal"
},
{
"path": "components/_util/wave/index.tsx",
"chars": 2639,
"preview": "import {\n computed,\n defineComponent,\n getCurrentInstance,\n nextTick,\n onBeforeUnmount,\n onMounted,\n watch,\n} fro"
},
{
"path": "components/_util/wave/style.ts",
"chars": 1097,
"preview": "import { genComponentStyleHook } from '../../theme/internal';\nimport type { FullToken, GenerateStyle } from '../../theme"
},
{
"path": "components/_util/wave/useWave.ts",
"chars": 659,
"preview": "import type { ComputedRef, Ref } from 'vue';\nimport { onBeforeUnmount, getCurrentInstance } from 'vue';\nimport { findDOM"
},
{
"path": "components/_util/wave/util.ts",
"chars": 1016,
"preview": "export function isNotGrey(color: string) {\n // eslint-disable-next-line no-useless-escape\n const match = (color || '')"
},
{
"path": "components/affix/__tests__/__snapshots__/demo.test.js.snap",
"chars": 1040,
"preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`renders ./components/affix/demo/basic.vue correctly 1`] = `\n<div>\n "
},
{
"path": "components/affix/__tests__/demo.test.js",
"chars": 75,
"preview": "import demoTest from '../../../tests/shared/demoTest';\n\ndemoTest('affix');\n"
},
{
"path": "components/affix/__tests__/index.test.js",
"chars": 2774,
"preview": "import Affix from '..';\nimport Button from '../../button';\nimport { mount } from '@vue/test-utils';\nimport { spyElementP"
},
{
"path": "components/affix/demo/basic.vue",
"chars": 510,
"preview": "<docs>\n---\norder: 0\ntitle:\n zh-CN: 基本\n en-US: Basic\n---\n\n## zh-CN\n\n最简单的用法。\n\n## en-US\n\nThe simplest usage.\n\n</docs>\n\n<t"
},
{
"path": "components/affix/demo/index.vue",
"chars": 456,
"preview": "<template>\n <demo-sort>\n <basic />\n <on-change />\n <traget />\n </demo-sort>\n</template>\n\n<script lang=\"ts\">\ni"
},
{
"path": "components/affix/demo/on-change.vue",
"chars": 370,
"preview": "<docs>\n---\norder: 1\ntitle:\n zh-CN: 固定状态改变的回调\n en-US: Callback\n---\n\n## zh-CN\n\n可以获得是否固定的状态。\n\n## en-US\n\nCallback with aff"
},
{
"path": "components/affix/demo/target.vue",
"chars": 936,
"preview": "<docs>\n---\norder: 2\ntitle:\n zh-CN: 滚动容器\n en-US: Container to scroll.\n---\n\n## zh-CN\n\n用 `target` 设置 `Affix` 需要监听其滚动事件的元素"
},
{
"path": "components/affix/index.en-US.md",
"chars": 2314,
"preview": "---\ncategory: Components\ntype: Other\ntitle: Affix\ncover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*YSm4RI3i"
},
{
"path": "components/affix/index.tsx",
"chars": 8359,
"preview": "import type { ComponentPublicInstance, CSSProperties, ExtractPropTypes, PropType } from 'vue';\nimport {\n defineComponen"
},
{
"path": "components/affix/index.zh-CN.md",
"chars": 1574,
"preview": "---\ncategory: Components\nsubtitle: 固钉\ntype: 其他\ntitle: Affix\ncover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/"
},
{
"path": "components/affix/style/index.ts",
"chars": 844,
"preview": "import type { CSSObject } from '../../_util/cssinjs';\nimport type { FullToken, GenerateStyle } from '../../theme/interna"
},
{
"path": "components/affix/utils.ts",
"chars": 3111,
"preview": "import addEventListener from '../vc-util/Dom/addEventListener';\nimport supportsPassive from '../_util/supportsPassive';\n"
},
{
"path": "components/alert/__tests__/__snapshots__/demo.test.js.snap",
"chars": 37060,
"preview": "// Jest Snapshot v1, https://goo.gl/fbAQLP\n\nexports[`renders ./components/alert/demo/action.vue correctly 1`] = `\n<div s"
},
{
"path": "components/alert/__tests__/demo.test.js",
"chars": 75,
"preview": "import demoTest from '../../../tests/shared/demoTest';\n\ndemoTest('alert');\n"
},
{
"path": "components/alert/__tests__/index.test.js",
"chars": 1899,
"preview": "import { mount } from '@vue/test-utils';\nimport Alert from '..';\n\ndescribe('Alert', () => {\n beforeAll(() => {\n jest"
}
]
// ... and 2792 more files (download for full content)
About this extraction
This page contains the full source code of the vueComponent/ant-design-vue GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 2992 files (33.7 MB), approximately 3.2M tokens, and a symbol index with 3827 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.