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!

为了能够进行高效沟通,我们对 issue 有一定的格式要求,你的 issue 因为不符合要求而被自动关闭。你可以通过 [issue 助手](https://vuecomponent.github.io/issue-helper/) 来创建 issue 以方便我们定位错误。谢谢配合!" issueConfigs: - content: - "" - 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)$': '/node_modules/@vue/vue3-jest', '\\.(js|jsx)$': '/node_modules/babel-jest', '\\.(ts|tsx)$': '/node_modules/ts-jest', '\\.svg$': '/node_modules/jest-transform-stub', }, testRegex: getTestRegex(libDir), moduleNameMapper: { '^@/(.*)$/': '/$1', '^ant-design-vue$': '/components/index', '^ant-design-vue/es/(.*)$': '/components/$1', }, snapshotSerializers: ['/node_modules/jest-serializer-vue'], collectCoverage: process.env.COVERAGE === 'true', collectCoverageFrom: [ 'components/**/*.{js,jsx,vue}', '!components/*/__tests__/**/type.{js,jsx}', '!components/vc-*/**/*', '!components/*/demo/**/*', '!components/_util/**/*', '!components/align/**/*', '!components/trigger/**/*', '!**/node_modules/**', ], testEnvironment: 'jsdom', testEnvironmentOptions: { url: 'http://localhost', customExportConditions: ['node', 'node-addons'], }, transformIgnorePatterns, globals: { 'ts-jest': { babelConfig: true, }, }, }; ================================================ 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 ================================================

Sponsors & Backers



企业赞助

Sponsors

Backers

Patreon

支付宝/微信

### 使用支付宝/微信的赞助的用户,如需要添加名单,赞助后可发 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 `` 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 中已经废弃(使用 `` 替代),我们在 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 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 ================================================

Ant Design Vue

基于 Ant Design 和 Vue 3 的企业级 UI 组件库。 ![test](https://github.com/vueComponent/ant-design-vue/workflows/test/badge.svg) [![codecov](https://img.shields.io/codecov/c/github/vueComponent/ant-design-vue/master.svg?style=flat-square)](https://codecov.io/gh/vueComponent/ant-design-vue) [![npm package](https://img.shields.io/npm/v/ant-design-vue.svg?style=flat-square)](https://www.npmjs.org/package/ant-design-vue) [![NPM downloads](http://img.shields.io/npm/dm/ant-design-vue.svg?style=flat-square)](http://www.npmtrends.com/ant-design-vue) [![backers](https://opencollective.com/ant-design-vue/backers/badge.svg)](#backers) [![sponsors](https://opencollective.com/ant-design-vue/sponsors/badge.svg)](#sponsors) [![extension-for-VSCode](https://img.shields.io/badge/extension%20for-VSCode-blue.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) [![issues-helper](https://img.shields.io/badge/Issues%20Manage%20By-issues--helper-orange?style=flat-square)](https://github.com/actions-cool/issues-helper)
[![](https://cdn-images-1.medium.com/max/2000/1*NIlj0-TdLMbo_hzSBP8tmg.png)](https://www.antdv.com/)
赞助商
Mentorbook.AI - 你的 AI 导师,你的学习之旅
[English](./README.md) | 简体中文 ## 特性 - 提炼自企业级中后台产品的交互语言和视觉风格。 - 开箱即用的高质量 Vue 组件。 - 共享 [Ant Design of React](http://ant-design.gitee.io/docs/spec/introduce-cn) 设计工具体系。 ## 关注我们 收藏加关注,第一时间获取更新动态! ![star us](https://user-images.githubusercontent.com/6937879/261937060-e0501ab3-9388-4712-a25d-3f2ba2271865.gif) ## 支持环境 - 现代浏览器。1.x 版本支持 IE 9+(需要 [polyfills](https://www.antdv.com/docs/vue/getting-started-cn/#兼容性)) - 支持服务端渲染。 - [Electron](https://electronjs.org/) - 支持 Vue 2 和 Vue 3 | [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | [Opera](http://godban.github.io/browsers-support-badges/)
Opera | [Electron](http://godban.github.io/browsers-support-badges/)
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),更好的问题更容易获得帮助。 [![Let's fund issues in this repository](https://issuehunt.io/static/embed/issuehunt-button-v1.svg)](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)] ## 支持者 每月捐款支持我们,帮助我们继续我们的活动。 [[成为支持者](https://opencollective.com/ant-design-vue#backer)] ## Patreon 每月捐款支持我们,帮助我们继续我们的活动。 [[成为支持者](https://www.patreon.com/tangjinzhou)] ## [更多赞助者 (通过 Patreon、支付宝、微信、paypal 等等)](https://github.com/vueComponent/ant-design-vue/blob/master/BACKERS.md) ## 贡献者 感谢所有为 ant-design-vue 做出贡献的人! ================================================ FILE: README.md ================================================

Ant Design Vue

An enterprise-class UI components based on Ant Design and Vue. ![test](https://github.com/vueComponent/ant-design-vue/workflows/test/badge.svg) [![codecov](https://img.shields.io/codecov/c/github/vueComponent/ant-design-vue/master.svg?style=flat-square)](https://codecov.io/gh/vueComponent/ant-design-vue) [![npm package](https://img.shields.io/npm/v/ant-design-vue.svg?style=flat-square)](https://www.npmjs.org/package/ant-design-vue) [![NPM downloads](http://img.shields.io/npm/dm/ant-design-vue.svg?style=flat-square)](http://www.npmtrends.com/ant-design-vue) [![backers](https://opencollective.com/ant-design-vue/backers/badge.svg)](#backers) [![sponsors](https://opencollective.com/ant-design-vue/sponsors/badge.svg)](#sponsors) [![extension-for-VSCode](https://img.shields.io/badge/extension%20for-VSCode-blue.svg?style=flat-square)](https://marketplace.visualstudio.com/items?itemName=ant-design-vue.vscode-ant-design-vue-helper) [![issues-helper](https://img.shields.io/badge/Issues%20Manage%20By-issues--helper-orange?style=flat-square)](https://github.com/actions-cool/issues-helper)
[![](https://cdn-images-1.medium.com/max/2000/1*NIlj0-TdLMbo_hzSBP8tmg.png)](https://www.antdv.com/)
Sponsored by
Mentorbook.AI - Your AI Mentor, Your Learning Journey
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! ![star us](https://user-images.githubusercontent.com/6937879/261937060-e0501ab3-9388-4712-a25d-3f2ba2271865.gif) ## 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/) | [IE / Edge](http://godban.github.io/browsers-support-badges/)
IE / Edge | [Firefox](http://godban.github.io/browsers-support-badges/)
Firefox | [Chrome](http://godban.github.io/browsers-support-badges/)
Chrome | [Safari](http://godban.github.io/browsers-support-badges/)
Safari | [Opera](http://godban.github.io/browsers-support-badges/)
Opera | [Electron](http://godban.github.io/browsers-support-badges/)
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)] ## [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! [![Let's fund issues in this repository](https://issuehunt.io/static/embed/issuehunt-button-v1.svg)](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 ', '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> { 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(); flatMap(data, item => item).forEach(mergedTag => mergeTag(tags, mergedTag)); return tags; } function readTypings(options: Options): Map { const tags = new Map(); 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, 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[]): VueTag[] { if (mergedTagsArr.length === 1) return [...mergedTagsArr[0].values()]; const tags = new Map(); if (mergedTagsArr.length === 0) return []; mergedTagsArr.forEach(mergedTags => { mergedTags.forEach(mergedTag => mergeTag(tags, mergedTag)); }); return [...tags.values()]; } export async function parseAndWrite(options: Options): Promise { 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, }, actionFn: Function as PropType<(...args: any[]) => any | PromiseLike>, close: Function, autofocus: Boolean, prefixCls: String, buttonProps: objectType(), emitEvent: Boolean, quitOnNullishReturnValue: Boolean, }; export type ActionButtonProps = ExtractPropTypes; function isThenable(thing?: PromiseLike): boolean { return !!(thing && thing.then); } export default defineComponent({ compatConfig: { MODE: 3 }, name: 'ActionButton', props: actionButtonProps, setup(props, { slots }) { const clickedRef = shallowRef(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) => { 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; 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 ( ); }; }, }); ================================================ 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(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 ( ); }; }, }); 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 ; }; }, }); 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 ? : 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(); const componentRef = shallowRef(); const rafId = shallowRef(); 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 = ( slots.default?.(childProps) }} > ); } 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(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>(defaultValue?: T) { const contextKey = Symbol('contextKey'); const useProvide = (props: T, newProps?: T) => { const mergedProps = reactive({} 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(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(...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(); 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 = {}; 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 `; } // ====================== Fill Style ====================== type OrderStyle = [order: number, style: string]; const orderStyles: OrderStyle[] = styleKeys .map(key => { const cachePath = key.slice(matchPrefix.length).replace(/%/g, '|'); const [styleStr, tokenKey, styleId, effectStyle, clientOnly, order]: [ string, string, string, Record, boolean, number, ] = cache.cache.get(key)![1]; // Skip client only style if (clientOnly) { return null! as OrderStyle; } // ====================== Style ====================== // Used for vc-util const sharedAttrs = { 'data-vc-order': 'prependQueue', 'data-vc-priority': `${order}`, }; let keyStyleText = toStyleStr(styleStr, tokenKey, styleId, sharedAttrs); // Save cache path with hash mapping cachePathMap[cachePath] = styleId; // =============== Create effect style =============== if (effectStyle) { Object.keys(effectStyle).forEach(effectKey => { // Effect style can be reused if (!effectStyles[effectKey]) { effectStyles[effectKey] = true; keyStyleText += toStyleStr( normalizeStyle(effectStyle[effectKey]), tokenKey, `_effect-${effectKey}`, sharedAttrs, ); } }); } const ret: OrderStyle = [order, keyStyleText]; return ret; }) .filter(o => o); orderStyles .sort((o1, o2) => o1[0] - o2[0]) .forEach(([, style]) => { styleText += style; }); // ==================== Fill Cache Path ==================== styleText += toStyleStr( `.${ATTR_CACHE_MAP}{content:"${serializeCacheMap(cachePathMap)}";}`, undefined, undefined, { [ATTR_CACHE_MAP]: ATTR_CACHE_MAP, }, ); return styleText; } ================================================ FILE: components/_util/cssinjs/index.ts ================================================ import useCacheToken from './hooks/useCacheToken'; import type { CSSInterpolation, CSSObject } from './hooks/useStyleRegister'; import useStyleRegister, { extractStyle } from './hooks/useStyleRegister'; import Keyframes from './Keyframes'; import type { Linter } from './linters'; import { legacyNotSelectorLinter, logicalPropertiesLinter, parentSelectorLinter } from './linters'; import type { StyleContextProps, StyleProviderProps } from './StyleContext'; import { createCache, useStyleInject, useStyleProvider, StyleProvider } from './StyleContext'; import type { DerivativeFunc, TokenType } from './theme'; import { createTheme, Theme } from './theme'; import type { Transformer } from './transformers/interface'; import legacyLogicalPropertiesTransformer from './transformers/legacyLogicalProperties'; import px2remTransformer from './transformers/px2rem'; import { supportLogicProps, supportWhere } from './util'; const cssinjs = { Theme, createTheme, useStyleRegister, useCacheToken, createCache, useStyleInject, useStyleProvider, Keyframes, extractStyle, // Transformer legacyLogicalPropertiesTransformer, px2remTransformer, // Linters logicalPropertiesLinter, legacyNotSelectorLinter, parentSelectorLinter, // cssinjs StyleProvider, }; export { Theme, createTheme, useStyleRegister, useCacheToken, createCache, useStyleInject, useStyleProvider, Keyframes, extractStyle, // Transformer legacyLogicalPropertiesTransformer, px2remTransformer, // Linters logicalPropertiesLinter, legacyNotSelectorLinter, parentSelectorLinter, // cssinjs StyleProvider, }; export type { TokenType, CSSObject, CSSInterpolation, DerivativeFunc, Transformer, Linter, StyleContextProps, StyleProviderProps, }; export const _experimental = { supportModernCSS: () => supportWhere() && supportLogicProps(), }; export default cssinjs; ================================================ FILE: components/_util/cssinjs/linters/contentQuotesLinter.ts ================================================ import type { Linter } from './interface'; import { lintWarning } from './utils'; const linter: Linter = (key, value, info) => { if (key === 'content') { // From emotion: https://github.com/emotion-js/emotion/blob/main/packages/serialize/src/index.js#L63 const contentValuePattern = /(attr|counters?|url|(((repeating-)?(linear|radial))|conic)-gradient)\(|(no-)?(open|close)-quote/; const contentValues = ['normal', 'none', 'initial', 'inherit', 'unset']; if ( typeof value !== 'string' || (contentValues.indexOf(value) === -1 && !contentValuePattern.test(value) && (value.charAt(0) !== value.charAt(value.length - 1) || (value.charAt(0) !== '"' && value.charAt(0) !== "'"))) ) { lintWarning( `You seem to be using a value for 'content' without quotes, try replacing it with \`content: '"${value}"'\`.`, info, ); } } }; export default linter; ================================================ FILE: components/_util/cssinjs/linters/hashedAnimationLinter.ts ================================================ import type { Linter } from './interface'; import { lintWarning } from './utils'; const linter: Linter = (key, value, info) => { if (key === 'animation') { if (info.hashId && value !== 'none') { lintWarning( `You seem to be using hashed animation '${value}', in which case 'animationName' with Keyframe as value is recommended.`, info, ); } } }; export default linter; ================================================ FILE: components/_util/cssinjs/linters/index.ts ================================================ export { default as contentQuotesLinter } from './contentQuotesLinter'; export { default as hashedAnimationLinter } from './hashedAnimationLinter'; export type { Linter } from './interface'; export { default as legacyNotSelectorLinter } from './legacyNotSelectorLinter'; export { default as logicalPropertiesLinter } from './logicalPropertiesLinter'; export { default as parentSelectorLinter } from './parentSelectorLinter'; ================================================ FILE: components/_util/cssinjs/linters/interface.ts ================================================ export interface LinterInfo { path?: string; hashId?: string; parentSelectors: string[]; } export interface Linter { (key: string, value: string | number, info: LinterInfo): void; } ================================================ FILE: components/_util/cssinjs/linters/legacyNotSelectorLinter.ts ================================================ import type { Linter, LinterInfo } from './interface'; import { lintWarning } from './utils'; function isConcatSelector(selector: string) { const notContent = selector.match(/:not\(([^)]*)\)/)?.[1] || ''; // split selector. e.g. // `h1#a.b` => ['h1', #a', '.b'] const splitCells = notContent.split(/(\[[^[]*])|(?=[.#])/).filter(str => str); return splitCells.length > 1; } function parsePath(info: LinterInfo) { return info.parentSelectors.reduce((prev, cur) => { if (!prev) { return cur; } return cur.includes('&') ? cur.replace(/&/g, prev) : `${prev} ${cur}`; }, ''); } const linter: Linter = (_key, _value, info) => { const parentSelectorPath = parsePath(info); const notList = parentSelectorPath.match(/:not\([^)]*\)/g) || []; if (notList.length > 0 && notList.some(isConcatSelector)) { lintWarning(`Concat ':not' selector not support in legacy browsers.`, info); } }; export default linter; ================================================ FILE: components/_util/cssinjs/linters/logicalPropertiesLinter.ts ================================================ import type { Linter } from './interface'; import { lintWarning } from './utils'; const linter: Linter = (key, value, info) => { switch (key) { case 'marginLeft': case 'marginRight': case 'paddingLeft': case 'paddingRight': case 'left': case 'right': case 'borderLeft': case 'borderLeftWidth': case 'borderLeftStyle': case 'borderLeftColor': case 'borderRight': case 'borderRightWidth': case 'borderRightStyle': case 'borderRightColor': case 'borderTopLeftRadius': case 'borderTopRightRadius': case 'borderBottomLeftRadius': case 'borderBottomRightRadius': lintWarning( `You seem to be using non-logical property '${key}' which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties.`, info, ); return; case 'margin': case 'padding': case 'borderWidth': case 'borderStyle': // case 'borderColor': if (typeof value === 'string') { const valueArr = value.split(' ').map(item => item.trim()); if (valueArr.length === 4 && valueArr[1] !== valueArr[3]) { lintWarning( `You seem to be using '${key}' property with different left ${key} and right ${key}, which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties.`, info, ); } } return; case 'clear': case 'textAlign': if (value === 'left' || value === 'right') { lintWarning( `You seem to be using non-logical value '${value}' of ${key}, which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties.`, info, ); } return; case 'borderRadius': if (typeof value === 'string') { const radiusGroups = value.split('/').map(item => item.trim()); const invalid = radiusGroups.reduce((result, group) => { if (result) { return result; } const radiusArr = group.split(' ').map(item => item.trim()); // borderRadius: '2px 4px' if (radiusArr.length >= 2 && radiusArr[0] !== radiusArr[1]) { return true; } // borderRadius: '4px 4px 2px' if (radiusArr.length === 3 && radiusArr[1] !== radiusArr[2]) { return true; } // borderRadius: '4px 4px 2px 4px' if (radiusArr.length === 4 && radiusArr[2] !== radiusArr[3]) { return true; } return result; }, false); if (invalid) { lintWarning( `You seem to be using non-logical value '${value}' of ${key}, which is not compatible with RTL mode. Please use logical properties and values instead. For more information: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Logical_Properties.`, info, ); } } return; default: } }; export default linter; ================================================ FILE: components/_util/cssinjs/linters/parentSelectorLinter.ts ================================================ import type { Linter } from '..'; import { lintWarning } from './utils'; const linter: Linter = (_key, _value, info) => { if ( info.parentSelectors.some(selector => { const selectors = selector.split(','); return selectors.some(item => item.split('&').length > 2); }) ) { lintWarning('Should not use more than one `&` in a selector.', info); } }; export default linter; ================================================ FILE: components/_util/cssinjs/linters/utils.ts ================================================ import devWarning from '../../../vc-util/warning'; import type { LinterInfo } from './interface'; export function lintWarning(message: string, info: LinterInfo) { const { path, parentSelectors } = info; devWarning( false, `[Ant Design Vue CSS-in-JS] ${path ? `Error in '${path}': ` : ''}${message}${ parentSelectors.length ? ` Selector info: ${parentSelectors.join(' -> ')}` : '' }`, ); } ================================================ FILE: components/_util/cssinjs/theme/Theme.ts ================================================ import warning from '../../warning'; import type { DerivativeFunc, TokenType } from './interface'; let uuid = 0; /** * Theme with algorithms to derive tokens from design tokens. * Use `createTheme` first which will help to manage the theme instance cache. */ export default class Theme { private derivatives: DerivativeFunc[]; public readonly id: number; constructor( derivatives: | DerivativeFunc | DerivativeFunc[], ) { this.derivatives = Array.isArray(derivatives) ? derivatives : [derivatives]; this.id = uuid; if (derivatives.length === 0) { warning( derivatives.length > 0, '[Ant Design Vue CSS-in-JS] Theme should have at least one derivative function.', ); } uuid += 1; } getDerivativeToken(token: DesignToken): DerivativeToken { return this.derivatives.reduce( (result, derivative) => derivative(token, result), undefined as any, ); } } ================================================ FILE: components/_util/cssinjs/theme/ThemeCache.ts ================================================ import type Theme from './Theme'; import type { DerivativeFunc } from './interface'; // ================================== Cache ================================== type ThemeCacheMap = Map< DerivativeFunc, { map?: ThemeCacheMap; value?: [Theme, number]; } >; type DerivativeOptions = DerivativeFunc[]; export function sameDerivativeOption(left: DerivativeOptions, right: DerivativeOptions) { if (left.length !== right.length) { return false; } for (let i = 0; i < left.length; i++) { if (left[i] !== right[i]) { return false; } } return true; } export default class ThemeCache { public static MAX_CACHE_SIZE = 20; public static MAX_CACHE_OFFSET = 5; private readonly cache: ThemeCacheMap; private keys: DerivativeOptions[]; private cacheCallTimes: number; constructor() { this.cache = new Map(); this.keys = []; this.cacheCallTimes = 0; } public size(): number { return this.keys.length; } private internalGet( derivativeOption: DerivativeOptions, updateCallTimes = false, ): [Theme, number] | undefined { let cache: ReturnType = { map: this.cache }; derivativeOption.forEach(derivative => { if (!cache) { cache = undefined; } else { cache = cache?.map?.get(derivative); } }); if (cache?.value && updateCallTimes) { cache.value[1] = this.cacheCallTimes++; } return cache?.value; } public get(derivativeOption: DerivativeOptions): Theme | undefined { return this.internalGet(derivativeOption, true)?.[0]; } public has(derivativeOption: DerivativeOptions): boolean { return !!this.internalGet(derivativeOption); } public set(derivativeOption: DerivativeOptions, value: Theme): void { // New cache if (!this.has(derivativeOption)) { if (this.size() + 1 > ThemeCache.MAX_CACHE_SIZE + ThemeCache.MAX_CACHE_OFFSET) { const [targetKey] = this.keys.reduce<[DerivativeOptions, number]>( (result, key) => { const [, callTimes] = result; if (this.internalGet(key)![1] < callTimes) { return [key, this.internalGet(key)![1]]; } return result; }, [this.keys[0], this.cacheCallTimes], ); this.delete(targetKey); } this.keys.push(derivativeOption); } let cache = this.cache; derivativeOption.forEach((derivative, index) => { if (index === derivativeOption.length - 1) { cache.set(derivative, { value: [value, this.cacheCallTimes++] }); } else { const cacheValue = cache.get(derivative); if (!cacheValue) { cache.set(derivative, { map: new Map() }); } else if (!cacheValue.map) { cacheValue.map = new Map(); } cache = cache.get(derivative)!.map!; } }); } private deleteByPath( currentCache: ThemeCacheMap, derivatives: DerivativeFunc[], ): Theme | undefined { const cache = currentCache.get(derivatives[0])!; if (derivatives.length === 1) { if (!cache.map) { currentCache.delete(derivatives[0]); } else { currentCache.set(derivatives[0], { map: cache.map }); } return cache.value?.[0]; } const result = this.deleteByPath(cache.map!, derivatives.slice(1)); if ((!cache.map || cache.map.size === 0) && !cache.value) { currentCache.delete(derivatives[0]); } return result; } public delete(derivativeOption: DerivativeOptions): Theme | undefined { // If cache exists if (this.has(derivativeOption)) { this.keys = this.keys.filter(item => !sameDerivativeOption(item, derivativeOption)); return this.deleteByPath(this.cache, derivativeOption); } return undefined; } } ================================================ FILE: components/_util/cssinjs/theme/createTheme.ts ================================================ import ThemeCache from './ThemeCache'; import Theme from './Theme'; import type { DerivativeFunc, TokenType } from './interface'; const cacheThemes = new ThemeCache(); /** * Same as new Theme, but will always return same one if `derivative` not changed. */ export default function createTheme< DesignToken extends TokenType, DerivativeToken extends TokenType, >( derivatives: | DerivativeFunc[] | DerivativeFunc, ) { const derivativeArr = Array.isArray(derivatives) ? derivatives : [derivatives]; // Create new theme if not exist if (!cacheThemes.has(derivativeArr)) { cacheThemes.set(derivativeArr, new Theme(derivativeArr)); } // Get theme from cache and return return cacheThemes.get(derivativeArr)!; } ================================================ FILE: components/_util/cssinjs/theme/index.ts ================================================ export { default as createTheme } from './createTheme'; export { default as Theme } from './Theme'; export { default as ThemeCache } from './ThemeCache'; export type { TokenType, DerivativeFunc } from './interface'; ================================================ FILE: components/_util/cssinjs/theme/interface.ts ================================================ export type TokenType = object; export type DerivativeFunc = ( designToken: DesignToken, derivativeToken?: DerivativeToken, ) => DerivativeToken; ================================================ FILE: components/_util/cssinjs/transformers/interface.ts ================================================ import type { CSSObject } from '..'; export interface Transformer { visit?: (cssObj: CSSObject) => CSSObject; } ================================================ FILE: components/_util/cssinjs/transformers/legacyLogicalProperties.ts ================================================ import type { CSSObject } from '..'; import type { Transformer } from './interface'; function splitValues(value: string | number) { if (typeof value === 'number') { return [value]; } const splitStyle = String(value).split(/\s+/); // Combine styles split in brackets, like `calc(1px + 2px)` let temp = ''; let brackets = 0; return splitStyle.reduce((list, item) => { if (item.includes('(')) { temp += item; brackets += item.split('(').length - 1; } else if (item.includes(')')) { temp += ` ${item}`; brackets -= item.split(')').length - 1; if (brackets === 0) { list.push(temp); temp = ''; } } else if (brackets > 0) { temp += ` ${item}`; } else { list.push(item); } return list; }, []); } type MatchValue = string[] & { notSplit?: boolean; }; function noSplit(list: MatchValue): MatchValue { list.notSplit = true; return list; } const keyMap: Record = { // Inset inset: ['top', 'right', 'bottom', 'left'], insetBlock: ['top', 'bottom'], insetBlockStart: ['top'], insetBlockEnd: ['bottom'], insetInline: ['left', 'right'], insetInlineStart: ['left'], insetInlineEnd: ['right'], // Margin marginBlock: ['marginTop', 'marginBottom'], marginBlockStart: ['marginTop'], marginBlockEnd: ['marginBottom'], marginInline: ['marginLeft', 'marginRight'], marginInlineStart: ['marginLeft'], marginInlineEnd: ['marginRight'], // Padding paddingBlock: ['paddingTop', 'paddingBottom'], paddingBlockStart: ['paddingTop'], paddingBlockEnd: ['paddingBottom'], paddingInline: ['paddingLeft', 'paddingRight'], paddingInlineStart: ['paddingLeft'], paddingInlineEnd: ['paddingRight'], // Border borderBlock: noSplit(['borderTop', 'borderBottom']), borderBlockStart: noSplit(['borderTop']), borderBlockEnd: noSplit(['borderBottom']), borderInline: noSplit(['borderLeft', 'borderRight']), borderInlineStart: noSplit(['borderLeft']), borderInlineEnd: noSplit(['borderRight']), // Border width borderBlockWidth: ['borderTopWidth', 'borderBottomWidth'], borderBlockStartWidth: ['borderTopWidth'], borderBlockEndWidth: ['borderBottomWidth'], borderInlineWidth: ['borderLeftWidth', 'borderRightWidth'], borderInlineStartWidth: ['borderLeftWidth'], borderInlineEndWidth: ['borderRightWidth'], // Border style borderBlockStyle: ['borderTopStyle', 'borderBottomStyle'], borderBlockStartStyle: ['borderTopStyle'], borderBlockEndStyle: ['borderBottomStyle'], borderInlineStyle: ['borderLeftStyle', 'borderRightStyle'], borderInlineStartStyle: ['borderLeftStyle'], borderInlineEndStyle: ['borderRightStyle'], // Border color borderBlockColor: ['borderTopColor', 'borderBottomColor'], borderBlockStartColor: ['borderTopColor'], borderBlockEndColor: ['borderBottomColor'], borderInlineColor: ['borderLeftColor', 'borderRightColor'], borderInlineStartColor: ['borderLeftColor'], borderInlineEndColor: ['borderRightColor'], // Border radius borderStartStartRadius: ['borderTopLeftRadius'], borderStartEndRadius: ['borderTopRightRadius'], borderEndStartRadius: ['borderBottomLeftRadius'], borderEndEndRadius: ['borderBottomRightRadius'], }; function skipCheck(value: string | number) { return { _skip_check_: true, value }; } /** * Convert css logical properties to legacy properties. * Such as: `margin-block-start` to `margin-top`. * Transform list: * - inset * - margin * - padding * - border */ const transform: Transformer = { visit: cssObj => { const clone: CSSObject = {}; Object.keys(cssObj).forEach(key => { const value = cssObj[key]; const matchValue = keyMap[key]; if (matchValue && (typeof value === 'number' || typeof value === 'string')) { const values = splitValues(value); if (matchValue.length && matchValue.notSplit) { // not split means always give same value like border matchValue.forEach(matchKey => { clone[matchKey] = skipCheck(value); }); } else if (matchValue.length === 1) { // Handle like `marginBlockStart` => `marginTop` clone[matchValue[0]] = skipCheck(value); } else if (matchValue.length === 2) { // Handle like `marginBlock` => `marginTop` & `marginBottom` matchValue.forEach((matchKey, index) => { clone[matchKey] = skipCheck(values[index] ?? values[0]); }); } else if (matchValue.length === 4) { // Handle like `inset` => `top` & `right` & `bottom` & `left` matchValue.forEach((matchKey, index) => { clone[matchKey] = skipCheck(values[index] ?? values[index - 2] ?? values[0]); }); } else { clone[key] = value; } } else { clone[key] = value; } }); return clone; }, }; export default transform; ================================================ FILE: components/_util/cssinjs/transformers/px2rem.ts ================================================ /** * respect https://github.com/cuth/postcss-pxtorem */ import unitless from '@emotion/unitless'; import type { CSSObject } from '..'; import type { Transformer } from './interface'; export interface Options { /** * The root font size. * @default 16 */ rootValue?: number; /** * The decimal numbers to allow the REM units to grow to. * @default 5 */ precision?: number; /** * Whether to allow px to be converted in media queries. * @default false */ mediaQuery?: boolean; } const pxRegex = /url\([^)]+\)|var\([^)]+\)|(\d*\.?\d+)px/g; function toFixed(number: number, precision: number) { const multiplier = Math.pow(10, precision + 1), wholeNumber = Math.floor(number * multiplier); return (Math.round(wholeNumber / 10) * 10) / multiplier; } const transform = (options: Options = {}): Transformer => { const { rootValue = 16, precision = 5, mediaQuery = false } = options; const pxReplace = (m: string, $1: any) => { if (!$1) return m; const pixels = parseFloat($1); // covenant: pixels <= 1, not transform to rem @zombieJ if (pixels <= 1) return m; const fixedVal = toFixed(pixels / rootValue, precision); return `${fixedVal}rem`; }; const visit = (cssObj: CSSObject): CSSObject => { const clone: CSSObject = { ...cssObj }; Object.entries(cssObj).forEach(([key, value]) => { if (typeof value === 'string' && value.includes('px')) { const newValue = value.replace(pxRegex, pxReplace); clone[key] = newValue; } // no unit if (!unitless[key] && typeof value === 'number' && value !== 0) { clone[key] = `${value}px`.replace(pxRegex, pxReplace); } // Media queries const mergedKey = key.trim(); if (mergedKey.startsWith('@') && mergedKey.includes('px') && mediaQuery) { const newKey = key.replace(pxRegex, pxReplace); clone[newKey] = clone[key]; delete clone[key]; } }); return clone; }; return { visit }; }; export default transform; ================================================ FILE: components/_util/cssinjs/util.ts ================================================ import hash from '@emotion/hash'; import { removeCSS, updateCSS } from '../../vc-util/Dom/dynamicCSS'; import canUseDom from '../canUseDom'; import { Theme } from './theme'; // Create a cache here to avoid always loop generate const flattenTokenCache = new WeakMap(); export function flattenToken(token: any) { let str = flattenTokenCache.get(token) || ''; if (!str) { Object.keys(token).forEach(key => { const value = token[key]; str += key; if (value instanceof Theme) { str += value.id; } else if (value && typeof value === 'object') { str += flattenToken(value); } else { str += value; } }); // Put in cache flattenTokenCache.set(token, str); } return str; } /** * Convert derivative token to key string */ export function token2key(token: any, salt: string): string { return hash(`${salt}_${flattenToken(token)}`); } const randomSelectorKey = `random-${Date.now()}-${Math.random()}`.replace(/\./g, ''); // Magic `content` for detect selector support const checkContent = '_bAmBoO_'; function supportSelector( styleStr: string, handleElement: (ele: HTMLElement) => void, supportCheck?: (ele: HTMLElement) => boolean, ): boolean { if (canUseDom()) { updateCSS(styleStr, randomSelectorKey); const ele = document.createElement('div'); ele.style.position = 'fixed'; ele.style.left = '0'; ele.style.top = '0'; handleElement?.(ele); document.body.appendChild(ele); if (process.env.NODE_ENV !== 'production') { ele.innerHTML = 'Test'; ele.style.zIndex = '9999999'; } const support = supportCheck ? supportCheck(ele) : getComputedStyle(ele).content?.includes(checkContent); ele.parentNode?.removeChild(ele); removeCSS(randomSelectorKey); return support; } return false; } let canLayer: boolean | undefined = undefined; export function supportLayer(): boolean { if (canLayer === undefined) { canLayer = supportSelector( `@layer ${randomSelectorKey} { .${randomSelectorKey} { content: "${checkContent}"!important; } }`, ele => { ele.className = randomSelectorKey; }, ); } return canLayer!; } let canWhere: boolean | undefined = undefined; export function supportWhere(): boolean { if (canWhere === undefined) { canWhere = supportSelector( `:where(.${randomSelectorKey}) { content: "${checkContent}"!important; }`, ele => { ele.className = randomSelectorKey; }, ); } return canWhere!; } let canLogic: boolean | undefined = undefined; export function supportLogicProps(): boolean { if (canLogic === undefined) { canLogic = supportSelector( `.${randomSelectorKey} { inset-block: 93px !important; }`, ele => { ele.className = randomSelectorKey; }, ele => getComputedStyle(ele).bottom === '93px', ); } return canLogic!; } ================================================ FILE: components/_util/debouncedWatch.ts ================================================ // copy from https://github.dev/vueuse/vueuse import type { Ref, WatchOptions, WatchStopHandle } from 'vue'; import { unref, watch } from 'vue'; type MaybeRef = T | Ref; type Fn = () => void; export type FunctionArgs = (...args: Args) => Return; export interface FunctionWrapperOptions { fn: FunctionArgs; args: Args; thisArg: This; } export type EventFilter = ( invoke: Fn, options: FunctionWrapperOptions, ) => void; const bypassFilter: EventFilter = invoke => { return invoke(); }; /** * Create an EventFilter that debounce the events * * @param ms */ export function debounceFilter(ms: MaybeRef) { let timer: ReturnType | undefined; const filter: EventFilter = invoke => { const duration = unref(ms); if (timer) clearTimeout(timer); if (duration <= 0) return invoke(); timer = setTimeout(invoke, duration); }; return filter; } export interface DebouncedWatchOptions extends WatchOptions { debounce?: MaybeRef; } interface ConfigurableEventFilter { eventFilter?: EventFilter; } /** * @internal */ function createFilterWrapper(filter: EventFilter, fn: T) { function wrapper(this: any, ...args: any[]) { filter(() => fn.apply(this, args), { fn, thisArg: this, args }); } return wrapper as any as T; } export interface WatchWithFilterOptions extends WatchOptions, ConfigurableEventFilter {} // implementation export function watchWithFilter = false>( source: any, cb: any, options: WatchWithFilterOptions = {}, ): WatchStopHandle { const { eventFilter = bypassFilter, ...watchOptions } = options; return watch(source, createFilterWrapper(eventFilter, cb), watchOptions); } // implementation export default function debouncedWatch = false>( source: any, cb: any, options: DebouncedWatchOptions = {}, ): WatchStopHandle { const { debounce = 0, ...watchOptions } = options; return watchWithFilter(source, cb, { ...watchOptions, eventFilter: debounceFilter(debounce), }); } ================================================ FILE: components/_util/eagerComputed.ts ================================================ import { watchEffect, shallowRef } from 'vue'; import type { ComputedRef } from 'vue'; export declare type ComputedGetter = (...args: any[]) => T; export default function eagerComputed(fn: ComputedGetter) { const result = shallowRef(); watchEffect( () => { result.value = fn(); }, { flush: 'sync', // needed so updates are immediate. }, ); return result as any as ComputedRef; } ================================================ FILE: components/_util/easings.ts ================================================ export function easeInOutCubic(t: number, b: number, c: number, d: number) { const cc = c - b; t /= d / 2; if (t < 1) { return (cc / 2) * t * t * t + b; } return (cc / 2) * ((t -= 2) * t * t + 2) + b; } ================================================ FILE: components/_util/env.ts ================================================ /* eslint-disable no-undef */ // Browser environment sniffing export const inBrowser = typeof window !== 'undefined'; export const UA = inBrowser && window.navigator.userAgent.toLowerCase(); export const isIE = UA && /msie|trident/.test(UA); export const isIE9 = UA && UA.indexOf('msie 9.0') > 0; export const isEdge = UA && UA.indexOf('edge/') > 0; export const isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge; export const isPhantomJS = UA && /phantomjs/.test(UA); export const isFF = UA && UA.match(/firefox\/(\d+)/); ================================================ FILE: components/_util/extendsObject.ts ================================================ type RecordType = Record; function extendsObject(...list: T[]) { const result: RecordType = { ...list[0] }; for (let i = 1; i < list.length; i++) { const obj = list[i]; if (obj) { Object.keys(obj).forEach(key => { const val = obj[key]; if (val !== undefined) { result[key] = val; } }); } } return result; } export default extendsObject; ================================================ FILE: components/_util/firstNotUndefined.ts ================================================ function firstNotUndefined(arr: T[] = []): T { for (let i = 0, len = arr.length; i < len; i++) { if (arr[i] !== undefined) { return arr[i]; } } return undefined; } export default firstNotUndefined; ================================================ FILE: components/_util/gapSize.ts ================================================ import type { SizeType } from '../config-provider/SizeContext'; export function isPresetSize(size?: SizeType | string | number): size is SizeType { return ['small', 'middle', 'large'].includes(size as string); } export function isValidGapNumber(size?: SizeType | string | number): size is number { if (!size) { // The case of size = 0 is deliberately excluded here, because the default value of the gap attribute in CSS is 0, so if the user passes 0 in, we can directly ignore it. return false; } return typeof size === 'number' && !Number.isNaN(size); } ================================================ FILE: components/_util/getRequestAnimationFrame.ts ================================================ const availablePrefixs = ['moz', 'ms', 'webkit']; function requestAnimationFramePolyfill() { let lastTime = 0; return function (callback) { const currTime = new Date().getTime(); const timeToCall = Math.max(0, 16 - (currTime - lastTime)); const id = window.setTimeout(function () { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; } export default function getRequestAnimationFrame() { if (typeof window === 'undefined') { return () => {}; } if (window.requestAnimationFrame) { // https://github.com/vuejs/vue/issues/4465 return window.requestAnimationFrame.bind(window); } const prefix = availablePrefixs.filter(key => `${key}RequestAnimationFrame` in window)[0]; return prefix ? window[`${prefix}RequestAnimationFrame`] : requestAnimationFramePolyfill(); } export function cancelRequestAnimationFrame(id) { if (typeof window === 'undefined') { return null; } if (window.cancelAnimationFrame) { return window.cancelAnimationFrame(id); } const prefix = availablePrefixs.filter( key => `${key}CancelAnimationFrame` in window || `${key}CancelRequestAnimationFrame` in window, )[0]; return prefix ? ( window[`${prefix}CancelAnimationFrame`] || window[`${prefix}CancelRequestAnimationFrame`] ).call(this, id) : clearTimeout(id); } ================================================ FILE: components/_util/getScroll.ts ================================================ export function isWindow(obj: any): obj is Window { return obj !== null && obj !== undefined && obj === obj.window; } export default function getScroll( target: HTMLElement | Window | Document | null, top: boolean, ): number { if (typeof window === 'undefined') { return 0; } const method = top ? 'scrollTop' : 'scrollLeft'; let result = 0; if (isWindow(target)) { result = target[top ? 'scrollY' : 'scrollX']; } else if (target instanceof Document) { result = target.documentElement[method]; } else if (target instanceof HTMLElement) { result = target[method]; } else if (target) { // According to the type inference, the `target` is `never` type. // Since we configured the loose mode type checking, and supports mocking the target with such shape below:: // `{ documentElement: { scrollLeft: 200, scrollTop: 400 } }`, // the program may falls into this branch. // Check the corresponding tests for details. Don't sure what is the real scenario this happens. result = target[method]; } if (target && !isWindow(target) && typeof result !== 'number') { result = ((target.ownerDocument ?? target) as any).documentElement?.[method]; } return result; } ================================================ FILE: components/_util/getScrollBarSize.ts ================================================ /* eslint-disable no-param-reassign */ let cached: number; export default function getScrollBarSize(fresh?: boolean) { if (typeof document === 'undefined') { return 0; } if (fresh || cached === undefined) { const inner = document.createElement('div'); inner.style.width = '100%'; inner.style.height = '200px'; const outer = document.createElement('div'); const outerStyle = outer.style; outerStyle.position = 'absolute'; outerStyle.top = '0'; outerStyle.left = '0'; outerStyle.pointerEvents = 'none'; outerStyle.visibility = 'hidden'; outerStyle.width = '200px'; outerStyle.height = '150px'; outerStyle.overflow = 'hidden'; outer.appendChild(inner); document.body.appendChild(outer); const widthContained = inner.offsetWidth; outer.style.overflow = 'scroll'; let widthScroll = inner.offsetWidth; if (widthContained === widthScroll) { widthScroll = outer.clientWidth; } document.body.removeChild(outer); cached = widthContained - widthScroll; } return cached; } function ensureSize(str: string) { const match = str.match(/^(.*)px$/); const value = Number(match?.[1]); return Number.isNaN(value) ? getScrollBarSize() : value; } export function getTargetScrollBarSize(target: HTMLElement) { if (typeof document === 'undefined' || !target || !(target instanceof Element)) { return { width: 0, height: 0 }; } const { width, height } = getComputedStyle(target, '::-webkit-scrollbar'); return { width: ensureSize(width), height: ensureSize(height), }; } ================================================ FILE: components/_util/hooks/_vueuse/_configurable.ts ================================================ import { isClient } from './is'; export interface ConfigurableWindow { /* * Specify a custom `window` instance, e.g. working with iframes or in testing environments. */ window?: Window; } export interface ConfigurableDocument { /* * Specify a custom `document` instance, e.g. working with iframes or in testing environments. */ document?: Document; } export interface ConfigurableNavigator { /* * Specify a custom `navigator` instance, e.g. working with iframes or in testing environments. */ navigator?: Navigator; } export interface ConfigurableLocation { /* * Specify a custom `location` instance, e.g. working with iframes or in testing environments. */ location?: Location; } export const defaultWindow = isClient ? window : undefined; export const defaultDocument = isClient ? window.document : undefined; export const defaultNavigator = isClient ? window.navigator : undefined; export const defaultLocation = isClient ? window.location : undefined; ================================================ FILE: components/_util/hooks/_vueuse/is.ts ================================================ export const isClient = typeof window !== 'undefined'; export const isDef = (val?: T): val is T => typeof val !== 'undefined'; export const assert = (condition: boolean, ...infos: any[]) => { if (!condition) console.warn(...infos); }; const toString = Object.prototype.toString; export const isBoolean = (val: any): val is boolean => typeof val === 'boolean'; export const isFunction = (val: any): val is T => typeof val === 'function'; export const isNumber = (val: any): val is number => typeof val === 'number'; export const isString = (val: unknown): val is string => typeof val === 'string'; export const isObject = (val: any): val is object => toString.call(val) === '[object Object]'; export const isWindow = (val: any): val is Window => typeof window !== 'undefined' && toString.call(val) === '[object Window]'; export const now = () => Date.now(); export const timestamp = () => +Date.now(); export const clamp = (n: number, min: number, max: number) => Math.min(max, Math.max(min, n)); export const noop = () => {}; export const rand = (min: number, max: number) => { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; }; export const isIOS = isClient && window?.navigator?.userAgent && /iP(ad|hone|od)/.test(window.navigator.userAgent); export const hasOwn = (val: T, key: K): key is K => Object.prototype.hasOwnProperty.call(val, key); ================================================ FILE: components/_util/hooks/_vueuse/resolveUnref.ts ================================================ import { unref } from 'vue'; import type { MaybeComputedRef } from './types'; /** * Get the value of value/ref/getter. */ export function resolveUnref(r: MaybeComputedRef): T { return typeof r === 'function' ? (r as any)() : unref(r); } ================================================ FILE: components/_util/hooks/_vueuse/tryOnMounted.ts ================================================ // eslint-disable-next-line no-restricted-imports import { getCurrentInstance, nextTick, onMounted } from 'vue'; import type { Fn } from './types'; /** * Call onMounted() if it's inside a component lifecycle, if not, just call the function * * @param fn * @param sync if set to false, it will run in the nextTick() of Vue */ export function tryOnMounted(fn: Fn, sync = true) { if (getCurrentInstance()) onMounted(fn); else if (sync) fn(); else nextTick(fn); } ================================================ FILE: components/_util/hooks/_vueuse/tryOnScopeDispose.ts ================================================ import { getCurrentScope, onScopeDispose } from 'vue'; import type { Fn } from './types'; /** * Call onScopeDispose() if it's inside a effect scope lifecycle, if not, do nothing * * @param fn */ export function tryOnScopeDispose(fn: Fn) { if (getCurrentScope()) { onScopeDispose(fn); return true; } return false; } ================================================ FILE: components/_util/hooks/_vueuse/types.ts ================================================ import type { ComputedRef, Ref, WatchOptions, WatchSource } from 'vue'; /** * Any function */ export type Fn = () => void; /** * A ref that allow to set null or undefined */ export type RemovableRef = Omit, 'value'> & { get value(): T; set value(value: T | null | undefined); }; /** * @deprecated Use `RemovableRef` */ export type RemoveableRef = RemovableRef; /** * Maybe it's a ref, or a plain value * * ```ts * type MaybeRef = T | Ref * ``` */ export type MaybeRef = T | Ref; /** * Maybe it's a ref, or a plain value, or a getter function * * ```ts * type MaybeComputedRef = (() => T) | T | Ref | ComputedRef * ``` */ export type MaybeComputedRef = MaybeReadonlyRef | MaybeRef; /** * Maybe it's a computed ref, or a getter function * * ```ts * type MaybeReadonlyRef = (() => T) | ComputedRef * ``` */ export type MaybeReadonlyRef = (() => T) | ComputedRef; /** * Make all the nested attributes of an object or array to MaybeRef * * Good for accepting options that will be wrapped with `reactive` or `ref` * * ```ts * UnwrapRef> === T * ``` */ export type DeepMaybeRef = T extends Ref ? MaybeRef : T extends Array | object ? { [K in keyof T]: DeepMaybeRef } : MaybeRef; /** * Infers the element type of an array */ export type ElementOf = T extends (infer E)[] ? E : never; export type ShallowUnwrapRef = T extends Ref ? P : T; export type Awaitable = Promise | T; export type ArgumentsType = T extends (...args: infer U) => any ? U : never; export interface Pausable { /** * A ref indicate whether a pausable instance is active */ isActive: Ref; /** * Temporary pause the effect from executing */ pause: Fn; /** * Resume the effects */ resume: Fn; } export interface Stoppable { /** * A ref indicate whether a stoppable instance is executing */ isPending: Ref; /** * Stop the effect from executing */ stop: Fn; /** * Start the effects */ start: Fn; } /** * @deprecated Use `Stoppable` */ export type Stopable = Stoppable; export interface ConfigurableFlush { /** * Timing for monitoring changes, refer to WatchOptions for more details * * @default 'pre' */ flush?: WatchOptions['flush']; } export interface ConfigurableFlushSync { /** * Timing for monitoring changes, refer to WatchOptions for more details. * Unlike `watch()`, the default is set to `sync` * * @default 'sync' */ flush?: WatchOptions['flush']; } // Internal Types export type MapSources = { [K in keyof T]: T[K] extends WatchSource ? V : never; }; export type MapOldSources = { [K in keyof T]: T[K] extends WatchSource ? Immediate extends true ? V | undefined : V : never; }; ================================================ FILE: components/_util/hooks/_vueuse/unrefElement.ts ================================================ import type { ComponentPublicInstance } from 'vue'; import type { MaybeComputedRef, MaybeRef } from './types'; import { resolveUnref } from './resolveUnref'; export type VueInstance = ComponentPublicInstance; export type MaybeElementRef = MaybeRef; export type MaybeComputedElementRef = MaybeComputedRef; export type MaybeElement = HTMLElement | SVGElement | VueInstance | undefined | null; export type UnRefElementReturn = T extends VueInstance ? Exclude : T | undefined; /** * Get the dom element of a ref of element or Vue component instance * * @param elRef */ export function unrefElement( elRef: MaybeComputedElementRef, ): UnRefElementReturn { const plain = resolveUnref(elRef); return (plain as VueInstance)?.$el ?? plain; } ================================================ FILE: components/_util/hooks/_vueuse/useElementSize.ts ================================================ import { shallowRef, watch } from 'vue'; import type { MaybeComputedElementRef } from './unrefElement'; import type { UseResizeObserverOptions } from './useResizeObserver'; import { useResizeObserver } from './useResizeObserver'; import { unrefElement } from './unrefElement'; export interface ElementSize { width: number; height: number; } /** * Reactive size of an HTML element. * * @see https://vueuse.org/useElementSize * @param target * @param callback * @param options */ export function useElementSize( target: MaybeComputedElementRef, initialSize: ElementSize = { width: 0, height: 0 }, options: UseResizeObserverOptions = {}, ) { const { box = 'content-box' } = options; const width = shallowRef(initialSize.width); const height = shallowRef(initialSize.height); useResizeObserver( target, ([entry]) => { const boxSize = box === 'border-box' ? entry.borderBoxSize : box === 'content-box' ? entry.contentBoxSize : entry.devicePixelContentBoxSize; if (boxSize) { width.value = boxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0); height.value = boxSize.reduce((acc, { blockSize }) => acc + blockSize, 0); } else { // fallback width.value = entry.contentRect.width; height.value = entry.contentRect.height; } }, options, ); watch( () => unrefElement(target), ele => { width.value = ele ? initialSize.width : 0; height.value = ele ? initialSize.height : 0; }, ); return { width, height, }; } export type UseElementSizeReturn = ReturnType; ================================================ FILE: components/_util/hooks/_vueuse/useMutationObserver.ts ================================================ import { tryOnScopeDispose } from './tryOnScopeDispose'; import { watch } from 'vue'; import type { MaybeElementRef } from './unrefElement'; import { unrefElement } from './unrefElement'; import { useSupported } from './useSupported'; import type { ConfigurableWindow } from './_configurable'; import { defaultWindow } from './_configurable'; export interface UseMutationObserverOptions extends MutationObserverInit, ConfigurableWindow {} /** * Watch for changes being made to the DOM tree. * * @see https://vueuse.org/useMutationObserver * @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN * @param target * @param callback * @param options */ export function useMutationObserver( target: MaybeElementRef, callback: MutationCallback, options: UseMutationObserverOptions = {}, ) { const { window = defaultWindow, ...mutationOptions } = options; let observer: MutationObserver | undefined; const isSupported = useSupported(() => window && 'MutationObserver' in window); const cleanup = () => { if (observer) { observer.disconnect(); observer = undefined; } }; const stopWatch = watch( () => unrefElement(target), el => { cleanup(); if (isSupported.value && window && el) { observer = new MutationObserver(callback); observer!.observe(el, mutationOptions); } }, { immediate: true }, ); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop, }; } export type UseMutationObserverReturn = ReturnType; ================================================ FILE: components/_util/hooks/_vueuse/useResizeObserver.ts ================================================ import { tryOnScopeDispose } from './tryOnScopeDispose'; import { watch } from 'vue'; import type { MaybeComputedElementRef } from './unrefElement'; import { unrefElement } from './unrefElement'; import { useSupported } from './useSupported'; import type { ConfigurableWindow } from './_configurable'; import { defaultWindow } from './_configurable'; export interface ResizeObserverSize { readonly inlineSize: number; readonly blockSize: number; } export interface ResizeObserverEntry { readonly target: Element; readonly contentRect: DOMRectReadOnly; readonly borderBoxSize?: ReadonlyArray; readonly contentBoxSize?: ReadonlyArray; readonly devicePixelContentBoxSize?: ReadonlyArray; } export type ResizeObserverCallback = ( entries: ReadonlyArray, observer: ResizeObserver, ) => void; export interface UseResizeObserverOptions extends ConfigurableWindow { /** * Sets which box model the observer will observe changes to. Possible values * are `content-box` (the default), `border-box` and `device-pixel-content-box`. * * @default 'content-box' */ box?: ResizeObserverBoxOptions; } declare class ResizeObserver { constructor(callback: ResizeObserverCallback); disconnect(): void; observe(target: Element, options?: UseResizeObserverOptions): void; unobserve(target: Element): void; } /** * Reports changes to the dimensions of an Element's content or the border-box * * @see https://vueuse.org/useResizeObserver * @param target * @param callback * @param options */ export function useResizeObserver( target: MaybeComputedElementRef, callback: ResizeObserverCallback, options: UseResizeObserverOptions = {}, ) { const { window = defaultWindow, ...observerOptions } = options; let observer: ResizeObserver | undefined; const isSupported = useSupported(() => window && 'ResizeObserver' in window); const cleanup = () => { if (observer) { observer.disconnect(); observer = undefined; } }; const stopWatch = watch( () => unrefElement(target), el => { cleanup(); if (isSupported.value && window && el) { observer = new ResizeObserver(callback); observer!.observe(el, observerOptions); } }, { immediate: true, flush: 'post' }, ); const stop = () => { cleanup(); stopWatch(); }; tryOnScopeDispose(stop); return { isSupported, stop, }; } export type UseResizeObserverReturn = ReturnType; ================================================ FILE: components/_util/hooks/_vueuse/useSupported.ts ================================================ import { tryOnMounted } from './tryOnMounted'; import { shallowRef } from 'vue'; export function useSupported(callback: () => unknown, sync = false) { const isSupported = shallowRef(); const update = () => (isSupported.value = Boolean(callback())); update(); tryOnMounted(update, sync); return isSupported; } ================================================ FILE: components/_util/hooks/useBreakpoint.ts ================================================ import type { Ref } from 'vue'; import { onMounted, onUnmounted, shallowRef } from 'vue'; import type { ScreenMap } from '../../_util/responsiveObserve'; import useResponsiveObserve from '../../_util/responsiveObserve'; function useBreakpoint(): Ref { const screens = shallowRef({}); let token = null; const responsiveObserve = useResponsiveObserve(); onMounted(() => { token = responsiveObserve.value.subscribe(supportScreens => { screens.value = supportScreens; }); }); onUnmounted(() => { responsiveObserve.value.unsubscribe(token); }); return screens; } export default useBreakpoint; ================================================ FILE: components/_util/hooks/useDestroyed.ts ================================================ import { onBeforeUnmount, shallowRef } from 'vue'; const useDestroyed = () => { const destroyed = shallowRef(false); onBeforeUnmount(() => { destroyed.value = true; }); return destroyed; }; export default useDestroyed; ================================================ FILE: components/_util/hooks/useFlexGapSupport.ts ================================================ import { onMounted, shallowRef } from 'vue'; import { detectFlexGapSupported } from '../styleChecker'; export default () => { const flexible = shallowRef(false); onMounted(() => { flexible.value = detectFlexGapSupported(); }); return flexible; }; ================================================ FILE: components/_util/hooks/useId.ts ================================================ import { ref } from 'vue'; import canUseDom from '../../_util/canUseDom'; let uuid = 0; /** Is client side and not jsdom */ export const isBrowserClient = process.env.NODE_ENV !== 'test' && canUseDom(); /** Get unique id for accessibility usage */ export function getUUID(): number | string { let retId: string | number; // Test never reach /* istanbul ignore if */ if (isBrowserClient) { retId = uuid; uuid += 1; } else { retId = 'TEST_OR_SSR'; } return retId; } export default function useId(id = ref('')) { // Inner id for accessibility usage. Only work in client side const innerId = `vc_unique_${getUUID()}`; return id.value || innerId; } ================================================ FILE: components/_util/hooks/useLayoutState.ts ================================================ import type { Ref } from 'vue'; import { onBeforeUnmount, shallowRef } from 'vue'; import raf from '../raf'; export type Updater = (prev: State) => State; /** * Execute code before next frame but async */ export function useLayoutState( defaultState: State, ): [Ref, (updater: Updater) => void] { const stateRef = shallowRef(defaultState); let tempState = stateRef.value; let updateBatchRef = []; const rafRef = shallowRef(); function setFrameState(updater: Updater) { raf.cancel(rafRef.value); updateBatchRef.push(updater); rafRef.value = raf(() => { const prevBatch = updateBatchRef; // const prevState = stateRef.value; updateBatchRef = []; prevBatch.forEach(batchUpdater => { tempState = batchUpdater(tempState); }); // if (tempState !== stateRef.value) { stateRef.value = tempState; // } }); } onBeforeUnmount(() => { raf.cancel(rafRef.value); }); return [stateRef as Ref, setFrameState]; } ================================================ FILE: components/_util/hooks/useMemo.ts ================================================ import type { Ref, WatchSource } from 'vue'; import { ref, watch } from 'vue'; export default function useMemo( getValue: () => T, condition: (WatchSource | object)[], shouldUpdate?: (prev: any[], next: any[]) => boolean, ) { const cacheRef: Ref = ref(getValue() as any); watch(condition, (next, pre) => { if (shouldUpdate) { if (shouldUpdate(next, pre)) { cacheRef.value = getValue(); } } else { cacheRef.value = getValue(); } }); return cacheRef; } ================================================ FILE: components/_util/hooks/useMergedState.ts ================================================ import type { Ref, UnwrapRef } from 'vue'; import { toRaw, watchEffect, unref, watch, ref } from 'vue'; export default function useMergedState>( defaultStateValue: T | (() => T), option?: { defaultValue?: T | (() => T); value?: Ref | Ref>; onChange?: (val: T, prevValue: T) => void; postState?: (val: T) => T; }, ): [R, (val: T) => void] { const { defaultValue, value = ref() } = option || {}; let initValue: T = typeof defaultStateValue === 'function' ? (defaultStateValue as any)() : defaultStateValue; if (value.value !== undefined) { initValue = unref(value as any) as T; } if (defaultValue !== undefined) { initValue = typeof defaultValue === 'function' ? (defaultValue as any)() : defaultValue; } const innerValue = ref(initValue) as Ref; const mergedValue = ref(initValue) as Ref; watchEffect(() => { let val = value.value !== undefined ? value.value : innerValue.value; if (option.postState) { val = option.postState(val as T); } mergedValue.value = val as T; }); function triggerChange(newValue: T) { const preVal = mergedValue.value; innerValue.value = newValue; if (toRaw(mergedValue.value) !== newValue && option.onChange) { option.onChange(newValue, preVal); } } // Effect of reset value to `undefined` watch(value, () => { innerValue.value = value.value as T; }); return [mergedValue as unknown as R, triggerChange]; } ================================================ FILE: components/_util/hooks/useRefs.ts ================================================ import type { Ref, ComponentPublicInstance } from 'vue'; import { onBeforeUpdate, ref } from 'vue'; import type { Key } from '../type'; type RefType = HTMLElement | ComponentPublicInstance; export type RefsValue = Map; type UseRef = [(key: Key) => (el: RefType) => void, Ref]; const useRefs = (): UseRef => { const refs = ref(new Map()); const setRef = (key: Key) => (el: RefType) => { refs.value.set(key, el); }; onBeforeUpdate(() => { refs.value = new Map(); }); return [setRef, refs]; }; export default useRefs; ================================================ FILE: components/_util/hooks/useScrollLocker.ts ================================================ import type { Ref } from 'vue'; import { computed, watchEffect } from 'vue'; import { updateCSS, removeCSS } from '../../vc-util/Dom/dynamicCSS'; import getScrollBarSize from '../../_util/getScrollBarSize'; import canUseDom from '../../_util/canUseDom'; const UNIQUE_ID = `vc-util-locker-${Date.now()}`; let uuid = 0; /**../vc-util/Dom/dynam * Test usage export. Do not use in your production */ export function isBodyOverflowing() { return ( document.body.scrollHeight > (window.innerHeight || document.documentElement.clientHeight) && window.innerWidth > document.body.offsetWidth ); } export default function useScrollLocker(lock?: Ref) { const mergedLock = computed(() => !!lock && !!lock.value); uuid += 1; const id = `${UNIQUE_ID}_${uuid}`; watchEffect( onClear => { if (!canUseDom()) { return; } if (mergedLock.value) { const scrollbarSize = getScrollBarSize(); const isOverflow = isBodyOverflowing(); updateCSS( ` html body { overflow-y: hidden; ${isOverflow ? `width: calc(100% - ${scrollbarSize}px);` : ''} }`, id, ); } else { removeCSS(id); } onClear(() => { removeCSS(id); }); }, { flush: 'post' }, ); } ================================================ FILE: components/_util/hooks/useState.ts ================================================ import type { Ref } from 'vue'; import { ref } from 'vue'; export default function useState>( defaultStateValue?: T | (() => T), ): [R, (val: T) => void] { const initValue: T = typeof defaultStateValue === 'function' ? (defaultStateValue as any)() : defaultStateValue; const innerValue = ref(initValue) as Ref; function triggerChange(newValue: T) { innerValue.value = newValue; } return [innerValue as unknown as R, triggerChange]; } ================================================ FILE: components/_util/isNumeric.ts ================================================ const isNumeric = (value: any): boolean => { return !isNaN(parseFloat(value)) && isFinite(value); }; export default isNumeric; ================================================ FILE: components/_util/isValid.ts ================================================ const isValid = (value: any): boolean => { return value !== undefined && value !== null && value !== ''; }; export default isValid; ================================================ FILE: components/_util/isValidValue.ts ================================================ export default function (val: any) { return val !== undefined && val !== null; } ================================================ FILE: components/_util/json2mq.ts ================================================ /** * source by `json2mq` * https://github.com/akiran/json2mq.git */ const camel2hyphen = function (str: string) { return str .replace(/[A-Z]/g, function (match) { return '-' + match.toLowerCase(); }) .toLowerCase(); }; const isDimension = function (feature: string) { const re = /[height|width]$/; return re.test(feature); }; const obj2mq = function (obj: { [x: string]: any }) { let mq = ''; const features = Object.keys(obj); features.forEach(function (feature, index) { let value = obj[feature]; feature = camel2hyphen(feature); // Add px to dimension features if (isDimension(feature) && typeof value === 'number') { value = value + 'px'; } if (value === true) { mq += feature; } else if (value === false) { mq += 'not ' + feature; } else { mq += '(' + feature + ': ' + value + ')'; } if (index < features.length - 1) { mq += ' and '; } }); return mq; }; export default function (query: any[]) { let mq = ''; if (typeof query === 'string') { return query; } // Handling array of media queries if (query instanceof Array) { query.forEach(function (q, index) { mq += obj2mq(q); if (index < query.length - 1) { mq += ', '; } }); return mq; } // Handling single media query return obj2mq(query); } ================================================ FILE: components/_util/omit.ts ================================================ function omit(obj: T, fields: K[]): Omit { // eslint-disable-next-line prefer-object-spread const shallowCopy = Object.assign({}, obj); for (let i = 0; i < fields.length; i += 1) { const key = fields[i]; delete shallowCopy[key]; } return shallowCopy; } export default omit; ================================================ FILE: components/_util/pickAttrs.ts ================================================ const attributes = `accept acceptcharset accesskey action allowfullscreen allowtransparency alt async autocomplete autofocus autoplay capture cellpadding cellspacing challenge charset checked classid classname colspan cols content contenteditable contextmenu controls coords crossorigin data datetime default defer dir disabled download draggable enctype form formaction formenctype formmethod formnovalidate formtarget frameborder headers height hidden high href hreflang htmlfor for httpequiv icon id inputmode integrity is keyparams keytype kind label lang list loop low manifest marginheight marginwidth max maxlength media mediagroup method min minlength multiple muted name novalidate nonce open optimum pattern placeholder poster preload radiogroup readonly rel required reversed role rowspan rows sandbox scope scoped scrolling seamless selected shape size sizes span spellcheck src srcdoc srclang srcset start step style summary tabindex target title type usemap value width wmode wrap`; const eventsName = `onCopy onCut onPaste onCompositionend onCompositionstart onCompositionupdate onKeydown onKeypress onKeyup onFocus onBlur onChange onInput onSubmit onClick onContextmenu onDoubleclick onDblclick onDrag onDragend onDragenter onDragexit onDragleave onDragover onDragstart onDrop onMousedown onMouseenter onMouseleave onMousemove onMouseout onMouseover onMouseup onSelect onTouchcancel onTouchend onTouchmove onTouchstart onTouchstartPassive onTouchmovePassive onScroll onWheel onAbort onCanplay onCanplaythrough onDurationchange onEmptied onEncrypted onEnded onError onLoadeddata onLoadedmetadata onLoadstart onPause onPlay onPlaying onProgress onRatechange onSeeked onSeeking onStalled onSuspend onTimeupdate onVolumechange onWaiting onLoad onError`; const propList = `${attributes} ${eventsName}`.split(/[\s\n]+/); /* eslint-enable max-len */ const ariaPrefix = 'aria-'; const dataPrefix = 'data-'; function match(key: string, prefix: string) { return key.indexOf(prefix) === 0; } export interface PickConfig { aria?: boolean; data?: boolean; attr?: boolean; } /** * Picker props from exist props with filter * @param props Passed props * @param ariaOnly boolean | { aria?: boolean; data?: boolean; attr?: boolean; } filter config */ export default function pickAttrs(props: object, ariaOnly: boolean | PickConfig = false) { let mergedConfig; if (ariaOnly === false) { mergedConfig = { aria: true, data: true, attr: true, }; } else if (ariaOnly === true) { mergedConfig = { aria: true, }; } else { mergedConfig = { ...ariaOnly, }; } const attrs = {}; Object.keys(props).forEach(key => { if ( // Aria (mergedConfig.aria && (key === 'role' || match(key, ariaPrefix))) || // Data (mergedConfig.data && match(key, dataPrefix)) || // Attr (mergedConfig.attr && (propList.includes(key) || propList.includes(key.toLowerCase()))) ) { attrs[key] = props[key]; } }); return attrs; } ================================================ FILE: components/_util/placements.ts ================================================ import { placements } from '../vc-tooltip/src/placements'; const autoAdjustOverflowEnabled = { adjustX: 1, adjustY: 1, }; const autoAdjustOverflowDisabled = { adjustX: 0, adjustY: 0, }; const targetOffset = [0, 0]; export interface AdjustOverflow { adjustX?: 0 | 1; adjustY?: 0 | 1; } export interface PlacementsConfig { arrowWidth?: number; horizontalArrowShift?: number; verticalArrowShift?: number; arrowPointAtCenter?: boolean; autoAdjustOverflow?: boolean | AdjustOverflow; } export function getOverflowOptions(autoAdjustOverflow?: boolean | AdjustOverflow) { if (typeof autoAdjustOverflow === 'boolean') { return autoAdjustOverflow ? autoAdjustOverflowEnabled : autoAdjustOverflowDisabled; } return { ...autoAdjustOverflowDisabled, ...autoAdjustOverflow, }; } export default function getPlacements(config: PlacementsConfig) { const { arrowWidth = 4, horizontalArrowShift = 16, verticalArrowShift = 8, autoAdjustOverflow, arrowPointAtCenter, } = config; const placementMap = { left: { points: ['cr', 'cl'], offset: [-4, 0], }, right: { points: ['cl', 'cr'], offset: [4, 0], }, top: { points: ['bc', 'tc'], offset: [0, -4], }, bottom: { points: ['tc', 'bc'], offset: [0, 4], }, topLeft: { points: ['bl', 'tc'], offset: [-(horizontalArrowShift + arrowWidth), -4], }, leftTop: { points: ['tr', 'cl'], offset: [-4, -(verticalArrowShift + arrowWidth)], }, topRight: { points: ['br', 'tc'], offset: [horizontalArrowShift + arrowWidth, -4], }, rightTop: { points: ['tl', 'cr'], offset: [4, -(verticalArrowShift + arrowWidth)], }, bottomRight: { points: ['tr', 'bc'], offset: [horizontalArrowShift + arrowWidth, 4], }, rightBottom: { points: ['bl', 'cr'], offset: [4, verticalArrowShift + arrowWidth], }, bottomLeft: { points: ['tl', 'bc'], offset: [-(horizontalArrowShift + arrowWidth), 4], }, leftBottom: { points: ['br', 'cl'], offset: [-4, verticalArrowShift + arrowWidth], }, }; Object.keys(placementMap).forEach(key => { placementMap[key] = arrowPointAtCenter ? { ...placementMap[key], overflow: getOverflowOptions(autoAdjustOverflow), targetOffset, } : { ...placements[key], overflow: getOverflowOptions(autoAdjustOverflow), }; placementMap[key].ignoreShake = true; }); return placementMap; } ================================================ FILE: components/_util/props-util/index.ts ================================================ import classNames from '../classNames'; import { isVNode, Fragment, Comment, Text } from 'vue'; import { camelize, hyphenate, isOn, resolvePropValue } from '../util'; import isValid from '../isValid'; import initDefaultProps from './initDefaultProps'; import type { VueInstance } from '../hooks/_vueuse/unrefElement'; // function getType(fn) { // const match = fn && fn.toString().match(/^\s*function (\w+)/); // return match ? match[1] : ''; // } const splitAttrs = (attrs: any) => { const allAttrs = Object.keys(attrs); const eventAttrs: Record = {}; const onEvents: Record = {}; const extraAttrs: Record = {}; for (let i = 0, l = allAttrs.length; i < l; i++) { const key = allAttrs[i]; if (isOn(key)) { eventAttrs[key[2].toLowerCase() + key.slice(3)] = attrs[key]; onEvents[key] = attrs[key]; } else { extraAttrs[key] = attrs[key]; } } return { onEvents, events: eventAttrs, extraAttrs }; }; const parseStyleText = (cssText = '', camel = false) => { const res = {}; const listDelimiter = /;(?![^(]*\))/g; const propertyDelimiter = /:(.+)/; if (typeof cssText === 'object') return cssText; cssText.split(listDelimiter).forEach(function (item) { if (item) { const tmp = item.split(propertyDelimiter); if (tmp.length > 1) { const k = camel ? camelize(tmp[0].trim()) : tmp[0].trim(); res[k] = tmp[1].trim(); } } }); return res; }; const hasProp = (instance: any, prop: string) => { return instance[prop] !== undefined; }; export const skipFlattenKey = Symbol('skipFlatten'); const flattenChildren = (children = [], filterEmpty = true) => { const temp = Array.isArray(children) ? children : [children]; const res = []; temp.forEach(child => { if (Array.isArray(child)) { res.push(...flattenChildren(child, filterEmpty)); } else if (child && child.type === Fragment) { if (child.key === skipFlattenKey) { res.push(child); } else { res.push(...flattenChildren(child.children, filterEmpty)); } } else if (child && isVNode(child)) { if (filterEmpty && !isEmptyElement(child)) { res.push(child); } else if (!filterEmpty) { res.push(child); } } else if (isValid(child)) { res.push(child); } }); return res; }; const getSlot = (self: any, name = 'default', options = {}) => { if (isVNode(self)) { if (self.type === Fragment) { return name === 'default' ? flattenChildren(self.children as any[]) : []; } else if (self.children && self.children[name]) { return flattenChildren(self.children[name](options)); } else { return []; } } else { const res = self.$slots[name] && self.$slots[name](options); return flattenChildren(res); } }; const findDOMNode = (instance: any) => { let node = instance?.vnode?.el || (instance && (instance.$el || instance)); while (node && !node.tagName) { node = node.nextSibling; } return node; }; const getOptionProps = (instance: VueInstance) => { const res = {}; if (instance.$ && instance.$.vnode) { const props = instance.$.vnode.props || {}; Object.keys(instance.$props).forEach(k => { const v = instance.$props[k]; const hyphenateKey = hyphenate(k); if (v !== undefined || hyphenateKey in props) { res[k] = v; // 直接取 $props[k] } }); } else if (isVNode(instance) && typeof instance.type === 'object') { const originProps = instance.props || {}; const props = {}; Object.keys(originProps).forEach(key => { props[camelize(key)] = originProps[key]; }); const options = (instance.type as any).props || {}; Object.keys(options).forEach(k => { const v = resolvePropValue(options, props, k, props[k]); if (v !== undefined || k in props) { res[k] = v; } }); } return res; }; const getComponent = (instance: any, prop = 'default', options = instance, execute = true) => { let com = undefined; if (instance.$) { const temp = instance[prop]; if (temp !== undefined) { return typeof temp === 'function' && execute ? temp(options) : temp; } else { com = instance.$slots[prop]; com = execute && com ? com(options) : com; } } else if (isVNode(instance)) { const temp = instance.props && instance.props[prop]; if (temp !== undefined && instance.props !== null) { return typeof temp === 'function' && execute ? temp(options) : temp; } else if (instance.type === Fragment) { com = instance.children; } else if (instance.children && instance.children[prop]) { com = instance.children[prop]; com = execute && com ? com(options) : com; } } if (Array.isArray(com)) { com = flattenChildren(com); com = com.length === 1 ? com[0] : com; com = com.length === 0 ? undefined : com; } return com; }; const getKey = (ele: any) => { const key = ele.key; return key; }; export function getEvents(ele: any = {}, on = true) { let props = {}; if (ele.$) { props = { ...props, ...ele.$attrs }; } else { props = { ...props, ...ele.props }; } return splitAttrs(props)[on ? 'onEvents' : 'events']; } export function getClass(ele: any) { const props = (isVNode(ele) ? ele.props : ele.$attrs) || {}; const tempCls = props.class || {}; let cls = {}; if (typeof tempCls === 'string') { tempCls.split(' ').forEach(c => { cls[c.trim()] = true; }); } else if (Array.isArray(tempCls)) { classNames(tempCls) .split(' ') .forEach(c => { cls[c.trim()] = true; }); } else { cls = { ...cls, ...tempCls }; } return cls; } export function getStyle(ele: any, camel?: boolean) { const props = (isVNode(ele) ? ele.props : ele.$attrs) || {}; let style = props.style || {}; if (typeof style === 'string') { style = parseStyleText(style, camel); } else if (camel && style) { // 驼峰化 const res = {}; Object.keys(style).forEach(k => (res[camelize(k)] = style[k])); return res; } return style; } export function getComponentName(opts: any) { return opts && (opts.Ctor.options.name || opts.tag); } export function isFragment(c: any) { return c.length === 1 && c[0].type === Fragment; } export function isEmptyContent(c: any) { return c === undefined || c === null || c === '' || (Array.isArray(c) && c.length === 0); } export function isEmptyElement(c: any) { return ( c && (c.type === Comment || (c.type === Fragment && c.children.length === 0) || (c.type === Text && c.children.trim() === '')) ); } export function isEmptySlot(c: any) { return !c || c().every(isEmptyElement); } export function isStringElement(c: any) { return c && c.type === Text; } export function filterEmpty(children = []) { const res = []; children.forEach(child => { if (Array.isArray(child)) { res.push(...child); } else if (child?.type === Fragment) { res.push(...filterEmpty(child.children)); } else { res.push(child); } }); return res.filter(c => !isEmptyElement(c)); } export function filterEmptyWithUndefined(children: any[]) { if (children) { const coms = filterEmpty(children); return coms.length ? coms : undefined; } else { return children; } } function isValidElement(element: any) { if (Array.isArray(element) && element.length === 1) { element = element[0]; } return element && element.__v_isVNode && typeof element.type !== 'symbol'; // remove text node } function getPropsSlot(slots: any, props: any, prop = 'default') { return props[prop] ?? slots[prop]?.(); } export const getTextFromElement = (ele: any) => { if (isValidElement(ele) && isStringElement(ele[0])) { return ele[0].children; } return ele; }; export { splitAttrs, hasProp, getOptionProps, getComponent, getKey, parseStyleText, initDefaultProps, isValidElement, camelize, getSlot, findDOMNode, flattenChildren, getPropsSlot, }; export default hasProp; ================================================ FILE: components/_util/props-util/initDefaultProps.ts ================================================ import type { PropType } from 'vue'; import type { VueTypeValidableDef, VueTypeDef } from 'vue-types'; const initDefaultProps = ( types: T, defaultProps: { [K in keyof T]?: T[K] extends VueTypeValidableDef ? U : T[K] extends VueTypeDef ? U : T[K] extends { type: PropType } ? U : any; }, ): T => { const propTypes: T = { ...types }; Object.keys(defaultProps).forEach(k => { const prop = propTypes[k] as VueTypeValidableDef; if (prop) { if (prop.type || prop.default) { prop.default = defaultProps[k]; } else if (prop.def) { prop.def(defaultProps[k]); } else { propTypes[k] = { type: prop, default: defaultProps[k] }; } } else { throw new Error(`not have ${k} prop`); } }); return propTypes; }; export default initDefaultProps; ================================================ FILE: components/_util/raf.ts ================================================ let raf = (callback: FrameRequestCallback) => setTimeout(callback, 16) as any; let caf = (num: number) => clearTimeout(num); if (typeof window !== 'undefined' && 'requestAnimationFrame' in window) { raf = (callback: FrameRequestCallback) => window.requestAnimationFrame(callback); caf = (handle: number) => window.cancelAnimationFrame(handle); } let rafUUID = 0; const rafIds = new Map(); function cleanup(id: number) { rafIds.delete(id); } export default function wrapperRaf(callback: () => void, times = 1): number { rafUUID += 1; const id = rafUUID; function callRef(leftTimes: number) { if (leftTimes === 0) { // Clean up cleanup(id); // Trigger callback(); } else { // Next raf const realId = raf(() => { callRef(leftTimes - 1); }); // Bind real raf id rafIds.set(id, realId); } } callRef(times); return id; } wrapperRaf.cancel = (id: number) => { const realId = rafIds.get(id); cleanup(realId); return caf(realId); }; ================================================ FILE: components/_util/reactivePick.ts ================================================ import type { UnwrapRef } from 'vue'; import { reactive, toRef } from 'vue'; import fromPairs from 'lodash-es/fromPairs'; /** * Reactively pick fields from a reactive object * * @see https://vueuse.js.org/reactivePick */ export function reactivePick( obj: T, ...keys: K[] ): { [S in K]: UnwrapRef } { return reactive(fromPairs(keys.map(k => [k, toRef(obj, k)]))) as any; } ================================================ FILE: components/_util/requestAnimationTimeout.ts ================================================ import getRequestAnimationFrame, { cancelRequestAnimationFrame as caf, } from './getRequestAnimationFrame'; const raf = getRequestAnimationFrame(); export const cancelAnimationTimeout = frame => caf(frame.id); export const requestAnimationTimeout = (callback, delay = 0) => { const start = Date.now(); function timeout() { if (Date.now() - start >= delay) { callback.call(); } else { frame.id = raf(timeout); } } const frame = { id: raf(timeout), }; return frame; }; ================================================ FILE: components/_util/responsiveObserve.ts ================================================ import { computed } from 'vue'; import type { GlobalToken } from '../theme/interface'; import { useToken } from '../theme/internal'; export type Breakpoint = 'xxxl' | 'xxl' | 'xl' | 'lg' | 'md' | 'sm' | 'xs'; export type BreakpointMap = Record; export type ScreenMap = Partial>; export type ScreenSizeMap = Partial>; export const responsiveArray: Breakpoint[] = ['xxxl', 'xxl', 'xl', 'lg', 'md', 'sm', 'xs']; type SubscribeFunc = (screens: ScreenMap) => void; const getResponsiveMap = (token: GlobalToken): BreakpointMap => ({ xs: `(max-width: ${token.screenXSMax}px)`, sm: `(min-width: ${token.screenSM}px)`, md: `(min-width: ${token.screenMD}px)`, lg: `(min-width: ${token.screenLG}px)`, xl: `(min-width: ${token.screenXL}px)`, xxl: `(min-width: ${token.screenXXL}px)`, xxxl: `{min-width: ${token.screenXXXL}px}`, }); export default function useResponsiveObserver() { const [, token] = useToken(); return computed(() => { const responsiveMap: BreakpointMap = getResponsiveMap(token.value); const subscribers = new Map(); let subUid = -1; let screens = {}; return { matchHandlers: {} as { [prop: string]: { mql: MediaQueryList; listener: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null; }; }, dispatch(pointMap: ScreenMap) { screens = pointMap; subscribers.forEach(func => func(screens)); return subscribers.size >= 1; }, subscribe(func: SubscribeFunc): number { if (!subscribers.size) this.register(); subUid += 1; subscribers.set(subUid, func); func(screens); return subUid; }, unsubscribe(paramToken: number) { subscribers.delete(paramToken); if (!subscribers.size) this.unregister(); }, unregister() { Object.keys(responsiveMap).forEach((screen: string) => { const matchMediaQuery = responsiveMap[screen]; const handler = this.matchHandlers[matchMediaQuery]; handler?.mql.removeListener(handler?.listener); }); subscribers.clear(); }, register() { Object.keys(responsiveMap).forEach((screen: string) => { const matchMediaQuery = responsiveMap[screen]; const listener = ({ matches }: { matches: boolean }) => { this.dispatch({ ...screens, [screen]: matches, }); }; const mql = window.matchMedia(matchMediaQuery); mql.addListener(listener); this.matchHandlers[matchMediaQuery] = { mql, listener, }; listener(mql); }); }, responsiveMap, }; }); } ================================================ FILE: components/_util/scrollTo.ts ================================================ import raf from './raf'; import { easeInOutCubic } from './easings'; import getScroll, { isWindow } from './getScroll'; interface ScrollToOptions { /** Scroll container, default as window */ getContainer?: () => HTMLElement | Window | Document; /** Scroll end callback */ callback?: () => any; /** Animation duration, default as 450 */ duration?: number; } export default function scrollTo(y: number, options: ScrollToOptions = {}) { const { getContainer = () => window, callback, duration = 450 } = options; const container = getContainer(); const scrollTop = getScroll(container, true); const startTime = Date.now(); const frameFunc = () => { const timestamp = Date.now(); const time = timestamp - startTime; const nextScrollTop = easeInOutCubic(time > duration ? duration : time, scrollTop, y, duration); if (isWindow(container)) { (container as Window).scrollTo(window.scrollX, nextScrollTop); } else if (container instanceof Document) { (container as Document).documentElement.scrollTop = nextScrollTop; } else { (container as HTMLElement).scrollTop = nextScrollTop; } if (time < duration) { raf(frameFunc); } else if (typeof callback === 'function') { callback(); } }; raf(frameFunc); } ================================================ FILE: components/_util/setStyle.ts ================================================ import type { CSSProperties } from 'vue'; /** * Easy to set element style, return previous style * IE browser compatible(IE browser doesn't merge overflow style, need to set it separately) * https://github.com/ant-design/ant-design/issues/19393 * */ export interface SetStyleOptions { element?: HTMLElement; } function setStyle(style: CSSProperties, options: SetStyleOptions = {}): CSSProperties { const { element = document.body } = options; const oldStyle: CSSProperties = {}; const styleKeys = Object.keys(style); // IE browser compatible styleKeys.forEach(key => { oldStyle[key] = element.style[key]; }); styleKeys.forEach(key => { element.style[key] = style[key]; }); return oldStyle; } export default setStyle; ================================================ FILE: components/_util/shallowequal.ts ================================================ import { toRaw } from 'vue'; function shallowEqual(objA: any, objB: any, compare?: any, compareContext?: any) { let ret = compare ? compare.call(compareContext, objA, objB) : void 0; if (ret !== void 0) { return !!ret; } if (objA === objB) { return true; } if (typeof objA !== 'object' || !objA || typeof objB !== 'object' || !objB) { return false; } const keysA = Object.keys(objA); const keysB = Object.keys(objB); if (keysA.length !== keysB.length) { return false; } const bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB); // Test for A's keys different from B. for (let idx = 0; idx < keysA.length; idx++) { const key = keysA[idx]; if (!bHasOwnProperty(key)) { return false; } const valueA = objA[key]; const valueB = objB[key]; ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0; if (ret === false || (ret === void 0 && valueA !== valueB)) { return false; } } return true; } export default function (value: any, other: any) { return shallowEqual(toRaw(value), toRaw(other)); } ================================================ FILE: components/_util/static-style-extract/__tests__/__snapshots__/index.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Static-Style-Extract should extract static styles with customTheme and customStyle 1`] = `".anticon{display:inline-flex;align-items:center;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.anticon >*{line-height:1;}.anticon svg{display:inline-block;}.anticon .anticon .anticon-icon{display:block;}a{color:#1668dc;text-decoration:none;background-color:transparent;outline:none;cursor:pointer;transition:color 0.3s;-webkit-text-decoration-skip:objects;}a:hover{color:#15417e;}a:active{color:#1554ad;}a:active,a:hover{text-decoration:none;outline:0;}a:focus{text-decoration:none;outline:0;}a[disabled]{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}[class^=\\"ant-affix\\"],[class*=\\" ant-affix\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-affix\\"]::before,[class*=\\" ant-affix\\"]::before,[class^=\\"ant-affix\\"]::after,[class*=\\" ant-affix\\"]::after{box-sizing:border-box;}[class^=\\"ant-affix\\"] [class^=\\"ant-affix\\"],[class*=\\" ant-affix\\"] [class^=\\"ant-affix\\"],[class^=\\"ant-affix\\"] [class*=\\" ant-affix\\"],[class*=\\" ant-affix\\"] [class*=\\" ant-affix\\"]{box-sizing:border-box;}[class^=\\"ant-affix\\"] [class^=\\"ant-affix\\"]::before,[class*=\\" ant-affix\\"] [class^=\\"ant-affix\\"]::before,[class^=\\"ant-affix\\"] [class*=\\" ant-affix\\"]::before,[class*=\\" ant-affix\\"] [class*=\\" ant-affix\\"]::before,[class^=\\"ant-affix\\"] [class^=\\"ant-affix\\"]::after,[class*=\\" ant-affix\\"] [class^=\\"ant-affix\\"]::after,[class^=\\"ant-affix\\"] [class*=\\" ant-affix\\"]::after,[class*=\\" ant-affix\\"] [class*=\\" ant-affix\\"]::after{box-sizing:border-box;}.ant-affix{position:fixed;z-index:10;}[class^=\\"ant-anchor\\"],[class*=\\" ant-anchor\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-anchor\\"]::before,[class*=\\" ant-anchor\\"]::before,[class^=\\"ant-anchor\\"]::after,[class*=\\" ant-anchor\\"]::after{box-sizing:border-box;}[class^=\\"ant-anchor\\"] [class^=\\"ant-anchor\\"],[class*=\\" ant-anchor\\"] [class^=\\"ant-anchor\\"],[class^=\\"ant-anchor\\"] [class*=\\" ant-anchor\\"],[class*=\\" ant-anchor\\"] [class*=\\" ant-anchor\\"]{box-sizing:border-box;}[class^=\\"ant-anchor\\"] [class^=\\"ant-anchor\\"]::before,[class*=\\" ant-anchor\\"] [class^=\\"ant-anchor\\"]::before,[class^=\\"ant-anchor\\"] [class*=\\" ant-anchor\\"]::before,[class*=\\" ant-anchor\\"] [class*=\\" ant-anchor\\"]::before,[class^=\\"ant-anchor\\"] [class^=\\"ant-anchor\\"]::after,[class*=\\" ant-anchor\\"] [class^=\\"ant-anchor\\"]::after,[class^=\\"ant-anchor\\"] [class*=\\" ant-anchor\\"]::after,[class*=\\" ant-anchor\\"] [class*=\\" ant-anchor\\"]::after{box-sizing:border-box;}.ant-anchor-wrapper{margin-block-start:-4px;padding-block-start:4px;background-color:transparent;}.ant-anchor-wrapper .ant-anchor{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;padding-inline-start:2px;}.ant-anchor-wrapper .ant-anchor .ant-anchor-link{padding-block:4px;padding-inline:16px 0;}.ant-anchor-wrapper .ant-anchor .ant-anchor-link-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;position:relative;display:block;margin-block-end:3px;color:rgba(255, 255, 255, 0.85);transition:all 0.3s;}.ant-anchor-wrapper .ant-anchor .ant-anchor-link-title:only-child{margin-block-end:0;}.ant-anchor-wrapper .ant-anchor .ant-anchor-link-active>.ant-anchor-link-title{color:#037003;}.ant-anchor-wrapper .ant-anchor .ant-anchor-link .ant-anchor-link{padding-block:2px;}.ant-anchor-wrapper:not(.ant-anchor-wrapper-horizontal) .ant-anchor::before{position:absolute;left:0;top:0;height:100%;border-inline-start:2px solid rgba(253, 253, 253, 0.12);content:\\" \\";}.ant-anchor-wrapper:not(.ant-anchor-wrapper-horizontal) .ant-anchor .ant-anchor-ink{position:absolute;left:0;display:none;transform:translateY(-50%);transition:top 0.3s ease-in-out;width:2px;background-color:#037003;}.ant-anchor-wrapper:not(.ant-anchor-wrapper-horizontal) .ant-anchor .ant-anchor-ink.ant-anchor-ink-visible{display:inline-block;}.ant-anchor-wrapper .ant-anchor-fixed .ant-anchor-ink .ant-anchor-ink{display:none;}.ant-anchor-wrapper-horizontal{position:relative;}.ant-anchor-wrapper-horizontal::before{position:absolute;left:0;right:0;bottom:0;border-bottom:1px solid rgba(253, 253, 253, 0.12);content:\\" \\";}.ant-anchor-wrapper-horizontal .ant-anchor{overflow-x:scroll;position:relative;display:flex;scrollbar-width:none;}.ant-anchor-wrapper-horizontal .ant-anchor::-webkit-scrollbar{display:none;}.ant-anchor-wrapper-horizontal .ant-anchor .ant-anchor-link:first-of-type{padding-inline:0;}.ant-anchor-wrapper-horizontal .ant-anchor .ant-anchor-ink{position:absolute;bottom:0;transition:left 0.3s ease-in-out,width 0.3s ease-in-out;height:2px;background-color:#037003;}[class^=\\"ant-select\\"],[class*=\\" ant-select\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-select\\"]::before,[class*=\\" ant-select\\"]::before,[class^=\\"ant-select\\"]::after,[class*=\\" ant-select\\"]::after{box-sizing:border-box;}[class^=\\"ant-select\\"] [class^=\\"ant-select\\"],[class*=\\" ant-select\\"] [class^=\\"ant-select\\"],[class^=\\"ant-select\\"] [class*=\\" ant-select\\"],[class*=\\" ant-select\\"] [class*=\\" ant-select\\"]{box-sizing:border-box;}[class^=\\"ant-select\\"] [class^=\\"ant-select\\"]::before,[class*=\\" ant-select\\"] [class^=\\"ant-select\\"]::before,[class^=\\"ant-select\\"] [class*=\\" ant-select\\"]::before,[class*=\\" ant-select\\"] [class*=\\" ant-select\\"]::before,[class^=\\"ant-select\\"] [class^=\\"ant-select\\"]::after,[class*=\\" ant-select\\"] [class^=\\"ant-select\\"]::after,[class^=\\"ant-select\\"] [class*=\\" ant-select\\"]::after,[class*=\\" ant-select\\"] [class*=\\" ant-select\\"]::after{box-sizing:border-box;}.ant-select-borderless .ant-select-selector{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important;}.ant-select.ant-select-in-form-item{width:100%;}.ant-select{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;cursor:pointer;}.ant-select:not(.ant-select-customize-input) .ant-select-selector{position:relative;background-color:#141414;border:1px solid #424242;transition:all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:pointer;}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector{cursor:text;}.ant-select-show-search.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:auto;color:inherit;}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{color:rgba(255, 255, 255, 0.25);background:rgba(255, 255, 255, 0.08);cursor:not-allowed;}.ant-select-multiple.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector{background:rgba(255, 255, 255, 0.08);}.ant-select-disabled.ant-select:not(.ant-select-customize-input) .ant-select-selector input{cursor:not-allowed;}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{margin:0;padding:0;background:transparent;border:none;outline:none;appearance:none;}.ant-select:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input::-webkit-search-cancel-button{display:none;-webkit-appearance:none;}.ant-select .ant-select-selection-item{flex:1;font-weight:normal;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-select .ant-select-selection-placeholder{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:1;color:rgba(255, 255, 255, 0.25);pointer-events:none;}.ant-select .ant-select-arrow{display:flex;align-items:center;color:rgba(255, 255, 255, 0.25);font-style:normal;line-height:1;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;position:absolute;top:50%;inset-inline-start:auto;inset-inline-end:11px;height:12px;margin-top:-6px;font-size:12px;pointer-events:none;}.ant-select .ant-select-arrow >*{line-height:1;}.ant-select .ant-select-arrow svg{display:inline-block;}.ant-select .ant-select-arrow .anticon{vertical-align:top;transition:transform 0.3s;}.ant-select .ant-select-arrow .anticon >svg{vertical-align:top;}.ant-select .ant-select-arrow .anticon:not(.ant-select-suffix){pointer-events:auto;}.ant-select-disabled .ant-select .ant-select-arrow{cursor:not-allowed;}.ant-select .ant-select-arrow >*:not(:last-child){margin-inline-end:8px;}.ant-select .ant-select-clear{position:absolute;top:50%;inset-inline-start:auto;inset-inline-end:11px;z-index:1;display:inline-block;width:12px;height:12px;margin-top:-6px;color:rgba(255, 255, 255, 0.25);font-size:12px;font-style:normal;line-height:1;text-align:center;text-transform:none;background:#141414;cursor:pointer;opacity:0;transition:color 0.2s ease,opacity 0.3s ease;text-rendering:auto;}.ant-select .ant-select-clear:before{display:block;}.ant-select .ant-select-clear:hover{color:rgba(255, 255, 255, 0.45);}.ant-select:hover .ant-select-clear{opacity:1;}.ant-select-has-feedback .ant-select-clear{inset-inline-end:29px;}.ant-select-single{font-size:14px;}.ant-select-single .ant-select-selector{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;border-radius:6px;}.ant-select-single .ant-select-selector .ant-select-selection-search{position:absolute;top:0;inset-inline-start:11px;inset-inline-end:11px;bottom:0;}.ant-select-single .ant-select-selector .ant-select-selection-search-input{width:100%;}.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:30px;transition:all 0.3s;}@supports (-moz-appearance: meterbar){.ant-select-single .ant-select-selector .ant-select-selection-item,.ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:30px;}}.ant-select-single .ant-select-selector .ant-select-selection-item{position:relative;user-select:none;}.ant-select-single .ant-select-selector .ant-select-selection-placeholder{transition:none;pointer-events:none;}.ant-select-single .ant-select-selector:after,.ant-select-single .ant-select-selector .ant-select-selection-item:after,.ant-select-single .ant-select-selector .ant-select-selection-placeholder:after{display:inline-block;width:0;visibility:hidden;content:\\"\\\\a0\\";}.ant-select-single.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-show-arrow .ant-select-selection-placeholder{padding-inline-end:18px;}.ant-select-single.ant-select-open .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:32px;padding:0 11px;}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:30px;}.ant-select-single:not(.ant-select-customize-input) .ant-select-selector:after{line-height:30px;}.ant-select-single.ant-select-customize-input .ant-select-selector:after{display:none;}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%;}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;inset-inline-start:0;inset-inline-end:0;padding:0 11px;}.ant-select-single.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none;}.ant-select-single.ant-select-sm{font-size:14px;}.ant-select-single.ant-select-sm .ant-select-selector{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;border-radius:4px;}.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-search{position:absolute;top:0;inset-inline-start:11px;inset-inline-end:11px;bottom:0;}.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-search-input{width:100%;}.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:22px;transition:all 0.3s;}@supports (-moz-appearance: meterbar){.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-placeholder{line-height:22px;}}.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-item{position:relative;user-select:none;}.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-placeholder{transition:none;pointer-events:none;}.ant-select-single.ant-select-sm .ant-select-selector:after,.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-item:after,.ant-select-single.ant-select-sm .ant-select-selector .ant-select-selection-placeholder:after{display:inline-block;width:0;visibility:hidden;content:\\"\\\\a0\\";}.ant-select-single.ant-select-sm.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm.ant-select-show-arrow .ant-select-selection-placeholder{padding-inline-end:18px;}.ant-select-single.ant-select-sm.ant-select-open .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:24px;padding:0 11px;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:22px;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector:after{line-height:22px;}.ant-select-single.ant-select-sm.ant-select-customize-input .ant-select-selector:after{display:none;}.ant-select-single.ant-select-sm.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%;}.ant-select-single.ant-select-sm.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;inset-inline-start:0;inset-inline-end:0;padding:0 11px;}.ant-select-single.ant-select-sm.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selection-search{inset-inline-start:7px;inset-inline-end:7px;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input) .ant-select-selector{padding:0 7px;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-search{inset-inline-end:28px;}.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-sm:not(.ant-select-customize-input).ant-select-show-arrow .ant-select-selection-placeholder{padding-inline-end:21px;}.ant-select-single.ant-select-lg{font-size:16px;}.ant-select-single.ant-select-lg .ant-select-selector{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:16px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;border-radius:8px;}.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-search{position:absolute;top:0;inset-inline-start:11px;inset-inline-end:11px;bottom:0;}.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-search-input{width:100%;}.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-placeholder{padding:0;line-height:38px;transition:all 0.3s;}@supports (-moz-appearance: meterbar){.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-item,.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-placeholder{line-height:38px;}}.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-item{position:relative;user-select:none;}.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-placeholder{transition:none;pointer-events:none;}.ant-select-single.ant-select-lg .ant-select-selector:after,.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-item:after,.ant-select-single.ant-select-lg .ant-select-selector .ant-select-selection-placeholder:after{display:inline-block;width:0;visibility:hidden;content:\\"\\\\a0\\";}.ant-select-single.ant-select-lg.ant-select-show-arrow .ant-select-selection-item,.ant-select-single.ant-select-lg.ant-select-show-arrow .ant-select-selection-placeholder{padding-inline-end:20px;}.ant-select-single.ant-select-lg.ant-select-open .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector{width:100%;height:40px;padding:0 11px;}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector .ant-select-selection-search-input{height:38px;}.ant-select-single.ant-select-lg:not(.ant-select-customize-input) .ant-select-selector:after{line-height:38px;}.ant-select-single.ant-select-lg.ant-select-customize-input .ant-select-selector:after{display:none;}.ant-select-single.ant-select-lg.ant-select-customize-input .ant-select-selector .ant-select-selection-search{position:static;width:100%;}.ant-select-single.ant-select-lg.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder{position:absolute;inset-inline-start:0;inset-inline-end:0;padding:0 11px;}.ant-select-single.ant-select-lg.ant-select-customize-input .ant-select-selector .ant-select-selection-placeholder:after{display:none;}.ant-select-multiple{font-size:14px;}.ant-select-multiple .ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%;}.ant-select-multiple .ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%;display:inline-flex;}.ant-select-multiple .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px;border-radius:6px;}.ant-select-show-search.ant-select-multiple .ant-select-selector{cursor:text;}.ant-select-disabled.ant-select-multiple .ant-select-selector{background:rgba(255, 255, 255, 0.08);cursor:not-allowed;}.ant-select-multiple .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:24px;content:\\"\\\\a0\\";}.ant-select-multiple.ant-select-show-arrow .ant-select-selector,.ant-select-multiple.ant-select-allow-clear .ant-select-selector{padding-inline-end:24px;}.ant-select-multiple .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:24px;margin-top:2px;margin-bottom:2px;line-height:22px;background:rgba(255, 255, 255, 0.12);border:1px solid rgba(253, 253, 253, 0.12);border-radius:4px;cursor:default;transition:font-size 0.3s,line-height 0.3s,height 0.3s;user-select:none;margin-inline-end:4px;padding-inline-start:8px;padding-inline-end:4px;}.ant-select-disabled.ant-select-multiple .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);border-color:#424242;cursor:not-allowed;}.ant-select-multiple .ant-select-selection-item-content{display:inline-block;margin-inline-end:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.ant-select-multiple .ant-select-selection-item-remove{display:inline-block;align-items:center;color:rgba(255, 255, 255, 0.45);font-style:normal;line-height:inherit;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:bold;font-size:10px;cursor:pointer;}.ant-select-multiple .ant-select-selection-item-remove >*{line-height:1;}.ant-select-multiple .ant-select-selection-item-remove svg{display:inline-block;}.ant-select-multiple .ant-select-selection-item-remove >.anticon{vertical-align:-0.2em;}.ant-select-multiple .ant-select-selection-item-remove:hover{color:rgba(255, 255, 255, 0.85);}.ant-select-multiple .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{margin-inline-start:0;}.ant-select-multiple .ant-select-selection-search{display:inline-flex;position:relative;max-width:100%;margin-inline-start:8px;}.ant-select-multiple .ant-select-selection-search-input,.ant-select-multiple .ant-select-selection-search-mirror{height:24px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:24px;transition:all 0.3s;}.ant-select-multiple .ant-select-selection-search-input{width:100%;min-width:4.1px;}.ant-select-multiple .ant-select-selection-search-mirror{position:absolute;top:0;inset-inline-start:0;inset-inline-end:auto;z-index:999;white-space:pre;visibility:hidden;}.ant-select-multiple .ant-select-selection-placeholder{position:absolute;top:50%;inset-inline-start:11px;inset-inline-end:11px;transform:translateY(-50%);transition:all 0.3s;}.ant-select-multiple.ant-select-sm{font-size:14px;}.ant-select-multiple.ant-select-sm .ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%;}.ant-select-multiple.ant-select-sm .ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%;display:inline-flex;}.ant-select-multiple.ant-select-sm .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px;border-radius:4px;}.ant-select-show-search.ant-select-multiple.ant-select-sm .ant-select-selector{cursor:text;}.ant-select-disabled.ant-select-multiple.ant-select-sm .ant-select-selector{background:rgba(255, 255, 255, 0.08);cursor:not-allowed;}.ant-select-multiple.ant-select-sm .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:16px;content:\\"\\\\a0\\";}.ant-select-multiple.ant-select-sm.ant-select-show-arrow .ant-select-selector,.ant-select-multiple.ant-select-sm.ant-select-allow-clear .ant-select-selector{padding-inline-end:24px;}.ant-select-multiple.ant-select-sm .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:16px;margin-top:2px;margin-bottom:2px;line-height:14px;background:rgba(255, 255, 255, 0.12);border:1px solid rgba(253, 253, 253, 0.12);border-radius:2px;cursor:default;transition:font-size 0.3s,line-height 0.3s,height 0.3s;user-select:none;margin-inline-end:4px;padding-inline-start:8px;padding-inline-end:4px;}.ant-select-disabled.ant-select-multiple.ant-select-sm .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);border-color:#424242;cursor:not-allowed;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-content{display:inline-block;margin-inline-end:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-remove{display:inline-block;align-items:center;color:rgba(255, 255, 255, 0.45);font-style:normal;line-height:inherit;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:bold;font-size:10px;cursor:pointer;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-remove >*{line-height:1;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-remove svg{display:inline-block;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-remove >.anticon{vertical-align:-0.2em;}.ant-select-multiple.ant-select-sm .ant-select-selection-item-remove:hover{color:rgba(255, 255, 255, 0.85);}.ant-select-multiple.ant-select-sm .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{margin-inline-start:0;}.ant-select-multiple.ant-select-sm .ant-select-selection-search{display:inline-flex;position:relative;max-width:100%;margin-inline-start:8px;}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input,.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{height:16px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:16px;transition:all 0.3s;}.ant-select-multiple.ant-select-sm .ant-select-selection-search-input{width:100%;min-width:4.1px;}.ant-select-multiple.ant-select-sm .ant-select-selection-search-mirror{position:absolute;top:0;inset-inline-start:0;inset-inline-end:auto;z-index:999;white-space:pre;visibility:hidden;}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{position:absolute;top:50%;inset-inline-start:11px;inset-inline-end:11px;transform:translateY(-50%);transition:all 0.3s;}.ant-select-multiple.ant-select-sm .ant-select-selection-placeholder{inset-inline-start:7px;inset-inline-end:auto;}.ant-select-multiple.ant-select-sm .ant-select-selection-search{margin-inline-start:2px;}.ant-select-multiple.ant-select-lg{font-size:16px;}.ant-select-multiple.ant-select-lg .ant-select-selection-overflow{position:relative;display:flex;flex:auto;flex-wrap:wrap;max-width:100%;}.ant-select-multiple.ant-select-lg .ant-select-selection-overflow-item{flex:none;align-self:center;max-width:100%;display:inline-flex;}.ant-select-multiple.ant-select-lg .ant-select-selector{display:flex;flex-wrap:wrap;align-items:center;padding:1px 4px;border-radius:8px;}.ant-select-show-search.ant-select-multiple.ant-select-lg .ant-select-selector{cursor:text;}.ant-select-disabled.ant-select-multiple.ant-select-lg .ant-select-selector{background:rgba(255, 255, 255, 0.08);cursor:not-allowed;}.ant-select-multiple.ant-select-lg .ant-select-selector:after{display:inline-block;width:0;margin:2px 0;line-height:32px;content:\\"\\\\a0\\";}.ant-select-multiple.ant-select-lg.ant-select-show-arrow .ant-select-selector,.ant-select-multiple.ant-select-lg.ant-select-allow-clear .ant-select-selector{padding-inline-end:24px;}.ant-select-multiple.ant-select-lg .ant-select-selection-item{position:relative;display:flex;flex:none;box-sizing:border-box;max-width:100%;height:32px;margin-top:2px;margin-bottom:2px;line-height:30px;background:rgba(255, 255, 255, 0.12);border:1px solid rgba(253, 253, 253, 0.12);border-radius:6px;cursor:default;transition:font-size 0.3s,line-height 0.3s,height 0.3s;user-select:none;margin-inline-end:4px;padding-inline-start:8px;padding-inline-end:4px;}.ant-select-disabled.ant-select-multiple.ant-select-lg .ant-select-selection-item{color:rgba(255, 255, 255, 0.25);border-color:#424242;cursor:not-allowed;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-content{display:inline-block;margin-inline-end:4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-remove{display:inline-block;align-items:center;color:rgba(255, 255, 255, 0.45);font-style:normal;line-height:inherit;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:bold;font-size:10px;cursor:pointer;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-remove >*{line-height:1;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-remove svg{display:inline-block;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-remove >.anticon{vertical-align:-0.2em;}.ant-select-multiple.ant-select-lg .ant-select-selection-item-remove:hover{color:rgba(255, 255, 255, 0.85);}.ant-select-multiple.ant-select-lg .ant-select-selection-overflow-item+.ant-select-selection-overflow-item .ant-select-selection-search{margin-inline-start:0;}.ant-select-multiple.ant-select-lg .ant-select-selection-search{display:inline-flex;position:relative;max-width:100%;margin-inline-start:8px;}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input,.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{height:32px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:32px;transition:all 0.3s;}.ant-select-multiple.ant-select-lg .ant-select-selection-search-input{width:100%;min-width:4.1px;}.ant-select-multiple.ant-select-lg .ant-select-selection-search-mirror{position:absolute;top:0;inset-inline-start:0;inset-inline-end:auto;z-index:999;white-space:pre;visibility:hidden;}.ant-select-multiple.ant-select-lg .ant-select-selection-placeholder{position:absolute;top:50%;inset-inline-start:11px;inset-inline-end:11px;transform:translateY(-50%);transition:all 0.3s;}.ant-select-dropdown{box-sizing:border-box;margin:0;padding:4px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:-9999px;z-index:1050;overflow:hidden;font-variant:initial;background-color:#1f1f1f;border-radius:8px;outline:none;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-bottomLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpIn;}.ant-select-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-select-dropdown-placement-topLeft,.ant-select-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownIn;}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-bottomLeft{animation-name:antSlideUpOut;}.ant-select-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-select-dropdown-placement-topLeft{animation-name:antSlideDownOut;}.ant-select-dropdown-hidden{display:none;}.ant-select-dropdown-empty{color:rgba(255, 255, 255, 0.25);}.ant-select-dropdown .ant-select-item-empty{position:relative;display:block;min-height:32px;padding:5px 12px;color:rgba(255, 255, 255, 0.25);font-weight:normal;font-size:14px;line-height:1.5714285714285714;box-sizing:border-box;}.ant-select-dropdown .ant-select-item{position:relative;display:block;min-height:32px;padding:5px 12px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;line-height:1.5714285714285714;box-sizing:border-box;cursor:pointer;transition:background 0.3s ease;border-radius:4px;}.ant-select-dropdown .ant-select-item-group{color:rgba(255, 255, 255, 0.45);font-size:12px;cursor:default;}.ant-select-dropdown .ant-select-item-option{display:flex;}.ant-select-dropdown .ant-select-item-option-content{flex:auto;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-select-dropdown .ant-select-item-option-state{flex:none;}.ant-select-dropdown .ant-select-item-option-active:not(.ant-select-item-option-disabled){background-color:rgba(255, 255, 255, 0.08);}.ant-select-dropdown .ant-select-item-option-selected:not(.ant-select-item-option-disabled){color:rgba(255, 255, 255, 0.85);font-weight:600;background-color:#111911;}.ant-select-dropdown .ant-select-item-option-selected:not(.ant-select-item-option-disabled) .ant-select-item-option-state{color:#037003;}.ant-select-dropdown .ant-select-item-option-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-select-dropdown .ant-select-item-option-disabled.ant-select-item-option-selected{background-color:rgba(255, 255, 255, 0.08);}.ant-select-dropdown .ant-select-item-option-grouped{padding-inline-start:24px;}.ant-select-dropdown-rtl{direction:rtl;}.ant-slide-up-enter,.ant-slide-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running;}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none;}.ant-slide-up-enter,.ant-slide-up-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-up-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-slide-down-enter,.ant-slide-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running;}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none;}.ant-slide-down-enter,.ant-slide-down-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-down-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-move-up-enter,.ant-move-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running;}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none;}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-up-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-move-down-enter,.ant-move-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running;}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none;}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-down-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-select-rtl{direction:rtl;}.ant-select-focused.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:undefinedpx!important;outline:0;}.ant-select:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector{border-color:#198016;border-inline-end-width:undefinedpx!important;}.ant-select-status-error:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector{border-color:#e86e6b;}.ant-select-focused.ant-select-status-error:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector{border-color:#e86e6b;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:undefinedpx!important;outline:0;}.ant-select-status-error:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector{border-color:#e86e6b;border-inline-end-width:undefinedpx!important;}.ant-select-status-warning:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector{border-color:#7c5914;}.ant-select-focused.ant-select-status-warning:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer) .ant-select-selector{border-color:#7c5914;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:undefinedpx!important;outline:0;}.ant-select-status-warning:not(.ant-select-disabled):not(.ant-select-customize-input):not(.ant-pagination-size-changer):hover .ant-select-selector{border-color:#7c5914;border-inline-end-width:undefinedpx!important;}.ant-select-compact-item:not(.ant-select-compact-last-item){margin-inline-end:-1px;}.ant-select-compact-item:hover>*,.ant-select-compact-item:active>*{z-index:2;}.ant-select-compact-item.ant-select-focused{z-index:2;}.ant-select-compact-item[disabled]>*{z-index:0;}.ant-select-compact-item:not(.ant-select-compact-first-item):not(.ant-select-compact-last-item)>.ant-select-selector{border-radius:0;}.ant-select-compact-item:not(.ant-select-compact-last-item).ant-select-compact-first-item>.ant-select-selector,.ant-select-compact-item:not(.ant-select-compact-last-item).ant-select-compact-first-item.ant-select-sm>.ant-select-selector,.ant-select-compact-item:not(.ant-select-compact-last-item).ant-select-compact-first-item.ant-select-lg>.ant-select-selector{border-start-end-radius:0;border-end-end-radius:0;}.ant-select-compact-item:not(.ant-select-compact-first-item).ant-select-compact-last-item>.ant-select-selector,.ant-select-compact-item:not(.ant-select-compact-first-item).ant-select-compact-last-item.ant-select-sm>.ant-select-selector,.ant-select-compact-item:not(.ant-select-compact-first-item).ant-select-compact-last-item.ant-select-lg>.ant-select-selector{border-start-start-radius:0;border-end-start-radius:0;}@keyframes antSlideUpIn{0%{transform:scaleY(0.8);transform-origin:0% 0%;opacity:0;}100%{transform:scaleY(1);transform-origin:0% 0%;opacity:1;}}@keyframes antSlideDownIn{0%{transform:scaleY(0.8);transform-origin:100% 100%;opacity:0;}100%{transform:scaleY(1);transform-origin:100% 100%;opacity:1;}}@keyframes antSlideUpOut{0%{transform:scaleY(1);transform-origin:0% 0%;opacity:1;}100%{transform:scaleY(0.8);transform-origin:0% 0%;opacity:0;}}@keyframes antSlideDownOut{0%{transform:scaleY(1);transform-origin:100% 100%;opacity:1;}100%{transform:scaleY(0.8);transform-origin:100% 100%;opacity:0;}}@keyframes antMoveUpIn{0%{transform:translate3d(0, -100%, 0);transform-origin:0 0;opacity:0;}100%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}}@keyframes antMoveUpOut{0%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}100%{transform:translate3d(0, -100%, 0);transform-origin:0 0;opacity:0;}}@keyframes antMoveDownIn{0%{transform:translate3d(0, 100%, 0);transform-origin:0 0;opacity:0;}100%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}}@keyframes antMoveDownOut{0%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}100%{transform:translate3d(0, 100%, 0);transform-origin:0 0;opacity:0;}}[class^=\\"ant-alert\\"],[class*=\\" ant-alert\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-alert\\"]::before,[class*=\\" ant-alert\\"]::before,[class^=\\"ant-alert\\"]::after,[class*=\\" ant-alert\\"]::after{box-sizing:border-box;}[class^=\\"ant-alert\\"] [class^=\\"ant-alert\\"],[class*=\\" ant-alert\\"] [class^=\\"ant-alert\\"],[class^=\\"ant-alert\\"] [class*=\\" ant-alert\\"],[class*=\\" ant-alert\\"] [class*=\\" ant-alert\\"]{box-sizing:border-box;}[class^=\\"ant-alert\\"] [class^=\\"ant-alert\\"]::before,[class*=\\" ant-alert\\"] [class^=\\"ant-alert\\"]::before,[class^=\\"ant-alert\\"] [class*=\\" ant-alert\\"]::before,[class*=\\" ant-alert\\"] [class*=\\" ant-alert\\"]::before,[class^=\\"ant-alert\\"] [class^=\\"ant-alert\\"]::after,[class*=\\" ant-alert\\"] [class^=\\"ant-alert\\"]::after,[class^=\\"ant-alert\\"] [class*=\\" ant-alert\\"]::after,[class*=\\" ant-alert\\"] [class*=\\" ant-alert\\"]::after{box-sizing:border-box;}.ant-alert{box-sizing:border-box;margin:0;padding:8px 12px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:flex;align-items:center;word-wrap:break-word;border-radius:8px;}.ant-alert.ant-alert-rtl{direction:rtl;}.ant-alert .ant-alert-content{flex:1;min-width:0;}.ant-alert .ant-alert-icon{margin-inline-end:8px;line-height:0;}.ant-alert-description{display:none;font-size:14px;line-height:1.5714285714285714;}.ant-alert-message{color:rgba(255, 255, 255, 0.85);}.ant-alert.ant-alert-motion-leave{overflow:hidden;opacity:1;transition:max-height 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),opacity 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),padding-top 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),padding-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86),margin-bottom 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-alert.ant-alert-motion-leave-active{max-height:0;margin-bottom:0!important;padding-top:0;padding-bottom:0;opacity:0;}.ant-alert-with-description{align-items:flex-start;padding-inline:24px;padding-block:20px;}.ant-alert-with-description .ant-alert-icon{margin-inline-end:12px;font-size:24px;line-height:0;}.ant-alert-with-description .ant-alert-message{display:block;margin-bottom:8px;color:rgba(255, 255, 255, 0.85);font-size:16px;}.ant-alert-with-description .ant-alert-description{display:block;}.ant-alert-banner{margin-bottom:0;border:0!important;border-radius:0;}.ant-alert-success{background-color:#162312;border:1px solid #274916;}.ant-alert-success .ant-alert-icon{color:#49aa19;}.ant-alert-info{background-color:#111a2c;border:1px solid #15325b;}.ant-alert-info .ant-alert-icon{color:#1668dc;}.ant-alert-warning{background-color:#2b2111;border:1px solid #594214;}.ant-alert-warning .ant-alert-icon{color:#d89614;}.ant-alert-error{background-color:#2c1618;border:1px solid #5b2526;}.ant-alert-error .ant-alert-icon{color:#dc4446;}.ant-alert-error .ant-alert-description>pre{margin:0;padding:0;}.ant-alert-action{margin-inline-start:8px;}.ant-alert .ant-alert-close-icon{margin-inline-start:8px;padding:0;overflow:hidden;font-size:12px;line-height:12px;background-color:transparent;border:none;outline:none;cursor:pointer;}.ant-alert .ant-alert-close-icon .anticon-close{color:rgba(255, 255, 255, 0.45);transition:color 0.2s;}.ant-alert .ant-alert-close-icon .anticon-close:hover{color:rgba(255, 255, 255, 0.85);}.ant-alert-close-text{color:rgba(255, 255, 255, 0.45);transition:color 0.2s;}.ant-alert-close-text:hover{color:rgba(255, 255, 255, 0.85);}[class^=\\"ant-avatar\\"],[class*=\\" ant-avatar\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-avatar\\"]::before,[class*=\\" ant-avatar\\"]::before,[class^=\\"ant-avatar\\"]::after,[class*=\\" ant-avatar\\"]::after{box-sizing:border-box;}[class^=\\"ant-avatar\\"] [class^=\\"ant-avatar\\"],[class*=\\" ant-avatar\\"] [class^=\\"ant-avatar\\"],[class^=\\"ant-avatar\\"] [class*=\\" ant-avatar\\"],[class*=\\" ant-avatar\\"] [class*=\\" ant-avatar\\"]{box-sizing:border-box;}[class^=\\"ant-avatar\\"] [class^=\\"ant-avatar\\"]::before,[class*=\\" ant-avatar\\"] [class^=\\"ant-avatar\\"]::before,[class^=\\"ant-avatar\\"] [class*=\\" ant-avatar\\"]::before,[class*=\\" ant-avatar\\"] [class*=\\" ant-avatar\\"]::before,[class^=\\"ant-avatar\\"] [class^=\\"ant-avatar\\"]::after,[class*=\\" ant-avatar\\"] [class^=\\"ant-avatar\\"]::after,[class^=\\"ant-avatar\\"] [class*=\\" ant-avatar\\"]::after,[class*=\\" ant-avatar\\"] [class*=\\" ant-avatar\\"]::after{box-sizing:border-box;}.ant-avatar{box-sizing:border-box;margin:0;padding:0;color:#fff;font-size:14px;line-height:30px;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;overflow:hidden;white-space:nowrap;text-align:center;vertical-align:middle;background:rgba(255, 255, 255, 0.25);border:1px solid transparent;width:32px;height:32px;border-radius:50%;}.ant-avatar-image{background:transparent;}.ant-avatar .ant-image-img{display:block;}.ant-avatar.ant-avatar-square{border-radius:6px;}.ant-avatar .ant-avatar-string{position:absolute;left:50%;transform-origin:0 center;}.ant-avatar.ant-avatar-icon{font-size:18px;}.ant-avatar.ant-avatar-icon >.anticon{margin:0;}.ant-avatar-lg{width:40px;height:40px;line-height:38px;border-radius:50%;}.ant-avatar-lg.ant-avatar-square{border-radius:8px;}.ant-avatar-lg .ant-avatar-string{position:absolute;left:50%;transform-origin:0 center;}.ant-avatar-lg.ant-avatar-icon{font-size:24px;}.ant-avatar-lg.ant-avatar-icon >.anticon{margin:0;}.ant-avatar-sm{width:24px;height:24px;line-height:22px;border-radius:50%;}.ant-avatar-sm.ant-avatar-square{border-radius:4px;}.ant-avatar-sm .ant-avatar-string{position:absolute;left:50%;transform-origin:0 center;}.ant-avatar-sm.ant-avatar-icon{font-size:14px;}.ant-avatar-sm.ant-avatar-icon >.anticon{margin:0;}.ant-avatar >img{display:block;width:100%;height:100%;object-fit:cover;}.ant-avatar-group{display:inline-flex;}.ant-avatar-group .ant-avatar{border-color:#141414;}.ant-avatar-group >*:not(:first-child){margin-inline-start:-8px;}.ant-avatar-group-popover .ant-avatar+.ant-avatar{margin-inline-start:4px;}[class^=\\"ant-badge\\"],[class*=\\" ant-badge\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-badge\\"]::before,[class*=\\" ant-badge\\"]::before,[class^=\\"ant-badge\\"]::after,[class*=\\" ant-badge\\"]::after{box-sizing:border-box;}[class^=\\"ant-badge\\"] [class^=\\"ant-badge\\"],[class*=\\" ant-badge\\"] [class^=\\"ant-badge\\"],[class^=\\"ant-badge\\"] [class*=\\" ant-badge\\"],[class*=\\" ant-badge\\"] [class*=\\" ant-badge\\"]{box-sizing:border-box;}[class^=\\"ant-badge\\"] [class^=\\"ant-badge\\"]::before,[class*=\\" ant-badge\\"] [class^=\\"ant-badge\\"]::before,[class^=\\"ant-badge\\"] [class*=\\" ant-badge\\"]::before,[class*=\\" ant-badge\\"] [class*=\\" ant-badge\\"]::before,[class^=\\"ant-badge\\"] [class^=\\"ant-badge\\"]::after,[class*=\\" ant-badge\\"] [class^=\\"ant-badge\\"]::after,[class^=\\"ant-badge\\"] [class*=\\" ant-badge\\"]::after,[class*=\\" ant-badge\\"] [class*=\\" ant-badge\\"]::after{box-sizing:border-box;}.ant-badge{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;width:fit-content;}.ant-badge .ant-badge-count{z-index:auto;min-width:20px;height:20px;color:#141414;font-weight:normal;font-size:12px;line-height:20px;white-space:nowrap;text-align:center;background:#dc4446;border-radius:10px;box-shadow:0 0 0 1px #141414;transition:background 0.2s;}.ant-badge .ant-badge-count a{color:#141414;}.ant-badge .ant-badge-count a:hover{color:#141414;}a:hover .ant-badge .ant-badge-count{background:#e86e6b;}.ant-badge .ant-badge-count-sm{min-width:14px;height:14px;font-size:12px;line-height:14px;border-radius:7px;}.ant-badge .ant-badge-multiple-words{padding:0 8px;}.ant-badge .ant-badge-dot{z-index:auto;width:6px;min-width:6px;height:6px;background:#dc4446;border-radius:100%;box-shadow:0 0 0 1px #141414;}.ant-badge .ant-badge-dot.ant-scroll-number{transition:background 0.3s;}.ant-badge .ant-badge-count,.ant-badge .ant-badge-dot,.ant-badge .ant-scroll-number-custom-component{position:absolute;top:0;inset-inline-end:0;transform:translate(50%, -50%);transform-origin:100% 0%;}.ant-badge .ant-badge-count.anticon-spin,.ant-badge .ant-badge-dot.anticon-spin,.ant-badge .ant-scroll-number-custom-component.anticon-spin{animation-name:antBadgeLoadingCircle;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear;}.ant-badge.ant-badge-status{line-height:inherit;vertical-align:baseline;}.ant-badge.ant-badge-status .ant-badge-status-dot{position:relative;top:-1px;display:inline-block;width:6px;height:6px;vertical-align:middle;border-radius:50%;}.ant-badge.ant-badge-status .ant-badge-status-success{background-color:#49aa19;}.ant-badge.ant-badge-status .ant-badge-status-processing{overflow:visible;color:#037003;background-color:#037003;}.ant-badge.ant-badge-status .ant-badge-status-processing::after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-width:1px;border-style:solid;border-color:inherit;border-radius:50%;animation-name:antStatusProcessing;animation-duration:1.2s;animation-iteration-count:infinite;animation-timing-function:ease-in-out;content:\\"\\";}.ant-badge.ant-badge-status .ant-badge-status-default{background-color:rgba(255, 255, 255, 0.25);}.ant-badge.ant-badge-status .ant-badge-status-error{background-color:#dc4446;}.ant-badge.ant-badge-status .ant-badge-status-warning{background-color:#d89614;}.ant-badge.ant-badge-status .ant-badge-status-text{margin-inline-start:8px;color:rgba(255, 255, 255, 0.85);font-size:14px;}.ant-badge.ant-badge .ant-badge-color-blue{background:#1668dc;}.ant-badge.ant-badge .ant-badge-color-blue:not(.ant-badge-count){color:#1668dc;}.ant-badge.ant-badge .ant-badge-color-purple{background:#642ab5;}.ant-badge.ant-badge .ant-badge-color-purple:not(.ant-badge-count){color:#642ab5;}.ant-badge.ant-badge .ant-badge-color-cyan{background:#13a8a8;}.ant-badge.ant-badge .ant-badge-color-cyan:not(.ant-badge-count){color:#13a8a8;}.ant-badge.ant-badge .ant-badge-color-green{background:#49aa19;}.ant-badge.ant-badge .ant-badge-color-green:not(.ant-badge-count){color:#49aa19;}.ant-badge.ant-badge .ant-badge-color-magenta{background:#cb2b83;}.ant-badge.ant-badge .ant-badge-color-magenta:not(.ant-badge-count){color:#cb2b83;}.ant-badge.ant-badge .ant-badge-color-pink{background:#cb2b83;}.ant-badge.ant-badge .ant-badge-color-pink:not(.ant-badge-count){color:#cb2b83;}.ant-badge.ant-badge .ant-badge-color-red{background:#d32029;}.ant-badge.ant-badge .ant-badge-color-red:not(.ant-badge-count){color:#d32029;}.ant-badge.ant-badge .ant-badge-color-orange{background:#d87a16;}.ant-badge.ant-badge .ant-badge-color-orange:not(.ant-badge-count){color:#d87a16;}.ant-badge.ant-badge .ant-badge-color-yellow{background:#d8bd14;}.ant-badge.ant-badge .ant-badge-color-yellow:not(.ant-badge-count){color:#d8bd14;}.ant-badge.ant-badge .ant-badge-color-volcano{background:#d84a1b;}.ant-badge.ant-badge .ant-badge-color-volcano:not(.ant-badge-count){color:#d84a1b;}.ant-badge.ant-badge .ant-badge-color-geekblue{background:#2b4acb;}.ant-badge.ant-badge .ant-badge-color-geekblue:not(.ant-badge-count){color:#2b4acb;}.ant-badge.ant-badge .ant-badge-color-lime{background:#8bbb11;}.ant-badge.ant-badge .ant-badge-color-lime:not(.ant-badge-count){color:#8bbb11;}.ant-badge.ant-badge .ant-badge-color-gold{background:#d89614;}.ant-badge.ant-badge .ant-badge-color-gold:not(.ant-badge-count){color:#d89614;}.ant-badge .ant-badge-zoom-appear,.ant-badge .ant-badge-zoom-enter{animation-name:antZoomBadgeIn;animation-duration:0.3s;animation-timing-function:cubic-bezier(0.12, 0.4, 0.29, 1.46);animation-fill-mode:both;}.ant-badge .ant-badge-zoom-leave{animation-name:antZoomBadgeOut;animation-duration:0.3s;animation-timing-function:cubic-bezier(0.12, 0.4, 0.29, 1.46);animation-fill-mode:both;}.ant-badge.ant-badge-not-a-wrapper .ant-badge-zoom-appear,.ant-badge.ant-badge-not-a-wrapper .ant-badge-zoom-enter{animation-name:antNoWrapperZoomBadgeIn;animation-duration:0.3s;animation-timing-function:cubic-bezier(0.12, 0.4, 0.29, 1.46);}.ant-badge.ant-badge-not-a-wrapper .ant-badge-zoom-leave{animation-name:antNoWrapperZoomBadgeOut;animation-duration:0.3s;animation-timing-function:cubic-bezier(0.12, 0.4, 0.29, 1.46);}.ant-badge.ant-badge-not-a-wrapper:not(.ant-badge-status){vertical-align:middle;}.ant-badge.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge.ant-badge-not-a-wrapper .ant-badge-count{transform:none;}.ant-badge.ant-badge-not-a-wrapper .ant-scroll-number-custom-component,.ant-badge.ant-badge-not-a-wrapper .ant-scroll-number{position:relative;top:auto;display:block;transform-origin:50% 50%;}.ant-badge .ant-scroll-number{overflow:hidden;}.ant-badge .ant-scroll-number .ant-scroll-number-only{position:relative;display:inline-block;height:20px;transition:all 0.3s cubic-bezier(0.12, 0.4, 0.29, 1.46);-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden;}.ant-badge .ant-scroll-number .ant-scroll-number-only >p.ant-scroll-number-only-unit{height:20px;margin:0;-webkit-transform-style:preserve-3d;-webkit-backface-visibility:hidden;}.ant-badge .ant-scroll-number .ant-scroll-number-symbol{vertical-align:top;}.ant-badge-rtl{direction:rtl;}.ant-badge-rtl .ant-badge-count,.ant-badge-rtl .ant-badge-dot,.ant-badge-rtl .ant-scroll-number-custom-component{transform:translate(-50%, -50%);}.ant-ribbon-wrapper{position:relative;}.ant-ribbon{box-sizing:border-box;margin:0;padding:0 8px;color:#037003;font-size:14px;line-height:22px;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:8px;white-space:nowrap;background-color:#037003;border-radius:4px;}.ant-ribbon .ant-ribbon-text{color:#fff;}.ant-ribbon .ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:currentcolor;border:4px solid;transform:scaleY(0.75);transform-origin:top;filter:brightness(75%);}.ant-ribbon.ant-ribbon-color-blue{background:#1668dc;color:#1668dc;}.ant-ribbon.ant-ribbon-color-purple{background:#642ab5;color:#642ab5;}.ant-ribbon.ant-ribbon-color-cyan{background:#13a8a8;color:#13a8a8;}.ant-ribbon.ant-ribbon-color-green{background:#49aa19;color:#49aa19;}.ant-ribbon.ant-ribbon-color-magenta{background:#cb2b83;color:#cb2b83;}.ant-ribbon.ant-ribbon-color-pink{background:#cb2b83;color:#cb2b83;}.ant-ribbon.ant-ribbon-color-red{background:#d32029;color:#d32029;}.ant-ribbon.ant-ribbon-color-orange{background:#d87a16;color:#d87a16;}.ant-ribbon.ant-ribbon-color-yellow{background:#d8bd14;color:#d8bd14;}.ant-ribbon.ant-ribbon-color-volcano{background:#d84a1b;color:#d84a1b;}.ant-ribbon.ant-ribbon-color-geekblue{background:#2b4acb;color:#2b4acb;}.ant-ribbon.ant-ribbon-color-lime{background:#8bbb11;color:#8bbb11;}.ant-ribbon.ant-ribbon-color-gold{background:#d89614;color:#d89614;}.ant-ribbon.ant-ribbon-placement-end{inset-inline-end:-8px;border-end-end-radius:0;}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{inset-inline-end:0;border-inline-end-color:transparent;border-block-end-color:transparent;}.ant-ribbon.ant-ribbon-placement-start{inset-inline-start:-8px;border-end-start-radius:0;}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{inset-inline-start:0;border-block-end-color:transparent;border-inline-start-color:transparent;}.ant-ribbon-rtl{direction:rtl;}@keyframes antBadgeLoadingCircle{0%{transform-origin:50%;}100%{transform:translate(50%, -50%) rotate(360deg);transform-origin:50%;}}@keyframes antStatusProcessing{0%{transform:scale(0.8);opacity:0.5;}100%{transform:scale(2.4);opacity:0;}}@keyframes antZoomBadgeIn{0%{transform:scale(0) translate(50%, -50%);opacity:0;}100%{transform:scale(1) translate(50%, -50%);}}@keyframes antZoomBadgeOut{0%{transform:scale(1) translate(50%, -50%);}100%{transform:scale(0) translate(50%, -50%);opacity:0;}}@keyframes antNoWrapperZoomBadgeIn{0%{transform:scale(0);opacity:0;}100%{transform:scale(1);}}@keyframes antNoWrapperZoomBadgeOut{0%{transform:scale(1);}100%{transform:scale(0);opacity:0;}}[class^=\\"ant-ribbon\\"],[class*=\\" ant-ribbon\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-ribbon\\"]::before,[class*=\\" ant-ribbon\\"]::before,[class^=\\"ant-ribbon\\"]::after,[class*=\\" ant-ribbon\\"]::after{box-sizing:border-box;}[class^=\\"ant-ribbon\\"] [class^=\\"ant-ribbon\\"],[class*=\\" ant-ribbon\\"] [class^=\\"ant-ribbon\\"],[class^=\\"ant-ribbon\\"] [class*=\\" ant-ribbon\\"],[class*=\\" ant-ribbon\\"] [class*=\\" ant-ribbon\\"]{box-sizing:border-box;}[class^=\\"ant-ribbon\\"] [class^=\\"ant-ribbon\\"]::before,[class*=\\" ant-ribbon\\"] [class^=\\"ant-ribbon\\"]::before,[class^=\\"ant-ribbon\\"] [class*=\\" ant-ribbon\\"]::before,[class*=\\" ant-ribbon\\"] [class*=\\" ant-ribbon\\"]::before,[class^=\\"ant-ribbon\\"] [class^=\\"ant-ribbon\\"]::after,[class*=\\" ant-ribbon\\"] [class^=\\"ant-ribbon\\"]::after,[class^=\\"ant-ribbon\\"] [class*=\\" ant-ribbon\\"]::after,[class*=\\" ant-ribbon\\"] [class*=\\" ant-ribbon\\"]::after{box-sizing:border-box;}.ant-ribbon{box-sizing:border-box;margin:0;padding:0 8px;color:#037003;font-size:14px;line-height:22px;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:8px;white-space:nowrap;background-color:#037003;border-radius:4px;}.ant-ribbon .ant-ribbon-text{color:#fff;}.ant-ribbon .ant-ribbon-corner{position:absolute;top:100%;width:8px;height:8px;color:currentcolor;border:4px solid;transform:scaleY(0.75);transform-origin:top;filter:brightness(75%);}.ant-ribbon.ant-ribbon-color-blue{background:#1668dc;color:#1668dc;}.ant-ribbon.ant-ribbon-color-purple{background:#642ab5;color:#642ab5;}.ant-ribbon.ant-ribbon-color-cyan{background:#13a8a8;color:#13a8a8;}.ant-ribbon.ant-ribbon-color-green{background:#49aa19;color:#49aa19;}.ant-ribbon.ant-ribbon-color-magenta{background:#cb2b83;color:#cb2b83;}.ant-ribbon.ant-ribbon-color-pink{background:#cb2b83;color:#cb2b83;}.ant-ribbon.ant-ribbon-color-red{background:#d32029;color:#d32029;}.ant-ribbon.ant-ribbon-color-orange{background:#d87a16;color:#d87a16;}.ant-ribbon.ant-ribbon-color-yellow{background:#d8bd14;color:#d8bd14;}.ant-ribbon.ant-ribbon-color-volcano{background:#d84a1b;color:#d84a1b;}.ant-ribbon.ant-ribbon-color-geekblue{background:#2b4acb;color:#2b4acb;}.ant-ribbon.ant-ribbon-color-lime{background:#8bbb11;color:#8bbb11;}.ant-ribbon.ant-ribbon-color-gold{background:#d89614;color:#d89614;}.ant-ribbon.ant-ribbon-placement-end{inset-inline-end:-8px;border-end-end-radius:0;}.ant-ribbon.ant-ribbon-placement-end .ant-ribbon-corner{inset-inline-end:0;border-inline-end-color:transparent;border-block-end-color:transparent;}.ant-ribbon.ant-ribbon-placement-start{inset-inline-start:-8px;border-end-start-radius:0;}.ant-ribbon.ant-ribbon-placement-start .ant-ribbon-corner{inset-inline-start:0;border-block-end-color:transparent;border-inline-start-color:transparent;}.ant-ribbon-rtl{direction:rtl;}.ant-ribbon-wrapper{position:relative;}[class^=\\"ant-breadcrumb\\"],[class*=\\" ant-breadcrumb\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-breadcrumb\\"]::before,[class*=\\" ant-breadcrumb\\"]::before,[class^=\\"ant-breadcrumb\\"]::after,[class*=\\" ant-breadcrumb\\"]::after{box-sizing:border-box;}[class^=\\"ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"],[class*=\\" ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"],[class^=\\"ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"],[class*=\\" ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"]{box-sizing:border-box;}[class^=\\"ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"]::before,[class*=\\" ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"]::before,[class^=\\"ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"]::before,[class*=\\" ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"]::before,[class^=\\"ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"]::after,[class*=\\" ant-breadcrumb\\"] [class^=\\"ant-breadcrumb\\"]::after,[class^=\\"ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"]::after,[class*=\\" ant-breadcrumb\\"] [class*=\\" ant-breadcrumb\\"]::after{box-sizing:border-box;}.ant-breadcrumb{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-breadcrumb .anticon{font-size:14px;}.ant-breadcrumb ol{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;}.ant-breadcrumb a{color:rgba(255, 255, 255, 0.45);transition:color 0.2s;padding:0 4px;border-radius:4px;height:22px;display:inline-block;margin-inline:-4px;}.ant-breadcrumb a:hover{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.12);}.ant-breadcrumb a:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-breadcrumb li:last-child{color:rgba(255, 255, 255, 0.85);}.ant-breadcrumb li:last-child>.ant-breadcrumb-separator{display:none;}.ant-breadcrumb .ant-breadcrumb-separator{margin-inline:8px;color:rgba(255, 255, 255, 0.45);}.ant-breadcrumb .ant-breadcrumb-link >.anticon+span,.ant-breadcrumb .ant-breadcrumb-link >.anticon+a{margin-inline-start:4px;}.ant-breadcrumb .ant-breadcrumb-overlay-link{border-radius:4px;height:22px;display:inline-block;padding:0 4px;margin-inline:-4px;}.ant-breadcrumb .ant-breadcrumb-overlay-link >.anticon{margin-inline-start:4px;font-size:12px;}.ant-breadcrumb .ant-breadcrumb-overlay-link:hover{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.12);}.ant-breadcrumb .ant-breadcrumb-overlay-link:hover a{color:rgba(255, 255, 255, 0.85);}.ant-breadcrumb .ant-breadcrumb-overlay-link a:hover{background-color:transparent;}.ant-breadcrumb.ant-breadcrumb-rtl{direction:rtl;}[class^=\\"ant-btn\\"],[class*=\\" ant-btn\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-btn\\"]::before,[class*=\\" ant-btn\\"]::before,[class^=\\"ant-btn\\"]::after,[class*=\\" ant-btn\\"]::after{box-sizing:border-box;}[class^=\\"ant-btn\\"] [class^=\\"ant-btn\\"],[class*=\\" ant-btn\\"] [class^=\\"ant-btn\\"],[class^=\\"ant-btn\\"] [class*=\\" ant-btn\\"],[class*=\\" ant-btn\\"] [class*=\\" ant-btn\\"]{box-sizing:border-box;}[class^=\\"ant-btn\\"] [class^=\\"ant-btn\\"]::before,[class*=\\" ant-btn\\"] [class^=\\"ant-btn\\"]::before,[class^=\\"ant-btn\\"] [class*=\\" ant-btn\\"]::before,[class*=\\" ant-btn\\"] [class*=\\" ant-btn\\"]::before,[class^=\\"ant-btn\\"] [class^=\\"ant-btn\\"]::after,[class*=\\" ant-btn\\"] [class^=\\"ant-btn\\"]::after,[class^=\\"ant-btn\\"] [class*=\\" ant-btn\\"]::after,[class*=\\" ant-btn\\"] [class*=\\" ant-btn\\"]::after{box-sizing:border-box;}.ant-btn{outline:none;position:relative;display:inline-block;font-weight:400;white-space:nowrap;text-align:center;background-image:none;background-color:transparent;border:1px solid transparent;cursor:pointer;transition:all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);user-select:none;touch-action:manipulation;line-height:1.5714285714285714;color:rgba(255, 255, 255, 0.85);}.ant-btn >span{display:inline-block;}.ant-btn >.anticon+span,.ant-btn >span+.anticon{margin-inline-start:8px;}.ant-btn >a{color:currentColor;}.ant-btn:not(:disabled):focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-btn-icon-only.ant-btn-compact-item{flex:none;}.ant-btn-compact-item.ant-btn-primary:not([disabled])+.ant-btn-compact-item.ant-btn-primary:not([disabled]){position:relative;}.ant-btn-compact-item.ant-btn-primary:not([disabled])+.ant-btn-compact-item.ant-btn-primary:not([disabled]):before{position:absolute;top:-1px;inset-inline-start:-1px;display:inline-block;width:1px;height:calc(100% + 2px);background-color:#198016;content:\\"\\";}.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled])+.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]){position:relative;}.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled])+.ant-btn-compact-vertical-item.ant-btn-primary:not([disabled]):before{position:absolute;top:-1px;inset-inline-start:-1px;display:inline-block;width:calc(100% + 2px);height:1px;background-color:#198016;content:\\"\\";}.ant-btn.ant-btn-sm{font-size:14px;height:24px;padding:0px 7px;border-radius:4px;}.ant-btn.ant-btn-sm.ant-btn-icon-only{width:24px;padding-inline-start:0;padding-inline-end:0;}.ant-btn.ant-btn-sm.ant-btn-icon-only.ant-btn-round{width:auto;}.ant-btn.ant-btn-sm.ant-btn-icon-only >span{transform:scale(1.143);}.ant-btn.ant-btn-sm.ant-btn-loading{opacity:0.65;cursor:default;}.ant-btn.ant-btn-sm .ant-btn-loading-icon{transition:width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-btn.ant-btn-sm:not(.ant-btn-icon-only) .ant-btn-loading-icon>.anticon{margin-inline-end:8px;}.ant-btn.ant-btn-circle.ant-btn-sm{min-width:24px;padding-inline-start:0;padding-inline-end:0;border-radius:50%;}.ant-btn.ant-btn-round.ant-btn-sm{border-radius:24px;padding-inline-start:12px;padding-inline-end:12px;}.ant-btn{font-size:14px;height:32px;padding:4px 15px;border-radius:6px;}.ant-btn.ant-btn-icon-only{width:32px;padding-inline-start:0;padding-inline-end:0;}.ant-btn.ant-btn-icon-only.ant-btn-round{width:auto;}.ant-btn.ant-btn-icon-only >span{transform:scale(1.143);}.ant-btn.ant-btn-loading{opacity:0.65;cursor:default;}.ant-btn .ant-btn-loading-icon{transition:width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-btn:not(.ant-btn-icon-only) .ant-btn-loading-icon>.anticon{margin-inline-end:8px;}.ant-btn.ant-btn-circle{min-width:32px;padding-inline-start:0;padding-inline-end:0;border-radius:50%;}.ant-btn.ant-btn-round{border-radius:32px;padding-inline-start:16px;padding-inline-end:16px;}.ant-btn.ant-btn-lg{font-size:16px;height:40px;padding:6.428571428571429px 15px;border-radius:8px;}.ant-btn.ant-btn-lg.ant-btn-icon-only{width:40px;padding-inline-start:0;padding-inline-end:0;}.ant-btn.ant-btn-lg.ant-btn-icon-only.ant-btn-round{width:auto;}.ant-btn.ant-btn-lg.ant-btn-icon-only >span{transform:scale(1.143);}.ant-btn.ant-btn-lg.ant-btn-loading{opacity:0.65;cursor:default;}.ant-btn.ant-btn-lg .ant-btn-loading-icon{transition:width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-btn.ant-btn-lg:not(.ant-btn-icon-only) .ant-btn-loading-icon>.anticon{margin-inline-end:8px;}.ant-btn.ant-btn-circle.ant-btn-lg{min-width:40px;padding-inline-start:0;padding-inline-end:0;border-radius:50%;}.ant-btn.ant-btn-round.ant-btn-lg{border-radius:40px;padding-inline-start:20px;padding-inline-end:20px;}.ant-btn.ant-btn-block{width:100%;}.ant-btn-default{background-color:#141414;border-color:#424242;box-shadow:0 2px 0 rgba(255, 255, 255, 0.04);}.ant-btn-default:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-default:not(:disabled):hover{color:#198016;border-color:#198016;}.ant-btn-default:not(:disabled):active{color:#075a07;border-color:#075a07;}.ant-btn-default.ant-btn-background-ghost{color:#141414;background-color:transparent;border-color:#141414;box-shadow:none;}.ant-btn-default.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;}.ant-btn-default.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;}.ant-btn-default.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-default.ant-btn-dangerous{color:#dc4446;border-color:#dc4446;}.ant-btn-default.ant-btn-dangerous:not(:disabled):hover{color:#e86e6b;border-color:#7e2e2f;}.ant-btn-default.ant-btn-dangerous:not(:disabled):active{color:#ad393a;border-color:#ad393a;}.ant-btn-default.ant-btn-dangerous.ant-btn-background-ghost{color:#dc4446;background-color:transparent;border-color:#dc4446;box-shadow:none;}.ant-btn-default.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;}.ant-btn-default.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;}.ant-btn-default.ant-btn-dangerous.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-default.ant-btn-dangerous:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-primary{color:#fff;background-color:#037003;box-shadow:0 2px 0 rgba(0, 53, 0, 0.15);}.ant-btn-primary:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-primary:not(:disabled):hover{color:#fff;background-color:#198016;}.ant-btn-primary:not(:disabled):active{color:#fff;background-color:#075a07;}.ant-btn-primary.ant-btn-background-ghost{color:#037003;background-color:transparent;border-color:#037003;box-shadow:none;}.ant-btn-primary.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;color:#198016;border-color:#198016;}.ant-btn-primary.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;color:#075a07;border-color:#075a07;}.ant-btn-primary.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-primary.ant-btn-dangerous{background-color:#dc4446;box-shadow:0 2px 0 rgba(238, 38, 56, 0.11);}.ant-btn-primary.ant-btn-dangerous:not(:disabled):hover{background-color:#e86e6b;}.ant-btn-primary.ant-btn-dangerous:not(:disabled):active{background-color:#ad393a;}.ant-btn-primary.ant-btn-dangerous.ant-btn-background-ghost{color:#dc4446;background-color:transparent;border-color:#dc4446;box-shadow:none;}.ant-btn-primary.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;color:#e86e6b;border-color:#e86e6b;}.ant-btn-primary.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;color:#ad393a;border-color:#ad393a;}.ant-btn-primary.ant-btn-dangerous.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-primary.ant-btn-dangerous:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-dashed{background-color:#141414;border-color:#424242;box-shadow:0 2px 0 rgba(255, 255, 255, 0.04);border-style:dashed;}.ant-btn-dashed:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-dashed:not(:disabled):hover{color:#198016;border-color:#198016;}.ant-btn-dashed:not(:disabled):active{color:#075a07;border-color:#075a07;}.ant-btn-dashed.ant-btn-background-ghost{color:#141414;background-color:transparent;border-color:#141414;box-shadow:none;}.ant-btn-dashed.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;}.ant-btn-dashed.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;}.ant-btn-dashed.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-dashed.ant-btn-dangerous{color:#dc4446;border-color:#dc4446;}.ant-btn-dashed.ant-btn-dangerous:not(:disabled):hover{color:#e86e6b;border-color:#7e2e2f;}.ant-btn-dashed.ant-btn-dangerous:not(:disabled):active{color:#ad393a;border-color:#ad393a;}.ant-btn-dashed.ant-btn-dangerous.ant-btn-background-ghost{color:#dc4446;background-color:transparent;border-color:#dc4446;box-shadow:none;}.ant-btn-dashed.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):hover{background-color:transparent;}.ant-btn-dashed.ant-btn-dangerous.ant-btn-background-ghost:not(:disabled):active{background-color:transparent;}.ant-btn-dashed.ant-btn-dangerous.ant-btn-background-ghost:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);border-color:#424242;}.ant-btn-dashed.ant-btn-dangerous:disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-link{color:#1668dc;}.ant-btn-link:not(:disabled):hover{color:#15417e;}.ant-btn-link:not(:disabled):active{color:#1554ad;}.ant-btn-link:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);}.ant-btn-link.ant-btn-dangerous{color:#dc4446;}.ant-btn-link.ant-btn-dangerous:not(:disabled):hover{color:#e86e6b;}.ant-btn-link.ant-btn-dangerous:not(:disabled):active{color:#ad393a;}.ant-btn-link.ant-btn-dangerous:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);}.ant-btn-text:not(:disabled):hover{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.12);}.ant-btn-text:not(:disabled):active{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.18);}.ant-btn-text:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);}.ant-btn-text.ant-btn-dangerous{color:#dc4446;}.ant-btn-text.ant-btn-dangerous:disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);}.ant-btn-text.ant-btn-dangerous:not(:disabled):hover{color:#e86e6b;background-color:#2c1618;}.ant-btn-text.ant-btn-dangerous:not(:disabled):active{color:#e86e6b;background-color:#2c1618;}.ant-btn-disabled{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-disabled.ant-btn:hover{cursor:not-allowed;border-color:#424242;color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);box-shadow:none;}.ant-btn-group{position:relative;display:inline-flex;}.ant-btn-group >span:not(:last-child),.ant-btn-group >.ant-btn:not(:last-child),.ant-btn-group >span:not(:last-child)>.ant-btn,.ant-btn-group >.ant-btn:not(:last-child)>.ant-btn{border-start-end-radius:0;border-end-end-radius:0;}.ant-btn-group >span:not(:first-child),.ant-btn-group >.ant-btn:not(:first-child){margin-inline-start:-1px;}.ant-btn-group >span:not(:first-child),.ant-btn-group >.ant-btn:not(:first-child),.ant-btn-group >span:not(:first-child)>.ant-btn,.ant-btn-group >.ant-btn:not(:first-child)>.ant-btn{border-start-start-radius:0;border-end-start-radius:0;}.ant-btn-group .ant-btn{position:relative;z-index:1;}.ant-btn-group .ant-btn:hover,.ant-btn-group .ant-btn:focus,.ant-btn-group .ant-btn:active{z-index:2;}.ant-btn-group .ant-btn[disabled]{z-index:0;}.ant-btn-group .ant-btn-icon-only{font-size:14px;}.ant-btn-group >span:not(:last-child):not(:disabled),.ant-btn-group >.ant-btn-primary:not(:last-child):not(:disabled),.ant-btn-group >span:not(:last-child)>.ant-btn-primary:not(:disabled),.ant-btn-group >.ant-btn-primary:not(:last-child)>.ant-btn-primary:not(:disabled){border-inline-end-color:#198016;}.ant-btn-group >span:not(:first-child):not(:disabled),.ant-btn-group >.ant-btn-primary:not(:first-child):not(:disabled),.ant-btn-group >span:not(:first-child)>.ant-btn-primary:not(:disabled),.ant-btn-group >.ant-btn-primary:not(:first-child)>.ant-btn-primary:not(:disabled){border-inline-start-color:#198016;}.ant-btn-group >span:not(:last-child):not(:disabled),.ant-btn-group >.ant-btn-danger:not(:last-child):not(:disabled),.ant-btn-group >span:not(:last-child)>.ant-btn-danger:not(:disabled),.ant-btn-group >.ant-btn-danger:not(:last-child)>.ant-btn-danger:not(:disabled){border-inline-end-color:#e86e6b;}.ant-btn-group >span:not(:first-child):not(:disabled),.ant-btn-group >.ant-btn-danger:not(:first-child):not(:disabled),.ant-btn-group >span:not(:first-child)>.ant-btn-danger:not(:disabled),.ant-btn-group >.ant-btn-danger:not(:first-child)>.ant-btn-danger:not(:disabled){border-inline-start-color:#e86e6b;}.ant-btn-compact-item:not(.ant-btn-compact-last-item){margin-inline-end:-1px;}.ant-btn-compact-item:hover,.ant-btn-compact-item:active{z-index:2;}.ant-btn-compact-item[disabled]{z-index:0;}.ant-btn-compact-item:not(.ant-btn-compact-first-item):not(.ant-btn-compact-last-item){border-radius:0;}.ant-btn-compact-item:not(.ant-btn-compact-last-item).ant-btn-compact-first-item,.ant-btn-compact-item:not(.ant-btn-compact-last-item).ant-btn-compact-first-item.ant-btn-sm,.ant-btn-compact-item:not(.ant-btn-compact-last-item).ant-btn-compact-first-item.ant-btn-lg{border-start-end-radius:0;border-end-end-radius:0;}.ant-btn-compact-item:not(.ant-btn-compact-first-item).ant-btn-compact-last-item,.ant-btn-compact-item:not(.ant-btn-compact-first-item).ant-btn-compact-last-item.ant-btn-sm,.ant-btn-compact-item:not(.ant-btn-compact-first-item).ant-btn-compact-last-item.ant-btn-lg{border-start-start-radius:0;border-end-start-radius:0;}.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-last-item){margin-bottom:-1px;}.ant-btn-compact-vertical-item:hover,.ant-btn-compact-vertical-item:focus,.ant-btn-compact-vertical-item:active{z-index:2;}.ant-btn-compact-vertical-item[disabled]{z-index:0;}.ant-btn-compact-vertical-item:not(.ant-btn-compact-vertical-first-item):not(.ant-btn-compact-vertical-last-item){border-radius:0;}.ant-btn-compact-vertical-item.ant-btn-compact-vertical-first-item:not(.ant-btn-compact-vertical-last-item),.ant-btn-compact-vertical-item.ant-btn-compact-vertical-first-item:not(.ant-btn-compact-vertical-last-item).ant-btn-sm,.ant-btn-compact-vertical-item.ant-btn-compact-vertical-first-item:not(.ant-btn-compact-vertical-last-item).ant-btn-lg{border-end-end-radius:0;border-end-start-radius:0;}.ant-btn-compact-vertical-item.ant-btn-compact-vertical-last-item:not(.ant-btn-compact-vertical-first-item),.ant-btn-compact-vertical-item.ant-btn-compact-vertical-last-item:not(.ant-btn-compact-vertical-first-item).ant-btn-sm,.ant-btn-compact-vertical-item.ant-btn-compact-vertical-last-item:not(.ant-btn-compact-vertical-first-item).ant-btn-lg{border-start-start-radius:0;border-start-end-radius:0;}[class^=\\"ant-wave\\"],[class*=\\" ant-wave\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-wave\\"]::before,[class*=\\" ant-wave\\"]::before,[class^=\\"ant-wave\\"]::after,[class*=\\" ant-wave\\"]::after{box-sizing:border-box;}[class^=\\"ant-wave\\"] [class^=\\"ant-wave\\"],[class*=\\" ant-wave\\"] [class^=\\"ant-wave\\"],[class^=\\"ant-wave\\"] [class*=\\" ant-wave\\"],[class*=\\" ant-wave\\"] [class*=\\" ant-wave\\"]{box-sizing:border-box;}[class^=\\"ant-wave\\"] [class^=\\"ant-wave\\"]::before,[class*=\\" ant-wave\\"] [class^=\\"ant-wave\\"]::before,[class^=\\"ant-wave\\"] [class*=\\" ant-wave\\"]::before,[class*=\\" ant-wave\\"] [class*=\\" ant-wave\\"]::before,[class^=\\"ant-wave\\"] [class^=\\"ant-wave\\"]::after,[class*=\\" ant-wave\\"] [class^=\\"ant-wave\\"]::after,[class^=\\"ant-wave\\"] [class*=\\" ant-wave\\"]::after,[class*=\\" ant-wave\\"] [class*=\\" ant-wave\\"]::after{box-sizing:border-box;}.ant-wave{position:absolute;background:transparent;pointer-events:none;box-sizing:border-box;color:var(--wave-color, #037003);box-shadow:0 0 0 0 currentcolor;opacity:0.2;}.ant-wave.wave-motion-appear{transition:box-shadow 0.4s cubic-bezier(0.08, 0.82, 0.17, 1),opacity 2s cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-wave.wave-motion-appear-active{box-shadow:0 0 0 6px currentcolor;opacity:0;}[class^=\\"ant-picker\\"],[class*=\\" ant-picker\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-picker\\"]::before,[class*=\\" ant-picker\\"]::before,[class^=\\"ant-picker\\"]::after,[class*=\\" ant-picker\\"]::after{box-sizing:border-box;}[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"],[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"],[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"],[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]{box-sizing:border-box;}[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"]::before,[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"]::before,[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"]::before,[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]::before,[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"]::after,[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"]::after,[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"]::after,[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]::after{box-sizing:border-box;}.ant-picker-calendar{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';background:#141414;}.ant-picker-calendar .ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#141414;border:1px solid rgba(253, 253, 253, 0.12);border-radius:8px;outline:none;}.ant-picker-calendar .ant-picker-panel-focused{border-color:#037003;}.ant-picker-calendar .ant-picker-panel-rtl{direction:rtl;}.ant-picker-calendar .ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-calendar .ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(45deg);}.ant-picker-calendar .ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-calendar .ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-135deg);}.ant-picker-calendar .ant-picker-decade-panel,.ant-picker-calendar .ant-picker-year-panel,.ant-picker-calendar .ant-picker-quarter-panel,.ant-picker-calendar .ant-picker-month-panel,.ant-picker-calendar .ant-picker-week-panel,.ant-picker-calendar .ant-picker-date-panel,.ant-picker-calendar .ant-picker-time-panel{display:flex;flex-direction:column;width:280px;}.ant-picker-calendar .ant-picker-header{display:flex;padding:0 8px;color:rgba(255, 255, 255, 0.85);border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-calendar .ant-picker-header >*{flex:none;}.ant-picker-calendar .ant-picker-header button{padding:0;color:rgba(255, 255, 255, 0.45);line-height:40px;background:transparent;border:0;cursor:pointer;transition:color 0.2s;}.ant-picker-calendar .ant-picker-header >button{min-width:1.6em;font-size:14px;}.ant-picker-calendar .ant-picker-header >button:hover{color:rgba(255, 255, 255, 0.85);}.ant-picker-calendar .ant-picker-header-view{flex:auto;font-weight:600;line-height:40px;}.ant-picker-calendar .ant-picker-header-view button{color:inherit;font-weight:inherit;vertical-align:top;}.ant-picker-calendar .ant-picker-header-view button:not(:first-child){margin-inline-start:8px;}.ant-picker-calendar .ant-picker-header-view button:hover{color:#037003;}.ant-picker-calendar .ant-picker-prev-icon,.ant-picker-calendar .ant-picker-next-icon,.ant-picker-calendar .ant-picker-super-prev-icon,.ant-picker-calendar .ant-picker-super-next-icon{position:relative;display:inline-block;width:7px;height:7px;}.ant-picker-calendar .ant-picker-prev-icon::before,.ant-picker-calendar .ant-picker-next-icon::before,.ant-picker-calendar .ant-picker-super-prev-icon::before,.ant-picker-calendar .ant-picker-super-next-icon::before{position:absolute;top:0;inset-inline-start:0;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-block-start-width:1.5px;border-block-end-width:0;border-inline-start-width:1.5px;border-inline-end-width:0;content:\\"\\";}.ant-picker-calendar .ant-picker-super-prev-icon::after,.ant-picker-calendar .ant-picker-super-next-icon::after{position:absolute;top:4px;inset-inline-start:4px;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-block-start-width:1.5px;border-block-end-width:0;border-inline-start-width:1.5px;border-inline-end-width:0;content:\\"\\";}.ant-picker-calendar .ant-picker-prev-icon,.ant-picker-calendar .ant-picker-super-prev-icon{transform:rotate(-45deg);}.ant-picker-calendar .ant-picker-next-icon,.ant-picker-calendar .ant-picker-super-next-icon{transform:rotate(135deg);}.ant-picker-calendar .ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse;}.ant-picker-calendar .ant-picker-content th,.ant-picker-calendar .ant-picker-content td{position:relative;min-width:24px;font-weight:normal;}.ant-picker-calendar .ant-picker-content th{height:32px;color:rgba(255, 255, 255, 0.85);vertical-align:middle;}.ant-picker-calendar .ant-picker-cell{padding:4px 0;color:rgba(255, 255, 255, 0.25);cursor:pointer;}.ant-picker-calendar .ant-picker-cell-in-view{color:rgba(255, 255, 255, 0.85);}.ant-picker-calendar .ant-picker-cell::before{position:absolute;top:50%;inset-inline-start:0;inset-inline-end:0;z-index:1;height:24px;transform:translateY(-50%);transition:all 0.3s;content:\\"\\";}.ant-picker-calendar .ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:4px;transition:background 0.2s,border 0.2s;}.ant-picker-calendar .ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:rgba(255, 255, 255, 0.08);}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:1;border:1px solid #037003;border-radius:4px;content:\\"\\";}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-in-range::before{background:#111911;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner{color:#fff;background:#037003;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before{background:#111911;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start::before{inset-inline-start:50%;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end::before{inset-inline-end:50%;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #06d306;border-bottom:1px dashed #06d306;transform:translateY(-50%);transition:all 0.3s;content:\\"\\";}.ant-picker-calendar .ant-picker-cell-range-hover-start::after,.ant-picker-calendar .ant-picker-cell-range-hover-end::after,.ant-picker-calendar .ant-picker-cell-range-hover::after{inset-inline-end:0;inset-inline-start:2px;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before{background:#2cf92c;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-start-start-radius:4px;border-end-start-radius:4px;border-start-end-radius:0;border-end-end-radius:0;}.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:4px;border-end-end-radius:4px;}.ant-picker-calendar .ant-picker-cell-range-hover.ant-picker-cell-range-end::after{inset-inline-start:50%;}tr>.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,tr>.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after{inset-inline-start:6px;border-inline-start:1px dashed #06d306;border-start-start-radius:1px;border-end-start-radius:1px;}tr>.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,tr>.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,.ant-picker-calendar .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after{inset-inline-end:6px;border-inline-end:1px dashed #06d306;border-start-end-radius:1px;border-end-end-radius:1px;}.ant-picker-calendar .ant-picker-cell-disabled{color:rgba(255, 255, 255, 0.25);pointer-events:none;}.ant-picker-calendar .ant-picker-cell-disabled .ant-picker-cell-inner{background:transparent;}.ant-picker-calendar .ant-picker-cell-disabled::before{background:rgba(255, 255, 255, 0.08);}.ant-picker-calendar .ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:rgba(255, 255, 255, 0.25);}.ant-picker-calendar .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after,.ant-picker-calendar .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after{position:absolute;top:0;bottom:0;z-index:-1;background:#2cf92c;transition:all 0.3s;content:\\"\\";}.ant-picker-calendar .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after{inset-inline-end:-6px;inset-inline-start:0;}.ant-picker-calendar .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after{inset-inline-end:0;inset-inline-start:-6px;}.ant-picker-calendar .ant-picker-range-hover.ant-picker-range-start::after{inset-inline-end:50%;}.ant-picker-calendar .ant-picker-decade-panel .ant-picker-content,.ant-picker-calendar .ant-picker-year-panel .ant-picker-content,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-content,.ant-picker-calendar .ant-picker-month-panel .ant-picker-content{height:264px;}.ant-picker-calendar .ant-picker-decade-panel .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;}.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-content{height:56px;}.ant-picker-calendar .ant-picker-panel .ant-picker-footer{border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-calendar .ant-picker-footer{width:min-content;min-width:100%;line-height:38px;text-align:center;}.ant-picker-calendar .ant-picker-footer-extra{padding:0 12;line-height:38px;text-align:start;}.ant-picker-calendar .ant-picker-footer-extra:not(:last-child){border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-calendar .ant-picker-now{text-align:start;}.ant-picker-calendar .ant-picker-today-btn{color:#1668dc;}.ant-picker-calendar .ant-picker-today-btn:hover{color:#15417e;}.ant-picker-calendar .ant-picker-today-btn:active{color:#1554ad;}.ant-picker-calendar .ant-picker-today-btn.ant-picker-today-btn-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-picker-calendar .ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px;}.ant-picker-calendar .ant-picker-decade-panel .ant-picker-cell::before{display:none;}.ant-picker-calendar .ant-picker-year-panel .ant-picker-body,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-body,.ant-picker-calendar .ant-picker-month-panel .ant-picker-body{padding:0 8px;}.ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-inner{width:60px;}.ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-range-hover-start::after{inset-inline-start:16px;border-inline-start:1px dashed #06d306;border-start-start-radius:4px;border-bottom-start-radius:4px;border-start-end-radius:0;border-bottom-end-radius:0;}.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-range-hover-start::after{inset-inline-end:16px;border-inline-end:1px dashed #06d306;border-start-start-radius:0;border-bottom-start-radius:0;border-start-end-radius:4px;border-bottom-end-radius:4px;}.ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,.ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-range-hover-end::after{inset-inline-end:16px;border-inline-end:1px dashed #06d306;border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:6px;border-end-end-radius:6px;}.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-calendar .ant-picker-month-panel .ant-picker-cell-range-hover-end::after{inset-inline-start:16px;border-inline-start:1px dashed #06d306;border-start-start-radius:6px;border-end-start-radius:6px;border-start-end-radius:0;border-end-end-radius:0;}.ant-picker-calendar .ant-picker-week-panel .ant-picker-body{padding:8px 12px;}.ant-picker-calendar .ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner{background:transparent!important;}.ant-picker-calendar .ant-picker-week-panel-row td{transition:background 0.2s;}.ant-picker-calendar .ant-picker-week-panel-row td:first-child{border-start-start-radius:4px;border-end-start-radius:4px;}.ant-picker-calendar .ant-picker-week-panel-row td:last-child{border-start-end-radius:4px;border-end-end-radius:4px;}.ant-picker-calendar .ant-picker-week-panel-row:hover td{background:rgba(255, 255, 255, 0.08);}.ant-picker-calendar .ant-picker-week-panel-row-selected td,.ant-picker-calendar .ant-picker-week-panel-row-selected:hover td{background:#037003;}.ant-picker-calendar .ant-picker-week-panel-row-selected td.ant-picker-cell-week,.ant-picker-calendar .ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week{color:#ffffff;}.ant-picker-calendar .ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,.ant-picker-calendar .ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:#fff;}.ant-picker-calendar .ant-picker-week-panel-row-selected td .ant-picker-cell-inner,.ant-picker-calendar .ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner{color:#fff;}.ant-picker-calendar .ant-picker-date-panel .ant-picker-body{padding:8px 12px;}.ant-picker-calendar .ant-picker-date-panel .ant-picker-content{width:252px;}.ant-picker-calendar .ant-picker-date-panel .ant-picker-content th{width:36px;}.ant-picker-calendar .ant-picker-datetime-panel{display:flex;}.ant-picker-calendar .ant-picker-datetime-panel .ant-picker-time-panel{border-inline-start:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-calendar .ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-calendar .ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity 0.3s;}.ant-picker-calendar .ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-calendar .ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:0.3;}.ant-picker-calendar .ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-calendar .ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1;}.ant-picker-calendar .ant-picker-time-panel{width:auto;min-width:auto;direction:ltr;}.ant-picker-calendar .ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px;}.ant-picker-calendar .ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:4px 0;padding:0;overflow-y:hidden;text-align:start;list-style:none;transition:background 0.2s;overflow-x:hidden;}.ant-picker-calendar .ant-picker-time-panel-column::after{display:block;height:196px;content:\\"\\";}.ant-picker-calendar .ant-picker-time-panel-column:not(:first-child){border-inline-start:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-calendar .ant-picker-time-panel-column-active{background:#111911;}.ant-picker-calendar .ant-picker-time-panel-column:hover{overflow-y:auto;}.ant-picker-calendar .ant-picker-time-panel-column >li{margin:0;padding:0;}.ant-picker-calendar .ant-picker-time-panel-column >li.ant-picker-time-panel-cell{margin-inline:4px;}.ant-picker-calendar .ant-picker-time-panel-column >li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:48px;height:28px;margin:0;padding-block:0;padding-inline-end:0;padding-inline-start:14px;color:rgba(255, 255, 255, 0.85);line-height:28px;border-radius:4px;cursor:pointer;transition:background 0.2s;}.ant-picker-calendar .ant-picker-time-panel-column >li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:rgba(255, 255, 255, 0.08);}.ant-picker-calendar .ant-picker-time-panel-column >li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#111911;}.ant-picker-calendar .ant-picker-time-panel-column >li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:rgba(255, 255, 255, 0.25);background:transparent;cursor:not-allowed;}.ant-picker-calendar .ant-picker-datetime-panel .ant-picker-time-panel-column:after{height:204px;}.ant-picker-calendar-rtl{direction:rtl;}.ant-picker-calendar .ant-picker-calendar-header{display:flex;justify-content:flex-end;padding:12px 0;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-year-select{min-width:80px;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-month-select{min-width:70px;margin-inline-start:8px;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-mode-switch{margin-inline-start:8px;}.ant-picker-calendar .ant-picker-panel{background:#141414;border:0;border-top:1px solid rgba(253, 253, 253, 0.12);border-radius:0;}.ant-picker-calendar .ant-picker-panel .ant-picker-month-panel,.ant-picker-calendar .ant-picker-panel .ant-picker-date-panel{width:auto;}.ant-picker-calendar .ant-picker-panel .ant-picker-body{padding:8px 0;}.ant-picker-calendar .ant-picker-panel .ant-picker-content{width:100%;}.ant-picker-calendar-mini{border-radius:8px;}.ant-picker-calendar-mini .ant-picker-calendar-header{padding-inline-end:8px;padding-inline-start:8px;}.ant-picker-calendar-mini .ant-picker-panel{border-radius:0 0 8px 8px;}.ant-picker-calendar-mini .ant-picker-content{height:256px;}.ant-picker-calendar-mini .ant-picker-content th{height:auto;padding:0;line-height:18px;}.ant-picker-calendar-mini .ant-picker-cell::before{pointer-events:none;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-panel{display:block;width:100%;text-align:end;background:#141414;border:0;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th,.ant-picker-calendar.ant-picker-calendar-full .ant-picker-panel .ant-picker-body td{padding:0;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-panel .ant-picker-body th{height:auto;padding-inline-end:12px;padding-bottom:4px;line-height:18px;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell::before{display:none;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell:hover .ant-picker-calendar-date{background:rgba(255, 255, 255, 0.08);}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell .ant-picker-calendar-date-today::before{display:none;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-calendar-date,.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-calendar-date-today{background:#111911;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-selected .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-selected:hover .ant-picker-calendar-date .ant-picker-calendar-date-value,.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-selected .ant-picker-calendar-date-today .ant-picker-calendar-date-value,.ant-picker-calendar.ant-picker-calendar-full .ant-picker-cell-selected:hover .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:#037003;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-calendar-date{display:block;width:auto;height:auto;margin:0 4px;padding:4px 8px 0;border:0;border-top:2px solid rgba(253, 253, 253, 0.12);border-radius:0;transition:background 0.3s;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-calendar-date-value{line-height:24px;transition:color 0.3s;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-calendar-date-content{position:static;width:auto;height:86px;overflow-y:auto;color:rgba(255, 255, 255, 0.85);line-height:1.5714285714285714;text-align:start;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-calendar-date-today{border-color:#037003;}.ant-picker-calendar.ant-picker-calendar-full .ant-picker-calendar-date-today .ant-picker-calendar-date-value{color:rgba(255, 255, 255, 0.85);}@media only screen and (max-width: 480px){.ant-picker-calendar .ant-picker-calendar-header{display:block;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-year-select{width:50%;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-month-select{width:calc(50% - 8px);}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-mode-switch{width:100%;margin-top:8px;margin-inline-start:0;}.ant-picker-calendar .ant-picker-calendar-header .ant-picker-calendar-mode-switch >label{width:50%;text-align:center;}}[class^=\\"ant-radio\\"],[class*=\\" ant-radio\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-radio\\"]::before,[class*=\\" ant-radio\\"]::before,[class^=\\"ant-radio\\"]::after,[class*=\\" ant-radio\\"]::after{box-sizing:border-box;}[class^=\\"ant-radio\\"] [class^=\\"ant-radio\\"],[class*=\\" ant-radio\\"] [class^=\\"ant-radio\\"],[class^=\\"ant-radio\\"] [class*=\\" ant-radio\\"],[class*=\\" ant-radio\\"] [class*=\\" ant-radio\\"]{box-sizing:border-box;}[class^=\\"ant-radio\\"] [class^=\\"ant-radio\\"]::before,[class*=\\" ant-radio\\"] [class^=\\"ant-radio\\"]::before,[class^=\\"ant-radio\\"] [class*=\\" ant-radio\\"]::before,[class*=\\" ant-radio\\"] [class*=\\" ant-radio\\"]::before,[class^=\\"ant-radio\\"] [class^=\\"ant-radio\\"]::after,[class*=\\" ant-radio\\"] [class^=\\"ant-radio\\"]::after,[class^=\\"ant-radio\\"] [class*=\\" ant-radio\\"]::after,[class*=\\" ant-radio\\"] [class*=\\" ant-radio\\"]::after{box-sizing:border-box;}.ant-radio-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:0;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-block;}.ant-radio-group.ant-radio-group-rtl{direction:rtl;}.ant-radio-group .ant-badge .ant-badge-count{z-index:1;}.ant-radio-group >.ant-badge:not(:first-child)>.ant-button-wrapper{border-inline-start:none;}.ant-radio-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-flex;align-items:baseline;margin-inline-start:0;margin-inline-end:8px;cursor:pointer;}.ant-radio-wrapper.ant-radio-wrapper-rtl{direction:rtl;}.ant-radio-wrapper-disabled{cursor:not-allowed;color:rgba(255, 255, 255, 0.25);}.ant-radio-wrapper::after{display:inline-block;width:0;overflow:hidden;content:\\"\\\\a0\\";}.ant-radio-wrapper .ant-radio-checked::after{position:absolute;inset-block-start:0;inset-inline-start:0;width:100%;height:100%;border:1px solid #037003;border-radius:50%;visibility:hidden;animation-name:antRadioEffect;animation-duration:0.3s;animation-timing-function:cubic-bezier(0.645, 0.045, 0.355, 1);animation-fill-mode:both;content:\\"\\";}.ant-radio-wrapper .ant-radio{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;outline:none;cursor:pointer;align-self:center;}.ant-radio-wrapper:hover .ant-radio-wrapper,.ant-radio-wrapper:hover .ant-radio-inner{border-color:#037003;}.ant-radio-wrapper .ant-radio-input:focus-visible+.ant-radio-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-radio-wrapper .ant-radio:hover::after,.ant-radio-wrapper:hover .ant-radio-wrapper::after{visibility:visible;}.ant-radio-wrapper .ant-radio-inner{box-sizing:border-box;position:relative;inset-block-start:0;inset-inline-start:0;display:block;width:16px;height:16px;background-color:#141414;border-color:#424242;border-style:solid;border-width:1px;border-radius:50%;transition:all 0.2s;}.ant-radio-wrapper .ant-radio-inner::after{box-sizing:border-box;position:absolute;inset-block-start:50%;inset-inline-start:50%;display:block;width:16px;height:16px;margin-block-start:-8px;margin-inline-start:-8px;background-color:#fff;border-block-start:0;border-inline-start:0;border-radius:16px;transform:scale(0);opacity:0;transition:all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);content:\\"\\";}.ant-radio-wrapper .ant-radio-input{position:absolute;inset-block-start:0;inset-inline-end:0;inset-block-end:0;inset-inline-start:0;z-index:1;cursor:pointer;opacity:0;}.ant-radio-wrapper .ant-radio-checked .ant-radio-inner{border-color:#037003;background-color:#037003;}.ant-radio-wrapper .ant-radio-checked .ant-radio-inner::after{transform:scale(0.375);opacity:1;transition:all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-radio-wrapper .ant-radio-disabled{cursor:not-allowed;}.ant-radio-wrapper .ant-radio-disabled .ant-radio-inner{background-color:rgba(255, 255, 255, 0.08);border-color:#424242;cursor:not-allowed;}.ant-radio-wrapper .ant-radio-disabled .ant-radio-inner::after{background-color:rgba(255, 255, 255, 0.25);}.ant-radio-wrapper .ant-radio-disabled .ant-radio-input{cursor:not-allowed;}.ant-radio-wrapper .ant-radio-disabled .ant-radio-disabled+span{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-radio-wrapper .ant-radio-disabled.ant-radio-checked .ant-radio-inner::after{transform:scale(0.5);}.ant-radio-wrapper span.ant-radio+*{padding-inline-start:8px;padding-inline-end:8px;}.ant-radio-button-wrapper{position:relative;display:inline-block;height:32px;margin:0;padding-inline:15px;padding-block:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:30px;background:#141414;border:1px solid #424242;border-block-start-width:1.02px;border-inline-start-width:0;border-inline-end-width:1px;cursor:pointer;transition:color 0.2s,background 0.2s,border-color 0.2s,box-shadow 0.2s;}.ant-radio-button-wrapper a{color:rgba(255, 255, 255, 0.85);}.ant-radio-button-wrapper >.ant-radio-button{position:absolute;inset-block-start:0;inset-inline-start:0;z-index:-1;width:100%;height:100%;}.ant-radio-button-wrapper:not(:first-child)::before{position:absolute;inset-block-start:-1px;inset-inline-start:-1px;display:block;box-sizing:content-box;width:1px;height:100%;padding-block:1px;padding-inline:0;background-color:#424242;transition:background-color 0.3s;content:\\"\\";}.ant-radio-button-wrapper:first-child{border-inline-start:1px solid #424242;border-start-start-radius:6px;border-end-start-radius:6px;}.ant-radio-button-wrapper:last-child{border-start-end-radius:6px;border-end-end-radius:6px;}.ant-radio-button-wrapper:first-child:last-child{border-radius:6px;}.ant-radio-group-large .ant-radio-button-wrapper{height:40px;font-size:16px;line-height:38px;}.ant-radio-group-large .ant-radio-button-wrapper:first-child{border-start-start-radius:8px;border-end-start-radius:8px;}.ant-radio-group-large .ant-radio-button-wrapper:last-child{border-start-end-radius:8px;border-end-end-radius:8px;}.ant-radio-group-small .ant-radio-button-wrapper{height:24px;padding-inline:7px;padding-block:0;line-height:22px;}.ant-radio-group-small .ant-radio-button-wrapper:first-child{border-start-start-radius:4px;border-end-start-radius:4px;}.ant-radio-group-small .ant-radio-button-wrapper:last-child{border-start-end-radius:4px;border-end-end-radius:4px;}.ant-radio-button-wrapper:hover{position:relative;color:#037003;}.ant-radio-button-wrapper:has(:focus-visible){outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-radio-button-wrapper .ant-radio-inner,.ant-radio-button-wrapper input[type='checkbox'],.ant-radio-button-wrapper input[type='radio']{width:0;height:0;opacity:0;pointer-events:none;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){z-index:1;color:#037003;background:#141414;border-color:#037003;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled)::before{background-color:#037003;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):first-child{border-color:#037003;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#198016;border-color:#198016;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover::before{background-color:#198016;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#075a07;border-color:#075a07;}.ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active::before{background-color:#075a07;}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled){color:#fff;background:#037003;border-color:#037003;}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover{color:#fff;background:#198016;border-color:#198016;}.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active{color:#fff;background:#075a07;border-color:#075a07;}.ant-radio-button-wrapper-disabled{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;cursor:not-allowed;}.ant-radio-button-wrapper-disabled:first-child,.ant-radio-button-wrapper-disabled:hover{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.18);border-color:#424242;box-shadow:none;}@keyframes antRadioEffect{0%{transform:scale(1);opacity:0.5;}100%{transform:scale(1.6);opacity:0;}}[class^=\\"ant-card\\"],[class*=\\" ant-card\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-card\\"]::before,[class*=\\" ant-card\\"]::before,[class^=\\"ant-card\\"]::after,[class*=\\" ant-card\\"]::after{box-sizing:border-box;}[class^=\\"ant-card\\"] [class^=\\"ant-card\\"],[class*=\\" ant-card\\"] [class^=\\"ant-card\\"],[class^=\\"ant-card\\"] [class*=\\" ant-card\\"],[class*=\\" ant-card\\"] [class*=\\" ant-card\\"]{box-sizing:border-box;}[class^=\\"ant-card\\"] [class^=\\"ant-card\\"]::before,[class*=\\" ant-card\\"] [class^=\\"ant-card\\"]::before,[class^=\\"ant-card\\"] [class*=\\" ant-card\\"]::before,[class*=\\" ant-card\\"] [class*=\\" ant-card\\"]::before,[class^=\\"ant-card\\"] [class^=\\"ant-card\\"]::after,[class*=\\" ant-card\\"] [class^=\\"ant-card\\"]::after,[class^=\\"ant-card\\"] [class*=\\" ant-card\\"]::after,[class*=\\" ant-card\\"] [class*=\\" ant-card\\"]::after{box-sizing:border-box;}.ant-card{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;background:#141414;border-radius:8px;}.ant-card:not(.ant-card-bordered){box-shadow:0 1px 2px 0 rgba(0, 0, 0, 0.03),0 1px 6px -1px rgba(0, 0, 0, 0.02),0 2px 4px 0 rgba(0, 0, 0, 0.02);}.ant-card .ant-card-head{display:flex;justify-content:center;flex-direction:column;min-height:56px;margin-bottom:-1px;padding:0 24px;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;background:transparent;border-bottom:1px solid #303030;border-radius:8px 8px 0 0;}.ant-card .ant-card-head::before{display:table;content:\\"\\";}.ant-card .ant-card-head::after{display:table;clear:both;content:\\"\\";}.ant-card .ant-card-head-wrapper{width:100%;display:flex;align-items:center;}.ant-card .ant-card-head-title{display:inline-block;flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-card .ant-card-head-title >.ant-card-typography,.ant-card .ant-card-head-title >.ant-card-typography-edit-content{inset-inline-start:0;margin-top:0;margin-bottom:0;}.ant-card .ant-card-head .ant-tabs-top{clear:both;margin-bottom:-17px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;}.ant-card .ant-card-head .ant-tabs-top-bar{border-bottom:1px solid #303030;}.ant-card .ant-card-extra{margin-inline-start:auto;font-weight:normal;font-size:14px;}.ant-card .ant-card-body{padding:24px;border-radius:0 0 8px 8px;}.ant-card .ant-card-body::before{display:table;content:\\"\\";}.ant-card .ant-card-body::after{display:table;clear:both;content:\\"\\";}.ant-card .ant-card-grid{width:33.33%;padding:24px;border:0;border-radius:0;box-shadow:1px 0 0 0 #303030,0 1px 0 0 #303030,1px 1px 0 0 #303030,1px 0 0 0 #303030 inset,0 1px 0 0 #303030 inset;transition:all 0.2s;}.ant-card .ant-card-grid-hoverable:hover{position:relative;z-index:1;box-shadow:0 1px 2px -2px rgba(0, 0, 0, 0.16),0 3px 6px 0 rgba(0, 0, 0, 0.12),0 5px 12px 4px rgba(0, 0, 0, 0.09);}.ant-card .ant-card-cover >*{display:block;width:100%;}.ant-card .ant-card-cover img{border-radius:8px 8px 0 0;}.ant-card .ant-card-actions{margin:0;padding:0;list-style:none;background:#141414;border-top:1px solid #303030;display:flex;border-radius:0 0 8px 8px;}.ant-card .ant-card-actions::before{display:table;content:\\"\\";}.ant-card .ant-card-actions::after{display:table;clear:both;content:\\"\\";}.ant-card .ant-card-actions>li{margin:12px 0;color:rgba(255, 255, 255, 0.45);text-align:center;}.ant-card .ant-card-actions>li >span{position:relative;display:block;min-width:28px;font-size:14px;line-height:1.5714285714285714;cursor:pointer;}.ant-card .ant-card-actions>li >span:hover{color:#037003;transition:color 0.2s;}.ant-card .ant-card-actions>li >span a:not(.ant-card-btn),.ant-card .ant-card-actions>li >span >.anticon{display:inline-block;width:100%;color:rgba(255, 255, 255, 0.45);line-height:22px;transition:color 0.2s;}.ant-card .ant-card-actions>li >span a:not(.ant-card-btn):hover,.ant-card .ant-card-actions>li >span >.anticon:hover{color:#037003;}.ant-card .ant-card-actions>li >span >.anticon{font-size:14px;line-height:22px;}.ant-card .ant-card-actions>li:not(:last-child){border-inline-end:1px solid #303030;}.ant-card .ant-card-meta{margin:-4px 0;display:flex;}.ant-card .ant-card-meta::before{display:table;content:\\"\\";}.ant-card .ant-card-meta::after{display:table;clear:both;content:\\"\\";}.ant-card .ant-card-meta-avatar{padding-inline-end:16px;}.ant-card .ant-card-meta-detail{overflow:hidden;flex:1;}.ant-card .ant-card-meta-detail >div:not(:last-child){margin-bottom:8px;}.ant-card .ant-card-meta-title{color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-card .ant-card-meta-description{color:rgba(255, 255, 255, 0.45);}.ant-card-bordered{border:1px solid #303030;}.ant-card-bordered .ant-card-cover{margin-top:-1px;margin-inline-start:-1px;margin-inline-end:-1px;}.ant-card-hoverable{cursor:pointer;transition:box-shadow 0.2s,border-color 0.2s;}.ant-card-hoverable:hover{border-color:transparent;box-shadow:0 1px 2px -2px rgba(0, 0, 0, 0.16),0 3px 6px 0 rgba(0, 0, 0, 0.12),0 5px 12px 4px rgba(0, 0, 0, 0.09);}.ant-card-contain-grid .ant-card-body{display:flex;flex-wrap:wrap;}.ant-card-contain-grid:not(.ant-card-loading) .ant-card-body{margin-block-start:-1px;margin-inline-start:-1px;padding:0;}.ant-card-contain-tabs >.ant-card-head .ant-card-head-title,.ant-card-contain-tabs >.ant-card-head .ant-card-extra{padding-top:16px;}.ant-card-type-inner .ant-card-head{padding:0 24px;background:rgba(255, 255, 255, 0.04);}.ant-card-type-inner .ant-card-head-title{font-size:14px;}.ant-card-type-inner .ant-card-body{padding:16px 24px;}.ant-card-loading{overflow:hidden;}.ant-card-loading .ant-card-body{user-select:none;}.ant-card-rtl{direction:rtl;}.ant-card-small >.ant-card-head{min-height:38px;padding:0 12px;font-size:14px;}.ant-card-small >.ant-card-head >.ant-card-head-wrapper >.ant-card-extra{font-size:14px;}.ant-card-small >.ant-card-body{padding:12px;}.ant-card-small.ant-card-contain-tabs >.ant-card-head .ant-card-head-title,.ant-card-small.ant-card-contain-tabs >.ant-card-head .ant-card-extra{min-height:38px;padding-top:0;display:flex;align-items:center;}[class^=\\"ant-collapse\\"],[class*=\\" ant-collapse\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-collapse\\"]::before,[class*=\\" ant-collapse\\"]::before,[class^=\\"ant-collapse\\"]::after,[class*=\\" ant-collapse\\"]::after{box-sizing:border-box;}[class^=\\"ant-collapse\\"] [class^=\\"ant-collapse\\"],[class*=\\" ant-collapse\\"] [class^=\\"ant-collapse\\"],[class^=\\"ant-collapse\\"] [class*=\\" ant-collapse\\"],[class*=\\" ant-collapse\\"] [class*=\\" ant-collapse\\"]{box-sizing:border-box;}[class^=\\"ant-collapse\\"] [class^=\\"ant-collapse\\"]::before,[class*=\\" ant-collapse\\"] [class^=\\"ant-collapse\\"]::before,[class^=\\"ant-collapse\\"] [class*=\\" ant-collapse\\"]::before,[class*=\\" ant-collapse\\"] [class*=\\" ant-collapse\\"]::before,[class^=\\"ant-collapse\\"] [class^=\\"ant-collapse\\"]::after,[class*=\\" ant-collapse\\"] [class^=\\"ant-collapse\\"]::after,[class^=\\"ant-collapse\\"] [class*=\\" ant-collapse\\"]::after,[class*=\\" ant-collapse\\"] [class*=\\" ant-collapse\\"]::after{box-sizing:border-box;}.ant-collapse{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';background-color:rgba(255, 255, 255, 0.04);border:1px solid #424242;border-bottom:0;border-radius:8px;}.ant-collapse-rtl{direction:rtl;}.ant-collapse>.ant-collapse-item{border-bottom:1px solid #424242;}.ant-collapse>.ant-collapse-item:last-child,.ant-collapse>.ant-collapse-item:last-child>.ant-collapse-header{border-radius:0 0 8px 8px;}.ant-collapse>.ant-collapse-item >.ant-collapse-header{position:relative;display:flex;flex-wrap:nowrap;align-items:flex-start;padding:12px 16px;color:rgba(255, 255, 255, 0.85);line-height:1.5714285714285714;cursor:pointer;transition:all 0.3s,visibility 0s;}.ant-collapse>.ant-collapse-item >.ant-collapse-header >.ant-collapse-header-text{flex:auto;}.ant-collapse>.ant-collapse-item >.ant-collapse-header:focus{outline:none;}.ant-collapse>.ant-collapse-item >.ant-collapse-header .ant-collapse-expand-icon{height:22px;display:flex;align-items:center;padding-inline-end:12px;}.ant-collapse>.ant-collapse-item >.ant-collapse-header .ant-collapse-arrow{display:inline-flex;align-items:center;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:12px;}.ant-collapse>.ant-collapse-item >.ant-collapse-header .ant-collapse-arrow >*{line-height:1;}.ant-collapse>.ant-collapse-item >.ant-collapse-header .ant-collapse-arrow svg{transition:transform 0.3s;}.ant-collapse>.ant-collapse-item >.ant-collapse-header .ant-collapse-header-text{margin-inline-end:auto;}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only{cursor:default;}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-header-text{flex:none;cursor:pointer;}.ant-collapse>.ant-collapse-item .ant-collapse-header-collapsible-only .ant-collapse-expand-icon{cursor:pointer;}.ant-collapse>.ant-collapse-item .ant-collapse-icon-collapsible-only{cursor:default;}.ant-collapse>.ant-collapse-item .ant-collapse-icon-collapsible-only .ant-collapse-expand-icon{cursor:pointer;}.ant-collapse>.ant-collapse-item.ant-collapse-no-arrow >.ant-collapse-header{padding-inline-start:12px;}.ant-collapse .ant-collapse-content{color:rgba(255, 255, 255, 0.85);background-color:#141414;border-top:1px solid #424242;}.ant-collapse .ant-collapse-content>.ant-collapse-content-box{padding:16px 16px;}.ant-collapse .ant-collapse-content-hidden{display:none;}.ant-collapse .ant-collapse-item:last-child >.ant-collapse-content{border-radius:0 0 8px 8px;}.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header,.ant-collapse .ant-collapse-item-disabled>.ant-collapse-header>.arrow{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-collapse.ant-collapse-icon-position-end>.ant-collapse-item >.ant-collapse-header .ant-collapse-expand-icon{order:1;padding-inline-end:0;padding-inline-start:12px;}.ant-collapse-borderless{background-color:rgba(255, 255, 255, 0.04);border:0;}.ant-collapse-borderless >.ant-collapse-item{border-bottom:1px solid #424242;}.ant-collapse-borderless >.ant-collapse-item:last-child,.ant-collapse-borderless >.ant-collapse-item:last-child .ant-collapse-header{border-radius:0;}.ant-collapse-borderless >.ant-collapse-item:last-child{border-bottom:0;}.ant-collapse-borderless >.ant-collapse-item>.ant-collapse-content{background-color:transparent;border-top:0;}.ant-collapse-borderless >.ant-collapse-item>.ant-collapse-content>.ant-collapse-content-box{padding-top:4px;}.ant-collapse-ghost{background-color:transparent;border:0;}.ant-collapse-ghost >.ant-collapse-item{border-bottom:0;}.ant-collapse-ghost >.ant-collapse-item >.ant-collapse-content{background-color:transparent;border:0;}.ant-collapse-ghost >.ant-collapse-item >.ant-collapse-content >.ant-collapse-content-box{padding-block:12px;}.ant-collapse-rtl >.ant-collapse-item>.ant-collapse-header .ant-collapse-arrow svg{transform:rotate(180deg);}.ant-collapse .ant-motion-collapse-legacy{overflow:hidden;}.ant-collapse .ant-motion-collapse-legacy-active{transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-collapse .ant-motion-collapse{overflow:hidden;transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}[class^=\\"ant-carousel\\"],[class*=\\" ant-carousel\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-carousel\\"]::before,[class*=\\" ant-carousel\\"]::before,[class^=\\"ant-carousel\\"]::after,[class*=\\" ant-carousel\\"]::after{box-sizing:border-box;}[class^=\\"ant-carousel\\"] [class^=\\"ant-carousel\\"],[class*=\\" ant-carousel\\"] [class^=\\"ant-carousel\\"],[class^=\\"ant-carousel\\"] [class*=\\" ant-carousel\\"],[class*=\\" ant-carousel\\"] [class*=\\" ant-carousel\\"]{box-sizing:border-box;}[class^=\\"ant-carousel\\"] [class^=\\"ant-carousel\\"]::before,[class*=\\" ant-carousel\\"] [class^=\\"ant-carousel\\"]::before,[class^=\\"ant-carousel\\"] [class*=\\" ant-carousel\\"]::before,[class*=\\" ant-carousel\\"] [class*=\\" ant-carousel\\"]::before,[class^=\\"ant-carousel\\"] [class^=\\"ant-carousel\\"]::after,[class*=\\" ant-carousel\\"] [class^=\\"ant-carousel\\"]::after,[class^=\\"ant-carousel\\"] [class*=\\" ant-carousel\\"]::after,[class*=\\" ant-carousel\\"] [class*=\\" ant-carousel\\"]::after{box-sizing:border-box;}.ant-carousel{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-carousel .slick-slider{position:relative;display:block;box-sizing:border-box;touch-action:pan-y;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;}.ant-carousel .slick-slider .slick-track,.ant-carousel .slick-slider .slick-list{transform:translate3d(0, 0, 0);touch-action:pan-y;}.ant-carousel .slick-list{position:relative;display:block;margin:0;padding:0;overflow:hidden;}.ant-carousel .slick-list:focus{outline:none;}.ant-carousel .slick-list.dragging{cursor:pointer;}.ant-carousel .slick-list .slick-slide{pointer-events:none;}.ant-carousel .slick-list .slick-slide input.ant-radio-input,.ant-carousel .slick-list .slick-slide input.ant-checkbox-input{visibility:hidden;}.ant-carousel .slick-list .slick-slide.slick-active{pointer-events:auto;}.ant-carousel .slick-list .slick-slide.slick-active input.ant-radio-input,.ant-carousel .slick-list .slick-slide.slick-active input.ant-checkbox-input{visibility:visible;}.ant-carousel .slick-list .slick-slide >div>div{vertical-align:bottom;}.ant-carousel .slick-track{position:relative;top:0;inset-inline-start:0;display:block;}.ant-carousel .slick-track::before,.ant-carousel .slick-track::after{display:table;content:\\"\\";}.ant-carousel .slick-track::after{clear:both;}.ant-carousel .slick-slide{display:none;float:left;height:100%;min-height:1px;}.ant-carousel .slick-slide img{display:block;}.ant-carousel .slick-slide.dragging img{pointer-events:none;}.ant-carousel .slick-initialized .slick-slide{display:block;}.ant-carousel .slick-vertical .slick-slide{display:block;height:auto;}.ant-carousel .slick-arrow.slick-hidden{display:none;}.ant-carousel .slick-prev,.ant-carousel .slick-next{position:absolute;top:50%;display:block;width:20px;height:20px;margin-top:-10px;padding:0;color:transparent;font-size:0;line-height:0;background:transparent;border:0;outline:none;cursor:pointer;}.ant-carousel .slick-prev:hover,.ant-carousel .slick-next:hover,.ant-carousel .slick-prev:focus,.ant-carousel .slick-next:focus{color:transparent;background:transparent;outline:none;}.ant-carousel .slick-prev:hover::before,.ant-carousel .slick-next:hover::before,.ant-carousel .slick-prev:focus::before,.ant-carousel .slick-next:focus::before{opacity:1;}.ant-carousel .slick-prev.slick-disabled::before,.ant-carousel .slick-next.slick-disabled::before{opacity:0.25;}.ant-carousel .slick-prev{inset-inline-start:-25px;}.ant-carousel .slick-prev::before{content:\\"←\\";}.ant-carousel .slick-next{inset-inline-end:-25px;}.ant-carousel .slick-next::before{content:\\"→\\";}.ant-carousel .slick-dots{position:absolute;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:15;display:flex!important;justify-content:center;padding-inline-start:0;list-style:none;}.ant-carousel .slick-dots-bottom{bottom:12px;}.ant-carousel .slick-dots-top{top:12px;bottom:auto;}.ant-carousel .slick-dots li{position:relative;display:inline-block;flex:0 1 auto;box-sizing:content-box;width:16px;height:3px;margin-inline:4px;padding:0;text-align:center;text-indent:-999px;vertical-align:top;transition:all 0.3s;}.ant-carousel .slick-dots li button{position:relative;display:block;width:100%;height:3px;padding:0;color:transparent;font-size:0;background:#141414;border:0;border-radius:1px;outline:none;cursor:pointer;opacity:0.3;transition:all 0.3s;}.ant-carousel .slick-dots li button:hover,.ant-carousel .slick-dots li button:focus{opacity:0.75;}.ant-carousel .slick-dots li button::after{position:absolute;inset:-4px;content:\\"\\";}.ant-carousel .slick-dots li.slick-active{width:24px;}.ant-carousel .slick-dots li.slick-active button{background:#141414;opacity:1;}.ant-carousel .slick-dots li.slick-active:hover,.ant-carousel .slick-dots li.slick-active:focus{opacity:1;}.ant-carousel-vertical .slick-dots{top:50%;bottom:auto;flex-direction:column;width:3px;height:auto;margin:0;transform:translateY(-50%);}.ant-carousel-vertical .slick-dots-left{inset-inline-end:auto;inset-inline-start:12px;}.ant-carousel-vertical .slick-dots-right{inset-inline-end:12px;inset-inline-start:auto;}.ant-carousel-vertical .slick-dots li{width:3px;height:16px;margin:4px 0;vertical-align:baseline;}.ant-carousel-vertical .slick-dots li button{width:3px;height:16px;}.ant-carousel-vertical .slick-dots li.slick-active{width:3px;height:16px;}.ant-carousel-vertical .slick-dots li.slick-active button{width:3px;height:16px;}.ant-carousel-rtl{direction:rtl;}.ant-carousel-rtl.ant-carousel-rtl .slick-dots{flex-direction:row-reverse;}.ant-carousel-rtl.ant-carousel-vertical .slick-dots{flex-direction:column;}[class^=\\"ant-cascader\\"],[class*=\\" ant-cascader\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-cascader\\"]::before,[class*=\\" ant-cascader\\"]::before,[class^=\\"ant-cascader\\"]::after,[class*=\\" ant-cascader\\"]::after{box-sizing:border-box;}[class^=\\"ant-cascader\\"] [class^=\\"ant-cascader\\"],[class*=\\" ant-cascader\\"] [class^=\\"ant-cascader\\"],[class^=\\"ant-cascader\\"] [class*=\\" ant-cascader\\"],[class*=\\" ant-cascader\\"] [class*=\\" ant-cascader\\"]{box-sizing:border-box;}[class^=\\"ant-cascader\\"] [class^=\\"ant-cascader\\"]::before,[class*=\\" ant-cascader\\"] [class^=\\"ant-cascader\\"]::before,[class^=\\"ant-cascader\\"] [class*=\\" ant-cascader\\"]::before,[class*=\\" ant-cascader\\"] [class*=\\" ant-cascader\\"]::before,[class^=\\"ant-cascader\\"] [class^=\\"ant-cascader\\"]::after,[class*=\\" ant-cascader\\"] [class^=\\"ant-cascader\\"]::after,[class^=\\"ant-cascader\\"] [class*=\\" ant-cascader\\"]::after,[class*=\\" ant-cascader\\"] [class*=\\" ant-cascader\\"]::after{box-sizing:border-box;}.ant-cascader{width:184px;}.ant-cascader-dropdown .ant-cascader-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;flex-wrap:wrap;column-gap:8px;}.ant-cascader-dropdown .ant-cascader-checkbox-group >.ant-row{flex:1;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;align-items:baseline;cursor:pointer;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:'\\\\a0';}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper+.ant-cascader-checkbox-wrapper{margin-inline-start:0;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper.ant-cascader-checkbox-wrapper-in-form-item input[type=\\"checkbox\\"]{width:14px;height:14px;}.ant-cascader-dropdown .ant-cascader-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;white-space:nowrap;cursor:pointer;align-self:center;}.ant-cascader-dropdown .ant-cascader-checkbox .ant-cascader-checkbox-input{position:absolute;inset:0;z-index:1;cursor:pointer;opacity:0;margin:0;}.ant-cascader-dropdown .ant-cascader-checkbox .ant-cascader-checkbox-input:focus-visible+.ant-cascader-checkbox-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-cascader-dropdown .ant-cascader-checkbox .ant-cascader-checkbox-inner{box-sizing:border-box;position:relative;top:0;inset-inline-start:0;display:block;width:16px;height:16px;direction:ltr;background-color:#141414;border:1px solid #424242;border-radius:4px;border-collapse:separate;transition:all 0.3s;}.ant-cascader-dropdown .ant-cascader-checkbox .ant-cascader-checkbox-inner:after{box-sizing:border-box;position:absolute;top:50%;inset-inline-start:21.5%;display:table;width:5.7142857142857135px;height:9.142857142857142px;border:2px solid #fff;border-top:0;border-inline-start:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;content:\\"\\";transition:all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6),opacity 0.1s;}.ant-cascader-dropdown .ant-cascader-checkbox+span{padding-inline-start:8px;padding-inline-end:8px;}.ant-cascader-dropdown .ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner:after{top:50%;inset-inline-start:50%;width:8px;height:8px;background-color:#037003;border:0;transform:translate(-50%, -50%) scale(1);opacity:1;content:\\"\\";}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper:hover .ant-cascader-checkbox:after{visibility:visible;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper:not(.ant-cascader-checkbox-wrapper-disabled):hover .ant-cascader-checkbox-inner,.ant-cascader-dropdown .ant-cascader-checkbox:not(.ant-cascader-checkbox-disabled):hover .ant-cascader-checkbox-inner{border-color:#037003;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper:not(.ant-cascader-checkbox-wrapper-disabled):hover .ant-cascader-checkbox-checked:not(.ant-cascader-checkbox-disabled) .ant-cascader-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper:not(.ant-cascader-checkbox-wrapper-disabled):hover .ant-cascader-checkbox-checked:not(.ant-cascader-checkbox-disabled):after{border-color:#198016;}.ant-cascader-dropdown .ant-cascader-checkbox-checked .ant-cascader-checkbox-inner{background-color:#037003;border-color:#037003;}.ant-cascader-dropdown .ant-cascader-checkbox-checked .ant-cascader-checkbox-inner:after{opacity:1;transform:rotate(45deg) scale(1) translate(-50%,-50%);transition:all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;}.ant-cascader-dropdown .ant-cascader-checkbox-checked:after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-radius:4px;visibility:hidden;border:2px solid #037003;animation-name:antCheckboxEffect;animation-duration:0.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards;content:\\"\\";transition:all 0.3s;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper-checked:not(.ant-cascader-checkbox-wrapper-disabled):hover .ant-cascader-checkbox-inner,.ant-cascader-dropdown .ant-cascader-checkbox-checked:not(.ant-cascader-checkbox-disabled):hover .ant-cascader-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper-checked:not(.ant-cascader-checkbox-wrapper-disabled):hover .ant-cascader-checkbox:after,.ant-cascader-dropdown .ant-cascader-checkbox-checked:not(.ant-cascader-checkbox-disabled):hover .ant-cascader-checkbox:after{border-color:#198016;}.ant-cascader-dropdown .ant-cascader-checkbox-wrapper-disabled{cursor:not-allowed;}.ant-cascader-dropdown .ant-cascader-checkbox-disabled,.ant-cascader-dropdown .ant-cascader-checkbox-disabled .ant-cascader-checkbox-input{cursor:not-allowed;pointer-events:none;}.ant-cascader-dropdown .ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner{background:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-cascader-dropdown .ant-cascader-checkbox-disabled .ant-cascader-checkbox-inner:after{border-color:rgba(255, 255, 255, 0.25);}.ant-cascader-dropdown .ant-cascader-checkbox-disabled:after{display:none;}.ant-cascader-dropdown .ant-cascader-checkbox-disabled+span{color:rgba(255, 255, 255, 0.25);}.ant-cascader-dropdown .ant-cascader-checkbox-disabled.ant-cascader-checkbox-indeterminate .ant-cascader-checkbox-inner::after{background:rgba(255, 255, 255, 0.25);}.ant-cascader-dropdown.ant-select-dropdown{padding:0;}.ant-cascader-dropdown .ant-cascader-checkbox{top:0;margin-inline-end:8px;}.ant-cascader-dropdown .ant-cascader-menus{display:flex;flex-wrap:nowrap;align-items:flex-start;}.ant-cascader-dropdown .ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu{width:100%;height:auto;}.ant-cascader-dropdown .ant-cascader-menus.ant-cascader-menu-empty .ant-cascader-menu .ant-cascader-menu-item{color:rgba(255, 255, 255, 0.25);}.ant-cascader-dropdown .ant-cascader-menu{flex-grow:1;min-width:111px;height:180px;margin:0;padding:4px;overflow:auto;vertical-align:top;list-style:none;-ms-overflow-style:-ms-autohiding-scrollbar;}.ant-cascader-dropdown .ant-cascader-menu:not(:last-child){border-inline-end:1px solid rgba(253, 253, 253, 0.12);}.ant-cascader-dropdown .ant-cascader-menu-item{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;flex-wrap:nowrap;align-items:center;padding:5px 12px;line-height:1.5714285714285714;cursor:pointer;transition:all 0.2s;border-radius:4px;}.ant-cascader-dropdown .ant-cascader-menu-item:hover{background:rgba(255, 255, 255, 0.08);}.ant-cascader-dropdown .ant-cascader-menu-item-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-cascader-dropdown .ant-cascader-menu-item-disabled:hover{background:transparent;}.ant-cascader-dropdown .ant-cascader-menu-item-disabled.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-dropdown .ant-cascader-menu-item-disabled .ant-cascader-menu-item-loading-icon{color:rgba(255, 255, 255, 0.25);}.ant-cascader-dropdown .ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled),.ant-cascader-dropdown .ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover{font-weight:600;background-color:#111911;}.ant-cascader-dropdown .ant-cascader-menu-item-content{flex:auto;}.ant-cascader-dropdown .ant-cascader-menu-item.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon,.ant-cascader-dropdown .ant-cascader-menu-item .ant-cascader-menu-item-loading-icon{margin-inline-start:4px;color:rgba(255, 255, 255, 0.45);font-size:12px;}.ant-cascader-dropdown .ant-cascader-menu-item-keyword{color:#dc4446;}.ant-cascader-dropdown-rtl{direction:rtl;}.ant-cascader-compact-item:not(.ant-cascader-compact-last-item){margin-inline-end:-1px;}.ant-cascader-compact-item:hover,.ant-cascader-compact-item:focus,.ant-cascader-compact-item:active{z-index:2;}.ant-cascader-compact-item[disabled]{z-index:0;}.ant-cascader-compact-item:not(.ant-cascader-compact-first-item):not(.ant-cascader-compact-last-item){border-radius:0;}.ant-cascader-compact-item:not(.ant-cascader-compact-last-item).ant-cascader-compact-first-item,.ant-cascader-compact-item:not(.ant-cascader-compact-last-item).ant-cascader-compact-first-item.ant-cascader-sm,.ant-cascader-compact-item:not(.ant-cascader-compact-last-item).ant-cascader-compact-first-item.ant-cascader-lg{border-start-end-radius:0;border-end-end-radius:0;}.ant-cascader-compact-item:not(.ant-cascader-compact-first-item).ant-cascader-compact-last-item,.ant-cascader-compact-item:not(.ant-cascader-compact-first-item).ant-cascader-compact-last-item.ant-cascader-sm,.ant-cascader-compact-item:not(.ant-cascader-compact-first-item).ant-cascader-compact-last-item.ant-cascader-lg{border-start-start-radius:0;border-end-start-radius:0;}@keyframes antCheckboxEffect{0%{transform:scale(1);opacity:0.5;}100%{transform:scale(1.6);opacity:0;}}[class^=\\"ant-checkbox\\"],[class*=\\" ant-checkbox\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-checkbox\\"]::before,[class*=\\" ant-checkbox\\"]::before,[class^=\\"ant-checkbox\\"]::after,[class*=\\" ant-checkbox\\"]::after{box-sizing:border-box;}[class^=\\"ant-checkbox\\"] [class^=\\"ant-checkbox\\"],[class*=\\" ant-checkbox\\"] [class^=\\"ant-checkbox\\"],[class^=\\"ant-checkbox\\"] [class*=\\" ant-checkbox\\"],[class*=\\" ant-checkbox\\"] [class*=\\" ant-checkbox\\"]{box-sizing:border-box;}[class^=\\"ant-checkbox\\"] [class^=\\"ant-checkbox\\"]::before,[class*=\\" ant-checkbox\\"] [class^=\\"ant-checkbox\\"]::before,[class^=\\"ant-checkbox\\"] [class*=\\" ant-checkbox\\"]::before,[class*=\\" ant-checkbox\\"] [class*=\\" ant-checkbox\\"]::before,[class^=\\"ant-checkbox\\"] [class^=\\"ant-checkbox\\"]::after,[class*=\\" ant-checkbox\\"] [class^=\\"ant-checkbox\\"]::after,[class^=\\"ant-checkbox\\"] [class*=\\" ant-checkbox\\"]::after,[class*=\\" ant-checkbox\\"] [class*=\\" ant-checkbox\\"]::after{box-sizing:border-box;}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;flex-wrap:wrap;column-gap:8px;}.ant-checkbox-group >.ant-row{flex:1;}.ant-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;align-items:baseline;cursor:pointer;}.ant-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:'\\\\a0';}.ant-checkbox-wrapper+.ant-checkbox-wrapper{margin-inline-start:0;}.ant-checkbox-wrapper.ant-checkbox-wrapper-in-form-item input[type=\\"checkbox\\"]{width:14px;height:14px;}.ant-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;white-space:nowrap;cursor:pointer;align-self:center;}.ant-checkbox .ant-checkbox-input{position:absolute;inset:0;z-index:1;cursor:pointer;opacity:0;margin:0;}.ant-checkbox .ant-checkbox-input:focus-visible+.ant-checkbox-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-checkbox .ant-checkbox-inner{box-sizing:border-box;position:relative;top:0;inset-inline-start:0;display:block;width:16px;height:16px;direction:ltr;background-color:#141414;border:1px solid #424242;border-radius:4px;border-collapse:separate;transition:all 0.3s;}.ant-checkbox .ant-checkbox-inner:after{box-sizing:border-box;position:absolute;top:50%;inset-inline-start:21.5%;display:table;width:5.7142857142857135px;height:9.142857142857142px;border:2px solid #fff;border-top:0;border-inline-start:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;content:\\"\\";transition:all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6),opacity 0.1s;}.ant-checkbox+span{padding-inline-start:8px;padding-inline-end:8px;}.ant-checkbox-indeterminate .ant-checkbox-inner:after{top:50%;inset-inline-start:50%;width:8px;height:8px;background-color:#037003;border:0;transform:translate(-50%, -50%) scale(1);opacity:1;content:\\"\\";}.ant-checkbox-wrapper:hover .ant-checkbox:after{visibility:visible;}.ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-inner,.ant-checkbox:not(.ant-checkbox-disabled):hover .ant-checkbox-inner{border-color:#037003;}.ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-checked:not(.ant-checkbox-disabled) .ant-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-checkbox-wrapper:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-checked:not(.ant-checkbox-disabled):after{border-color:#198016;}.ant-checkbox-checked .ant-checkbox-inner{background-color:#037003;border-color:#037003;}.ant-checkbox-checked .ant-checkbox-inner:after{opacity:1;transform:rotate(45deg) scale(1) translate(-50%,-50%);transition:all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;}.ant-checkbox-checked:after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-radius:4px;visibility:hidden;border:2px solid #037003;animation-name:antCheckboxEffect;animation-duration:0.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards;content:\\"\\";transition:all 0.3s;}.ant-checkbox-wrapper-checked:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox-inner,.ant-checkbox-checked:not(.ant-checkbox-disabled):hover .ant-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-checkbox-wrapper-checked:not(.ant-checkbox-wrapper-disabled):hover .ant-checkbox:after,.ant-checkbox-checked:not(.ant-checkbox-disabled):hover .ant-checkbox:after{border-color:#198016;}.ant-checkbox-wrapper-disabled{cursor:not-allowed;}.ant-checkbox-disabled,.ant-checkbox-disabled .ant-checkbox-input{cursor:not-allowed;pointer-events:none;}.ant-checkbox-disabled .ant-checkbox-inner{background:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-checkbox-disabled .ant-checkbox-inner:after{border-color:rgba(255, 255, 255, 0.25);}.ant-checkbox-disabled:after{display:none;}.ant-checkbox-disabled+span{color:rgba(255, 255, 255, 0.25);}.ant-checkbox-disabled.ant-checkbox-indeterminate .ant-checkbox-inner::after{background:rgba(255, 255, 255, 0.25);}[class^=\\"ant-checkbox-group\\"],[class*=\\" ant-checkbox-group\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-checkbox-group\\"]::before,[class*=\\" ant-checkbox-group\\"]::before,[class^=\\"ant-checkbox-group\\"]::after,[class*=\\" ant-checkbox-group\\"]::after{box-sizing:border-box;}[class^=\\"ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"],[class*=\\" ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"],[class^=\\"ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"],[class*=\\" ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"]{box-sizing:border-box;}[class^=\\"ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"]::before,[class*=\\" ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"]::before,[class^=\\"ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"]::before,[class*=\\" ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"]::before,[class^=\\"ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"]::after,[class*=\\" ant-checkbox-group\\"] [class^=\\"ant-checkbox-group\\"]::after,[class^=\\"ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"]::after,[class*=\\" ant-checkbox-group\\"] [class*=\\" ant-checkbox-group\\"]::after{box-sizing:border-box;}.ant-checkbox-group-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;flex-wrap:wrap;column-gap:8px;}.ant-checkbox-group-group >.ant-row{flex:1;}.ant-checkbox-group-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;align-items:baseline;cursor:pointer;}.ant-checkbox-group-wrapper:after{display:inline-block;width:0;overflow:hidden;content:'\\\\a0';}.ant-checkbox-group-wrapper+.ant-checkbox-group-wrapper{margin-inline-start:0;}.ant-checkbox-group-wrapper.ant-checkbox-group-wrapper-in-form-item input[type=\\"checkbox\\"]{width:14px;height:14px;}.ant-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;white-space:nowrap;cursor:pointer;align-self:center;}.ant-checkbox-group .ant-checkbox-group-input{position:absolute;inset:0;z-index:1;cursor:pointer;opacity:0;margin:0;}.ant-checkbox-group .ant-checkbox-group-input:focus-visible+.ant-checkbox-group-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-checkbox-group .ant-checkbox-group-inner{box-sizing:border-box;position:relative;top:0;inset-inline-start:0;display:block;width:16px;height:16px;direction:ltr;background-color:#141414;border:1px solid #424242;border-radius:4px;border-collapse:separate;transition:all 0.3s;}.ant-checkbox-group .ant-checkbox-group-inner:after{box-sizing:border-box;position:absolute;top:50%;inset-inline-start:21.5%;display:table;width:5.7142857142857135px;height:9.142857142857142px;border:2px solid #fff;border-top:0;border-inline-start:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;content:\\"\\";transition:all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6),opacity 0.1s;}.ant-checkbox-group+span{padding-inline-start:8px;padding-inline-end:8px;}.ant-checkbox-group-indeterminate .ant-checkbox-group-inner:after{top:50%;inset-inline-start:50%;width:8px;height:8px;background-color:#037003;border:0;transform:translate(-50%, -50%) scale(1);opacity:1;content:\\"\\";}.ant-checkbox-group-wrapper:hover .ant-checkbox-group:after{visibility:visible;}.ant-checkbox-group-wrapper:not(.ant-checkbox-group-wrapper-disabled):hover .ant-checkbox-group-inner,.ant-checkbox-group:not(.ant-checkbox-group-disabled):hover .ant-checkbox-group-inner{border-color:#037003;}.ant-checkbox-group-wrapper:not(.ant-checkbox-group-wrapper-disabled):hover .ant-checkbox-group-checked:not(.ant-checkbox-group-disabled) .ant-checkbox-group-inner{background-color:#198016;border-color:transparent;}.ant-checkbox-group-wrapper:not(.ant-checkbox-group-wrapper-disabled):hover .ant-checkbox-group-checked:not(.ant-checkbox-group-disabled):after{border-color:#198016;}.ant-checkbox-group-checked .ant-checkbox-group-inner{background-color:#037003;border-color:#037003;}.ant-checkbox-group-checked .ant-checkbox-group-inner:after{opacity:1;transform:rotate(45deg) scale(1) translate(-50%,-50%);transition:all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;}.ant-checkbox-group-checked:after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-radius:4px;visibility:hidden;border:2px solid #037003;animation-name:antCheckboxEffect;animation-duration:0.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards;content:\\"\\";transition:all 0.3s;}.ant-checkbox-group-wrapper-checked:not(.ant-checkbox-group-wrapper-disabled):hover .ant-checkbox-group-inner,.ant-checkbox-group-checked:not(.ant-checkbox-group-disabled):hover .ant-checkbox-group-inner{background-color:#198016;border-color:transparent;}.ant-checkbox-group-wrapper-checked:not(.ant-checkbox-group-wrapper-disabled):hover .ant-checkbox-group:after,.ant-checkbox-group-checked:not(.ant-checkbox-group-disabled):hover .ant-checkbox-group:after{border-color:#198016;}.ant-checkbox-group-wrapper-disabled{cursor:not-allowed;}.ant-checkbox-group-disabled,.ant-checkbox-group-disabled .ant-checkbox-group-input{cursor:not-allowed;pointer-events:none;}.ant-checkbox-group-disabled .ant-checkbox-group-inner{background:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-checkbox-group-disabled .ant-checkbox-group-inner:after{border-color:rgba(255, 255, 255, 0.25);}.ant-checkbox-group-disabled:after{display:none;}.ant-checkbox-group-disabled+span{color:rgba(255, 255, 255, 0.25);}.ant-checkbox-group-disabled.ant-checkbox-group-indeterminate .ant-checkbox-group-inner::after{background:rgba(255, 255, 255, 0.25);}[class^=\\"ant-col\\"],[class*=\\" ant-col\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-col\\"]::before,[class*=\\" ant-col\\"]::before,[class^=\\"ant-col\\"]::after,[class*=\\" ant-col\\"]::after{box-sizing:border-box;}[class^=\\"ant-col\\"] [class^=\\"ant-col\\"],[class*=\\" ant-col\\"] [class^=\\"ant-col\\"],[class^=\\"ant-col\\"] [class*=\\" ant-col\\"],[class*=\\" ant-col\\"] [class*=\\" ant-col\\"]{box-sizing:border-box;}[class^=\\"ant-col\\"] [class^=\\"ant-col\\"]::before,[class*=\\" ant-col\\"] [class^=\\"ant-col\\"]::before,[class^=\\"ant-col\\"] [class*=\\" ant-col\\"]::before,[class*=\\" ant-col\\"] [class*=\\" ant-col\\"]::before,[class^=\\"ant-col\\"] [class^=\\"ant-col\\"]::after,[class*=\\" ant-col\\"] [class^=\\"ant-col\\"]::after,[class^=\\"ant-col\\"] [class*=\\" ant-col\\"]::after,[class*=\\" ant-col\\"] [class*=\\" ant-col\\"]::after{box-sizing:border-box;}.ant-col{position:relative;max-width:100%;min-height:1px;}.ant-col-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-push-24{inset-inline-start:100%;}.ant-col-pull-24{inset-inline-end:100%;}.ant-col-offset-24{margin-inline-start:100%;}.ant-col-order-24{order:24;}.ant-col-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-push-23{inset-inline-start:95.83333333333334%;}.ant-col-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-order-23{order:23;}.ant-col-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-push-22{inset-inline-start:91.66666666666666%;}.ant-col-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-order-22{order:22;}.ant-col-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-push-21{inset-inline-start:87.5%;}.ant-col-pull-21{inset-inline-end:87.5%;}.ant-col-offset-21{margin-inline-start:87.5%;}.ant-col-order-21{order:21;}.ant-col-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-push-20{inset-inline-start:83.33333333333334%;}.ant-col-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-order-20{order:20;}.ant-col-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-push-19{inset-inline-start:79.16666666666666%;}.ant-col-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-order-19{order:19;}.ant-col-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-push-18{inset-inline-start:75%;}.ant-col-pull-18{inset-inline-end:75%;}.ant-col-offset-18{margin-inline-start:75%;}.ant-col-order-18{order:18;}.ant-col-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-push-17{inset-inline-start:70.83333333333334%;}.ant-col-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-order-17{order:17;}.ant-col-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-push-16{inset-inline-start:66.66666666666666%;}.ant-col-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-order-16{order:16;}.ant-col-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-push-15{inset-inline-start:62.5%;}.ant-col-pull-15{inset-inline-end:62.5%;}.ant-col-offset-15{margin-inline-start:62.5%;}.ant-col-order-15{order:15;}.ant-col-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-push-14{inset-inline-start:58.333333333333336%;}.ant-col-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-order-14{order:14;}.ant-col-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-push-13{inset-inline-start:54.166666666666664%;}.ant-col-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-order-13{order:13;}.ant-col-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-push-12{inset-inline-start:50%;}.ant-col-pull-12{inset-inline-end:50%;}.ant-col-offset-12{margin-inline-start:50%;}.ant-col-order-12{order:12;}.ant-col-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-push-11{inset-inline-start:45.83333333333333%;}.ant-col-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-order-11{order:11;}.ant-col-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-push-10{inset-inline-start:41.66666666666667%;}.ant-col-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-order-10{order:10;}.ant-col-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-push-9{inset-inline-start:37.5%;}.ant-col-pull-9{inset-inline-end:37.5%;}.ant-col-offset-9{margin-inline-start:37.5%;}.ant-col-order-9{order:9;}.ant-col-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-push-8{inset-inline-start:33.33333333333333%;}.ant-col-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-order-8{order:8;}.ant-col-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-push-7{inset-inline-start:29.166666666666668%;}.ant-col-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-order-7{order:7;}.ant-col-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-push-6{inset-inline-start:25%;}.ant-col-pull-6{inset-inline-end:25%;}.ant-col-offset-6{margin-inline-start:25%;}.ant-col-order-6{order:6;}.ant-col-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-push-5{inset-inline-start:20.833333333333336%;}.ant-col-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-order-5{order:5;}.ant-col-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-push-4{inset-inline-start:16.666666666666664%;}.ant-col-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-order-4{order:4;}.ant-col-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-push-3{inset-inline-start:12.5%;}.ant-col-pull-3{inset-inline-end:12.5%;}.ant-col-offset-3{margin-inline-start:12.5%;}.ant-col-order-3{order:3;}.ant-col-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-push-2{inset-inline-start:8.333333333333332%;}.ant-col-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-order-2{order:2;}.ant-col-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-push-1{inset-inline-start:4.166666666666666%;}.ant-col-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-order-1{order:1;}.ant-col-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-offset-0{margin-inline-end:0;}.ant-col-order-0{order:0;}.ant-col-xs-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-xs-push-24{inset-inline-start:100%;}.ant-col-xs-pull-24{inset-inline-end:100%;}.ant-col-xs-offset-24{margin-inline-start:100%;}.ant-col-xs-order-24{order:24;}.ant-col-xs-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-xs-push-23{inset-inline-start:95.83333333333334%;}.ant-col-xs-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-xs-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-xs-order-23{order:23;}.ant-col-xs-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-xs-push-22{inset-inline-start:91.66666666666666%;}.ant-col-xs-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-xs-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-xs-order-22{order:22;}.ant-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-xs-push-21{inset-inline-start:87.5%;}.ant-col-xs-pull-21{inset-inline-end:87.5%;}.ant-col-xs-offset-21{margin-inline-start:87.5%;}.ant-col-xs-order-21{order:21;}.ant-col-xs-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-xs-push-20{inset-inline-start:83.33333333333334%;}.ant-col-xs-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-xs-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-xs-order-20{order:20;}.ant-col-xs-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-xs-push-19{inset-inline-start:79.16666666666666%;}.ant-col-xs-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-xs-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-xs-order-19{order:19;}.ant-col-xs-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-xs-push-18{inset-inline-start:75%;}.ant-col-xs-pull-18{inset-inline-end:75%;}.ant-col-xs-offset-18{margin-inline-start:75%;}.ant-col-xs-order-18{order:18;}.ant-col-xs-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-xs-push-17{inset-inline-start:70.83333333333334%;}.ant-col-xs-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-xs-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-xs-order-17{order:17;}.ant-col-xs-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-xs-push-16{inset-inline-start:66.66666666666666%;}.ant-col-xs-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-xs-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-xs-order-16{order:16;}.ant-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-xs-push-15{inset-inline-start:62.5%;}.ant-col-xs-pull-15{inset-inline-end:62.5%;}.ant-col-xs-offset-15{margin-inline-start:62.5%;}.ant-col-xs-order-15{order:15;}.ant-col-xs-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-xs-push-14{inset-inline-start:58.333333333333336%;}.ant-col-xs-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-xs-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-xs-order-14{order:14;}.ant-col-xs-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-xs-push-13{inset-inline-start:54.166666666666664%;}.ant-col-xs-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-xs-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-xs-order-13{order:13;}.ant-col-xs-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-xs-push-12{inset-inline-start:50%;}.ant-col-xs-pull-12{inset-inline-end:50%;}.ant-col-xs-offset-12{margin-inline-start:50%;}.ant-col-xs-order-12{order:12;}.ant-col-xs-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-xs-push-11{inset-inline-start:45.83333333333333%;}.ant-col-xs-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-xs-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-xs-order-11{order:11;}.ant-col-xs-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-xs-push-10{inset-inline-start:41.66666666666667%;}.ant-col-xs-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-xs-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-xs-order-10{order:10;}.ant-col-xs-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-xs-push-9{inset-inline-start:37.5%;}.ant-col-xs-pull-9{inset-inline-end:37.5%;}.ant-col-xs-offset-9{margin-inline-start:37.5%;}.ant-col-xs-order-9{order:9;}.ant-col-xs-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-xs-push-8{inset-inline-start:33.33333333333333%;}.ant-col-xs-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-xs-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-xs-order-8{order:8;}.ant-col-xs-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-xs-push-7{inset-inline-start:29.166666666666668%;}.ant-col-xs-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-xs-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-xs-order-7{order:7;}.ant-col-xs-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-xs-push-6{inset-inline-start:25%;}.ant-col-xs-pull-6{inset-inline-end:25%;}.ant-col-xs-offset-6{margin-inline-start:25%;}.ant-col-xs-order-6{order:6;}.ant-col-xs-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-xs-push-5{inset-inline-start:20.833333333333336%;}.ant-col-xs-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-xs-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-xs-order-5{order:5;}.ant-col-xs-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-xs-push-4{inset-inline-start:16.666666666666664%;}.ant-col-xs-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-xs-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-xs-order-4{order:4;}.ant-col-xs-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-xs-push-3{inset-inline-start:12.5%;}.ant-col-xs-pull-3{inset-inline-end:12.5%;}.ant-col-xs-offset-3{margin-inline-start:12.5%;}.ant-col-xs-order-3{order:3;}.ant-col-xs-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-xs-push-2{inset-inline-start:8.333333333333332%;}.ant-col-xs-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-xs-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-xs-order-2{order:2;}.ant-col-xs-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-xs-push-1{inset-inline-start:4.166666666666666%;}.ant-col-xs-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-xs-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-xs-order-1{order:1;}.ant-col-xs-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-xs-push-0{inset-inline-start:auto;}.ant-col-xs-pull-0{inset-inline-end:auto;}.ant-col-xs-offset-0{margin-inline-end:0;}.ant-col-xs-order-0{order:0;}@media (min-width: 576px){.ant-col-sm-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-sm-push-24{inset-inline-start:100%;}.ant-col-sm-pull-24{inset-inline-end:100%;}.ant-col-sm-offset-24{margin-inline-start:100%;}.ant-col-sm-order-24{order:24;}.ant-col-sm-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-sm-push-23{inset-inline-start:95.83333333333334%;}.ant-col-sm-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-sm-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-sm-order-23{order:23;}.ant-col-sm-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-sm-push-22{inset-inline-start:91.66666666666666%;}.ant-col-sm-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-sm-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-sm-order-22{order:22;}.ant-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-sm-push-21{inset-inline-start:87.5%;}.ant-col-sm-pull-21{inset-inline-end:87.5%;}.ant-col-sm-offset-21{margin-inline-start:87.5%;}.ant-col-sm-order-21{order:21;}.ant-col-sm-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-sm-push-20{inset-inline-start:83.33333333333334%;}.ant-col-sm-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-sm-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-sm-order-20{order:20;}.ant-col-sm-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-sm-push-19{inset-inline-start:79.16666666666666%;}.ant-col-sm-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-sm-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-sm-order-19{order:19;}.ant-col-sm-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-sm-push-18{inset-inline-start:75%;}.ant-col-sm-pull-18{inset-inline-end:75%;}.ant-col-sm-offset-18{margin-inline-start:75%;}.ant-col-sm-order-18{order:18;}.ant-col-sm-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-sm-push-17{inset-inline-start:70.83333333333334%;}.ant-col-sm-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-sm-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-sm-order-17{order:17;}.ant-col-sm-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-sm-push-16{inset-inline-start:66.66666666666666%;}.ant-col-sm-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-sm-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-sm-order-16{order:16;}.ant-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-sm-push-15{inset-inline-start:62.5%;}.ant-col-sm-pull-15{inset-inline-end:62.5%;}.ant-col-sm-offset-15{margin-inline-start:62.5%;}.ant-col-sm-order-15{order:15;}.ant-col-sm-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-sm-push-14{inset-inline-start:58.333333333333336%;}.ant-col-sm-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-sm-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-sm-order-14{order:14;}.ant-col-sm-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-sm-push-13{inset-inline-start:54.166666666666664%;}.ant-col-sm-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-sm-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-sm-order-13{order:13;}.ant-col-sm-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-sm-push-12{inset-inline-start:50%;}.ant-col-sm-pull-12{inset-inline-end:50%;}.ant-col-sm-offset-12{margin-inline-start:50%;}.ant-col-sm-order-12{order:12;}.ant-col-sm-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-sm-push-11{inset-inline-start:45.83333333333333%;}.ant-col-sm-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-sm-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-sm-order-11{order:11;}.ant-col-sm-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-sm-push-10{inset-inline-start:41.66666666666667%;}.ant-col-sm-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-sm-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-sm-order-10{order:10;}.ant-col-sm-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-sm-push-9{inset-inline-start:37.5%;}.ant-col-sm-pull-9{inset-inline-end:37.5%;}.ant-col-sm-offset-9{margin-inline-start:37.5%;}.ant-col-sm-order-9{order:9;}.ant-col-sm-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-sm-push-8{inset-inline-start:33.33333333333333%;}.ant-col-sm-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-sm-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-sm-order-8{order:8;}.ant-col-sm-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-sm-push-7{inset-inline-start:29.166666666666668%;}.ant-col-sm-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-sm-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-sm-order-7{order:7;}.ant-col-sm-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-sm-push-6{inset-inline-start:25%;}.ant-col-sm-pull-6{inset-inline-end:25%;}.ant-col-sm-offset-6{margin-inline-start:25%;}.ant-col-sm-order-6{order:6;}.ant-col-sm-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-sm-push-5{inset-inline-start:20.833333333333336%;}.ant-col-sm-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-sm-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-sm-order-5{order:5;}.ant-col-sm-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-sm-push-4{inset-inline-start:16.666666666666664%;}.ant-col-sm-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-sm-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-sm-order-4{order:4;}.ant-col-sm-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-sm-push-3{inset-inline-start:12.5%;}.ant-col-sm-pull-3{inset-inline-end:12.5%;}.ant-col-sm-offset-3{margin-inline-start:12.5%;}.ant-col-sm-order-3{order:3;}.ant-col-sm-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-sm-push-2{inset-inline-start:8.333333333333332%;}.ant-col-sm-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-sm-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-sm-order-2{order:2;}.ant-col-sm-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-sm-push-1{inset-inline-start:4.166666666666666%;}.ant-col-sm-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-sm-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-sm-order-1{order:1;}.ant-col-sm-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-sm-push-0{inset-inline-start:auto;}.ant-col-sm-pull-0{inset-inline-end:auto;}.ant-col-sm-offset-0{margin-inline-end:0;}.ant-col-sm-order-0{order:0;}}@media (min-width: 768px){.ant-col-md-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-md-push-24{inset-inline-start:100%;}.ant-col-md-pull-24{inset-inline-end:100%;}.ant-col-md-offset-24{margin-inline-start:100%;}.ant-col-md-order-24{order:24;}.ant-col-md-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-md-push-23{inset-inline-start:95.83333333333334%;}.ant-col-md-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-md-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-md-order-23{order:23;}.ant-col-md-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-md-push-22{inset-inline-start:91.66666666666666%;}.ant-col-md-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-md-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-md-order-22{order:22;}.ant-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-md-push-21{inset-inline-start:87.5%;}.ant-col-md-pull-21{inset-inline-end:87.5%;}.ant-col-md-offset-21{margin-inline-start:87.5%;}.ant-col-md-order-21{order:21;}.ant-col-md-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-md-push-20{inset-inline-start:83.33333333333334%;}.ant-col-md-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-md-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-md-order-20{order:20;}.ant-col-md-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-md-push-19{inset-inline-start:79.16666666666666%;}.ant-col-md-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-md-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-md-order-19{order:19;}.ant-col-md-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-md-push-18{inset-inline-start:75%;}.ant-col-md-pull-18{inset-inline-end:75%;}.ant-col-md-offset-18{margin-inline-start:75%;}.ant-col-md-order-18{order:18;}.ant-col-md-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-md-push-17{inset-inline-start:70.83333333333334%;}.ant-col-md-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-md-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-md-order-17{order:17;}.ant-col-md-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-md-push-16{inset-inline-start:66.66666666666666%;}.ant-col-md-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-md-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-md-order-16{order:16;}.ant-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-md-push-15{inset-inline-start:62.5%;}.ant-col-md-pull-15{inset-inline-end:62.5%;}.ant-col-md-offset-15{margin-inline-start:62.5%;}.ant-col-md-order-15{order:15;}.ant-col-md-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-md-push-14{inset-inline-start:58.333333333333336%;}.ant-col-md-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-md-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-md-order-14{order:14;}.ant-col-md-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-md-push-13{inset-inline-start:54.166666666666664%;}.ant-col-md-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-md-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-md-order-13{order:13;}.ant-col-md-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-md-push-12{inset-inline-start:50%;}.ant-col-md-pull-12{inset-inline-end:50%;}.ant-col-md-offset-12{margin-inline-start:50%;}.ant-col-md-order-12{order:12;}.ant-col-md-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-md-push-11{inset-inline-start:45.83333333333333%;}.ant-col-md-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-md-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-md-order-11{order:11;}.ant-col-md-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-md-push-10{inset-inline-start:41.66666666666667%;}.ant-col-md-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-md-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-md-order-10{order:10;}.ant-col-md-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-md-push-9{inset-inline-start:37.5%;}.ant-col-md-pull-9{inset-inline-end:37.5%;}.ant-col-md-offset-9{margin-inline-start:37.5%;}.ant-col-md-order-9{order:9;}.ant-col-md-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-md-push-8{inset-inline-start:33.33333333333333%;}.ant-col-md-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-md-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-md-order-8{order:8;}.ant-col-md-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-md-push-7{inset-inline-start:29.166666666666668%;}.ant-col-md-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-md-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-md-order-7{order:7;}.ant-col-md-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-md-push-6{inset-inline-start:25%;}.ant-col-md-pull-6{inset-inline-end:25%;}.ant-col-md-offset-6{margin-inline-start:25%;}.ant-col-md-order-6{order:6;}.ant-col-md-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-md-push-5{inset-inline-start:20.833333333333336%;}.ant-col-md-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-md-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-md-order-5{order:5;}.ant-col-md-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-md-push-4{inset-inline-start:16.666666666666664%;}.ant-col-md-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-md-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-md-order-4{order:4;}.ant-col-md-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-md-push-3{inset-inline-start:12.5%;}.ant-col-md-pull-3{inset-inline-end:12.5%;}.ant-col-md-offset-3{margin-inline-start:12.5%;}.ant-col-md-order-3{order:3;}.ant-col-md-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-md-push-2{inset-inline-start:8.333333333333332%;}.ant-col-md-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-md-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-md-order-2{order:2;}.ant-col-md-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-md-push-1{inset-inline-start:4.166666666666666%;}.ant-col-md-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-md-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-md-order-1{order:1;}.ant-col-md-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-md-push-0{inset-inline-start:auto;}.ant-col-md-pull-0{inset-inline-end:auto;}.ant-col-md-offset-0{margin-inline-end:0;}.ant-col-md-order-0{order:0;}}@media (min-width: 992px){.ant-col-lg-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-lg-push-24{inset-inline-start:100%;}.ant-col-lg-pull-24{inset-inline-end:100%;}.ant-col-lg-offset-24{margin-inline-start:100%;}.ant-col-lg-order-24{order:24;}.ant-col-lg-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-lg-push-23{inset-inline-start:95.83333333333334%;}.ant-col-lg-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-lg-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-lg-order-23{order:23;}.ant-col-lg-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-lg-push-22{inset-inline-start:91.66666666666666%;}.ant-col-lg-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-lg-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-lg-order-22{order:22;}.ant-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-lg-push-21{inset-inline-start:87.5%;}.ant-col-lg-pull-21{inset-inline-end:87.5%;}.ant-col-lg-offset-21{margin-inline-start:87.5%;}.ant-col-lg-order-21{order:21;}.ant-col-lg-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-lg-push-20{inset-inline-start:83.33333333333334%;}.ant-col-lg-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-lg-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-lg-order-20{order:20;}.ant-col-lg-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-lg-push-19{inset-inline-start:79.16666666666666%;}.ant-col-lg-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-lg-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-lg-order-19{order:19;}.ant-col-lg-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-lg-push-18{inset-inline-start:75%;}.ant-col-lg-pull-18{inset-inline-end:75%;}.ant-col-lg-offset-18{margin-inline-start:75%;}.ant-col-lg-order-18{order:18;}.ant-col-lg-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-lg-push-17{inset-inline-start:70.83333333333334%;}.ant-col-lg-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-lg-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-lg-order-17{order:17;}.ant-col-lg-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-lg-push-16{inset-inline-start:66.66666666666666%;}.ant-col-lg-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-lg-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-lg-order-16{order:16;}.ant-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-lg-push-15{inset-inline-start:62.5%;}.ant-col-lg-pull-15{inset-inline-end:62.5%;}.ant-col-lg-offset-15{margin-inline-start:62.5%;}.ant-col-lg-order-15{order:15;}.ant-col-lg-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-lg-push-14{inset-inline-start:58.333333333333336%;}.ant-col-lg-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-lg-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-lg-order-14{order:14;}.ant-col-lg-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-lg-push-13{inset-inline-start:54.166666666666664%;}.ant-col-lg-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-lg-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-lg-order-13{order:13;}.ant-col-lg-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-lg-push-12{inset-inline-start:50%;}.ant-col-lg-pull-12{inset-inline-end:50%;}.ant-col-lg-offset-12{margin-inline-start:50%;}.ant-col-lg-order-12{order:12;}.ant-col-lg-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-lg-push-11{inset-inline-start:45.83333333333333%;}.ant-col-lg-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-lg-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-lg-order-11{order:11;}.ant-col-lg-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-lg-push-10{inset-inline-start:41.66666666666667%;}.ant-col-lg-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-lg-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-lg-order-10{order:10;}.ant-col-lg-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-lg-push-9{inset-inline-start:37.5%;}.ant-col-lg-pull-9{inset-inline-end:37.5%;}.ant-col-lg-offset-9{margin-inline-start:37.5%;}.ant-col-lg-order-9{order:9;}.ant-col-lg-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-lg-push-8{inset-inline-start:33.33333333333333%;}.ant-col-lg-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-lg-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-lg-order-8{order:8;}.ant-col-lg-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-lg-push-7{inset-inline-start:29.166666666666668%;}.ant-col-lg-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-lg-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-lg-order-7{order:7;}.ant-col-lg-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-lg-push-6{inset-inline-start:25%;}.ant-col-lg-pull-6{inset-inline-end:25%;}.ant-col-lg-offset-6{margin-inline-start:25%;}.ant-col-lg-order-6{order:6;}.ant-col-lg-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-lg-push-5{inset-inline-start:20.833333333333336%;}.ant-col-lg-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-lg-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-lg-order-5{order:5;}.ant-col-lg-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-lg-push-4{inset-inline-start:16.666666666666664%;}.ant-col-lg-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-lg-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-lg-order-4{order:4;}.ant-col-lg-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-lg-push-3{inset-inline-start:12.5%;}.ant-col-lg-pull-3{inset-inline-end:12.5%;}.ant-col-lg-offset-3{margin-inline-start:12.5%;}.ant-col-lg-order-3{order:3;}.ant-col-lg-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-lg-push-2{inset-inline-start:8.333333333333332%;}.ant-col-lg-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-lg-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-lg-order-2{order:2;}.ant-col-lg-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-lg-push-1{inset-inline-start:4.166666666666666%;}.ant-col-lg-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-lg-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-lg-order-1{order:1;}.ant-col-lg-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-lg-push-0{inset-inline-start:auto;}.ant-col-lg-pull-0{inset-inline-end:auto;}.ant-col-lg-offset-0{margin-inline-end:0;}.ant-col-lg-order-0{order:0;}}@media (min-width: 1200px){.ant-col-xl-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-xl-push-24{inset-inline-start:100%;}.ant-col-xl-pull-24{inset-inline-end:100%;}.ant-col-xl-offset-24{margin-inline-start:100%;}.ant-col-xl-order-24{order:24;}.ant-col-xl-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-xl-push-23{inset-inline-start:95.83333333333334%;}.ant-col-xl-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-xl-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-xl-order-23{order:23;}.ant-col-xl-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-xl-push-22{inset-inline-start:91.66666666666666%;}.ant-col-xl-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-xl-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-xl-order-22{order:22;}.ant-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-xl-push-21{inset-inline-start:87.5%;}.ant-col-xl-pull-21{inset-inline-end:87.5%;}.ant-col-xl-offset-21{margin-inline-start:87.5%;}.ant-col-xl-order-21{order:21;}.ant-col-xl-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-xl-push-20{inset-inline-start:83.33333333333334%;}.ant-col-xl-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-xl-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-xl-order-20{order:20;}.ant-col-xl-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-xl-push-19{inset-inline-start:79.16666666666666%;}.ant-col-xl-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-xl-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-xl-order-19{order:19;}.ant-col-xl-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-xl-push-18{inset-inline-start:75%;}.ant-col-xl-pull-18{inset-inline-end:75%;}.ant-col-xl-offset-18{margin-inline-start:75%;}.ant-col-xl-order-18{order:18;}.ant-col-xl-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-xl-push-17{inset-inline-start:70.83333333333334%;}.ant-col-xl-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-xl-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-xl-order-17{order:17;}.ant-col-xl-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-xl-push-16{inset-inline-start:66.66666666666666%;}.ant-col-xl-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-xl-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-xl-order-16{order:16;}.ant-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-xl-push-15{inset-inline-start:62.5%;}.ant-col-xl-pull-15{inset-inline-end:62.5%;}.ant-col-xl-offset-15{margin-inline-start:62.5%;}.ant-col-xl-order-15{order:15;}.ant-col-xl-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-xl-push-14{inset-inline-start:58.333333333333336%;}.ant-col-xl-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-xl-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-xl-order-14{order:14;}.ant-col-xl-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-xl-push-13{inset-inline-start:54.166666666666664%;}.ant-col-xl-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-xl-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-xl-order-13{order:13;}.ant-col-xl-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-xl-push-12{inset-inline-start:50%;}.ant-col-xl-pull-12{inset-inline-end:50%;}.ant-col-xl-offset-12{margin-inline-start:50%;}.ant-col-xl-order-12{order:12;}.ant-col-xl-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-xl-push-11{inset-inline-start:45.83333333333333%;}.ant-col-xl-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-xl-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-xl-order-11{order:11;}.ant-col-xl-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-xl-push-10{inset-inline-start:41.66666666666667%;}.ant-col-xl-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-xl-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-xl-order-10{order:10;}.ant-col-xl-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-xl-push-9{inset-inline-start:37.5%;}.ant-col-xl-pull-9{inset-inline-end:37.5%;}.ant-col-xl-offset-9{margin-inline-start:37.5%;}.ant-col-xl-order-9{order:9;}.ant-col-xl-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-xl-push-8{inset-inline-start:33.33333333333333%;}.ant-col-xl-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-xl-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-xl-order-8{order:8;}.ant-col-xl-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-xl-push-7{inset-inline-start:29.166666666666668%;}.ant-col-xl-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-xl-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-xl-order-7{order:7;}.ant-col-xl-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-xl-push-6{inset-inline-start:25%;}.ant-col-xl-pull-6{inset-inline-end:25%;}.ant-col-xl-offset-6{margin-inline-start:25%;}.ant-col-xl-order-6{order:6;}.ant-col-xl-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-xl-push-5{inset-inline-start:20.833333333333336%;}.ant-col-xl-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-xl-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-xl-order-5{order:5;}.ant-col-xl-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-xl-push-4{inset-inline-start:16.666666666666664%;}.ant-col-xl-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-xl-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-xl-order-4{order:4;}.ant-col-xl-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-xl-push-3{inset-inline-start:12.5%;}.ant-col-xl-pull-3{inset-inline-end:12.5%;}.ant-col-xl-offset-3{margin-inline-start:12.5%;}.ant-col-xl-order-3{order:3;}.ant-col-xl-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-xl-push-2{inset-inline-start:8.333333333333332%;}.ant-col-xl-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-xl-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-xl-order-2{order:2;}.ant-col-xl-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-xl-push-1{inset-inline-start:4.166666666666666%;}.ant-col-xl-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-xl-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-xl-order-1{order:1;}.ant-col-xl-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-xl-push-0{inset-inline-start:auto;}.ant-col-xl-pull-0{inset-inline-end:auto;}.ant-col-xl-offset-0{margin-inline-end:0;}.ant-col-xl-order-0{order:0;}}@media (min-width: 1600px){.ant-col-xxl-24{display:block;flex:0 0 100%;max-width:100%;}.ant-col-xxl-push-24{inset-inline-start:100%;}.ant-col-xxl-pull-24{inset-inline-end:100%;}.ant-col-xxl-offset-24{margin-inline-start:100%;}.ant-col-xxl-order-24{order:24;}.ant-col-xxl-23{display:block;flex:0 0 95.83333333333334%;max-width:95.83333333333334%;}.ant-col-xxl-push-23{inset-inline-start:95.83333333333334%;}.ant-col-xxl-pull-23{inset-inline-end:95.83333333333334%;}.ant-col-xxl-offset-23{margin-inline-start:95.83333333333334%;}.ant-col-xxl-order-23{order:23;}.ant-col-xxl-22{display:block;flex:0 0 91.66666666666666%;max-width:91.66666666666666%;}.ant-col-xxl-push-22{inset-inline-start:91.66666666666666%;}.ant-col-xxl-pull-22{inset-inline-end:91.66666666666666%;}.ant-col-xxl-offset-22{margin-inline-start:91.66666666666666%;}.ant-col-xxl-order-22{order:22;}.ant-col-xxl-21{display:block;flex:0 0 87.5%;max-width:87.5%;}.ant-col-xxl-push-21{inset-inline-start:87.5%;}.ant-col-xxl-pull-21{inset-inline-end:87.5%;}.ant-col-xxl-offset-21{margin-inline-start:87.5%;}.ant-col-xxl-order-21{order:21;}.ant-col-xxl-20{display:block;flex:0 0 83.33333333333334%;max-width:83.33333333333334%;}.ant-col-xxl-push-20{inset-inline-start:83.33333333333334%;}.ant-col-xxl-pull-20{inset-inline-end:83.33333333333334%;}.ant-col-xxl-offset-20{margin-inline-start:83.33333333333334%;}.ant-col-xxl-order-20{order:20;}.ant-col-xxl-19{display:block;flex:0 0 79.16666666666666%;max-width:79.16666666666666%;}.ant-col-xxl-push-19{inset-inline-start:79.16666666666666%;}.ant-col-xxl-pull-19{inset-inline-end:79.16666666666666%;}.ant-col-xxl-offset-19{margin-inline-start:79.16666666666666%;}.ant-col-xxl-order-19{order:19;}.ant-col-xxl-18{display:block;flex:0 0 75%;max-width:75%;}.ant-col-xxl-push-18{inset-inline-start:75%;}.ant-col-xxl-pull-18{inset-inline-end:75%;}.ant-col-xxl-offset-18{margin-inline-start:75%;}.ant-col-xxl-order-18{order:18;}.ant-col-xxl-17{display:block;flex:0 0 70.83333333333334%;max-width:70.83333333333334%;}.ant-col-xxl-push-17{inset-inline-start:70.83333333333334%;}.ant-col-xxl-pull-17{inset-inline-end:70.83333333333334%;}.ant-col-xxl-offset-17{margin-inline-start:70.83333333333334%;}.ant-col-xxl-order-17{order:17;}.ant-col-xxl-16{display:block;flex:0 0 66.66666666666666%;max-width:66.66666666666666%;}.ant-col-xxl-push-16{inset-inline-start:66.66666666666666%;}.ant-col-xxl-pull-16{inset-inline-end:66.66666666666666%;}.ant-col-xxl-offset-16{margin-inline-start:66.66666666666666%;}.ant-col-xxl-order-16{order:16;}.ant-col-xxl-15{display:block;flex:0 0 62.5%;max-width:62.5%;}.ant-col-xxl-push-15{inset-inline-start:62.5%;}.ant-col-xxl-pull-15{inset-inline-end:62.5%;}.ant-col-xxl-offset-15{margin-inline-start:62.5%;}.ant-col-xxl-order-15{order:15;}.ant-col-xxl-14{display:block;flex:0 0 58.333333333333336%;max-width:58.333333333333336%;}.ant-col-xxl-push-14{inset-inline-start:58.333333333333336%;}.ant-col-xxl-pull-14{inset-inline-end:58.333333333333336%;}.ant-col-xxl-offset-14{margin-inline-start:58.333333333333336%;}.ant-col-xxl-order-14{order:14;}.ant-col-xxl-13{display:block;flex:0 0 54.166666666666664%;max-width:54.166666666666664%;}.ant-col-xxl-push-13{inset-inline-start:54.166666666666664%;}.ant-col-xxl-pull-13{inset-inline-end:54.166666666666664%;}.ant-col-xxl-offset-13{margin-inline-start:54.166666666666664%;}.ant-col-xxl-order-13{order:13;}.ant-col-xxl-12{display:block;flex:0 0 50%;max-width:50%;}.ant-col-xxl-push-12{inset-inline-start:50%;}.ant-col-xxl-pull-12{inset-inline-end:50%;}.ant-col-xxl-offset-12{margin-inline-start:50%;}.ant-col-xxl-order-12{order:12;}.ant-col-xxl-11{display:block;flex:0 0 45.83333333333333%;max-width:45.83333333333333%;}.ant-col-xxl-push-11{inset-inline-start:45.83333333333333%;}.ant-col-xxl-pull-11{inset-inline-end:45.83333333333333%;}.ant-col-xxl-offset-11{margin-inline-start:45.83333333333333%;}.ant-col-xxl-order-11{order:11;}.ant-col-xxl-10{display:block;flex:0 0 41.66666666666667%;max-width:41.66666666666667%;}.ant-col-xxl-push-10{inset-inline-start:41.66666666666667%;}.ant-col-xxl-pull-10{inset-inline-end:41.66666666666667%;}.ant-col-xxl-offset-10{margin-inline-start:41.66666666666667%;}.ant-col-xxl-order-10{order:10;}.ant-col-xxl-9{display:block;flex:0 0 37.5%;max-width:37.5%;}.ant-col-xxl-push-9{inset-inline-start:37.5%;}.ant-col-xxl-pull-9{inset-inline-end:37.5%;}.ant-col-xxl-offset-9{margin-inline-start:37.5%;}.ant-col-xxl-order-9{order:9;}.ant-col-xxl-8{display:block;flex:0 0 33.33333333333333%;max-width:33.33333333333333%;}.ant-col-xxl-push-8{inset-inline-start:33.33333333333333%;}.ant-col-xxl-pull-8{inset-inline-end:33.33333333333333%;}.ant-col-xxl-offset-8{margin-inline-start:33.33333333333333%;}.ant-col-xxl-order-8{order:8;}.ant-col-xxl-7{display:block;flex:0 0 29.166666666666668%;max-width:29.166666666666668%;}.ant-col-xxl-push-7{inset-inline-start:29.166666666666668%;}.ant-col-xxl-pull-7{inset-inline-end:29.166666666666668%;}.ant-col-xxl-offset-7{margin-inline-start:29.166666666666668%;}.ant-col-xxl-order-7{order:7;}.ant-col-xxl-6{display:block;flex:0 0 25%;max-width:25%;}.ant-col-xxl-push-6{inset-inline-start:25%;}.ant-col-xxl-pull-6{inset-inline-end:25%;}.ant-col-xxl-offset-6{margin-inline-start:25%;}.ant-col-xxl-order-6{order:6;}.ant-col-xxl-5{display:block;flex:0 0 20.833333333333336%;max-width:20.833333333333336%;}.ant-col-xxl-push-5{inset-inline-start:20.833333333333336%;}.ant-col-xxl-pull-5{inset-inline-end:20.833333333333336%;}.ant-col-xxl-offset-5{margin-inline-start:20.833333333333336%;}.ant-col-xxl-order-5{order:5;}.ant-col-xxl-4{display:block;flex:0 0 16.666666666666664%;max-width:16.666666666666664%;}.ant-col-xxl-push-4{inset-inline-start:16.666666666666664%;}.ant-col-xxl-pull-4{inset-inline-end:16.666666666666664%;}.ant-col-xxl-offset-4{margin-inline-start:16.666666666666664%;}.ant-col-xxl-order-4{order:4;}.ant-col-xxl-3{display:block;flex:0 0 12.5%;max-width:12.5%;}.ant-col-xxl-push-3{inset-inline-start:12.5%;}.ant-col-xxl-pull-3{inset-inline-end:12.5%;}.ant-col-xxl-offset-3{margin-inline-start:12.5%;}.ant-col-xxl-order-3{order:3;}.ant-col-xxl-2{display:block;flex:0 0 8.333333333333332%;max-width:8.333333333333332%;}.ant-col-xxl-push-2{inset-inline-start:8.333333333333332%;}.ant-col-xxl-pull-2{inset-inline-end:8.333333333333332%;}.ant-col-xxl-offset-2{margin-inline-start:8.333333333333332%;}.ant-col-xxl-order-2{order:2;}.ant-col-xxl-1{display:block;flex:0 0 4.166666666666666%;max-width:4.166666666666666%;}.ant-col-xxl-push-1{inset-inline-start:4.166666666666666%;}.ant-col-xxl-pull-1{inset-inline-end:4.166666666666666%;}.ant-col-xxl-offset-1{margin-inline-start:4.166666666666666%;}.ant-col-xxl-order-1{order:1;}.ant-col-xxl-0{display:none;}.ant-col-push-0{inset-inline-start:auto;}.ant-col-pull-0{inset-inline-end:auto;}.ant-col-xxl-push-0{inset-inline-start:auto;}.ant-col-xxl-pull-0{inset-inline-end:auto;}.ant-col-xxl-offset-0{margin-inline-end:0;}.ant-col-xxl-order-0{order:0;}}[class^=\\"ant-comment\\"],[class*=\\" ant-comment\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-comment\\"]::before,[class*=\\" ant-comment\\"]::before,[class^=\\"ant-comment\\"]::after,[class*=\\" ant-comment\\"]::after{box-sizing:border-box;}[class^=\\"ant-comment\\"] [class^=\\"ant-comment\\"],[class*=\\" ant-comment\\"] [class^=\\"ant-comment\\"],[class^=\\"ant-comment\\"] [class*=\\" ant-comment\\"],[class*=\\" ant-comment\\"] [class*=\\" ant-comment\\"]{box-sizing:border-box;}[class^=\\"ant-comment\\"] [class^=\\"ant-comment\\"]::before,[class*=\\" ant-comment\\"] [class^=\\"ant-comment\\"]::before,[class^=\\"ant-comment\\"] [class*=\\" ant-comment\\"]::before,[class*=\\" ant-comment\\"] [class*=\\" ant-comment\\"]::before,[class^=\\"ant-comment\\"] [class^=\\"ant-comment\\"]::after,[class*=\\" ant-comment\\"] [class^=\\"ant-comment\\"]::after,[class^=\\"ant-comment\\"] [class*=\\" ant-comment\\"]::after,[class*=\\" ant-comment\\"] [class*=\\" ant-comment\\"]::after{box-sizing:border-box;}.ant-comment{position:relative;background-color:inherit;}.ant-comment .ant-comment-inner{display:flex;padding:20px 0;}.ant-comment .ant-comment-avatar{position:relative;flex-shrink:0;margin-right:12px;cursor:pointer;}.ant-comment .ant-comment-avatar img{width:32px;height:32px;border-radius:50%;}.ant-comment .ant-comment-content{position:relative;flex:1 1 auto;min-width:1px;font-size:14px;word-wrap:break-word;}.ant-comment .ant-comment-content-author{display:flex;flex-wrap:wrap;justify-content:flex-start;margin-bottom:4px;font-size:14px;}.ant-comment .ant-comment-content-author>a,.ant-comment .ant-comment-content-author>span{padding-right:8px;font-size:12px;line-height:18px;}.ant-comment .ant-comment-content-author-name{color:rgba(255, 255, 255, 0.45);font-size:14px;transition:color 0.3s;}.ant-comment .ant-comment-content-author-name >*{color:rgba(255, 255, 255, 0.45);}.ant-comment .ant-comment-content-author-name >*:hover{color:rgba(255, 255, 255, 0.45);}.ant-comment .ant-comment-content-author-time{color:rgba(255, 255, 255, 0.25);white-space:nowrap;cursor:auto;}.ant-comment .ant-comment-content-detail p{margin-bottom:inherit;white-space:pre-wrap;}.ant-comment .ant-comment-actions{margin-top:12px;margin-bottom:inherit;padding-left:0;}.ant-comment .ant-comment-actions >li{display:inline-block;color:rgba(255, 255, 255, 0.45);}.ant-comment .ant-comment-actions >li >span{margin-right:10px;color:rgba(255, 255, 255, 0.45);font-size:12px;cursor:pointer;transition:color 0.3s;user-select:none;}.ant-comment .ant-comment-actions >li >span:hover{color:rgba(255, 255, 255, 0.65);}.ant-comment .ant-comment-nested{margin-left:44px;}.ant-comment-rtl{direction:rtl;}[class^=\\"ant-picker\\"],[class*=\\" ant-picker\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-picker\\"]::before,[class*=\\" ant-picker\\"]::before,[class^=\\"ant-picker\\"]::after,[class*=\\" ant-picker\\"]::after{box-sizing:border-box;}[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"],[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"],[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"],[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]{box-sizing:border-box;}[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"]::before,[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"]::before,[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"]::before,[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]::before,[class^=\\"ant-picker\\"] [class^=\\"ant-picker\\"]::after,[class*=\\" ant-picker\\"] [class^=\\"ant-picker\\"]::after,[class^=\\"ant-picker\\"] [class*=\\" ant-picker\\"]::after,[class*=\\" ant-picker\\"] [class*=\\" ant-picker\\"]::after{box-sizing:border-box;}.ant-picker{box-sizing:border-box;margin:0;padding:4px 11px 4px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-flex;align-items:center;background:#141414;border:1px solid #424242;border-radius:6px;transition:border 0.2s,box-shadow 0.2s;}.ant-picker:hover,.ant-picker-focused{border-color:#198016;border-inline-end-width:1px;}.ant-picker-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-picker.ant-picker-disabled{background:rgba(255, 255, 255, 0.08);border-color:#424242;cursor:not-allowed;}.ant-picker.ant-picker-disabled .ant-picker-suffix{color:rgba(255, 255, 255, 0.25);}.ant-picker.ant-picker-borderless{background-color:transparent!important;border-color:transparent!important;box-shadow:none!important;}.ant-picker .ant-picker-input{position:relative;display:inline-flex;align-items:center;width:100%;}.ant-picker .ant-picker-input >input{position:relative;display:inline-block;width:100%;min-width:1px;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;flex:auto;height:auto;background:transparent;border:0;}.ant-picker .ant-picker-input >input::-moz-placeholder{opacity:1;}.ant-picker .ant-picker-input >input::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-picker .ant-picker-input >input:placeholder-shown{text-overflow:ellipsis;}.ant-picker .ant-picker-input >input:hover{border-color:#198016;border-inline-end-width:1px;}.ant-picker .ant-picker-input >input:focus,.ant-picker .ant-picker-input >input-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-picker .ant-picker-input >input-disabled,.ant-picker .ant-picker-input >input[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-picker .ant-picker-input >input-disabled:hover,.ant-picker .ant-picker-input >input[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-picker .ant-picker-input >input-borderless,.ant-picker .ant-picker-input >input-borderless:hover,.ant-picker .ant-picker-input >input-borderless:focus,.ant-picker .ant-picker-input >input-borderless-focused,.ant-picker .ant-picker-input >input-borderless-disabled,.ant-picker .ant-picker-input >input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-picker .ant-picker-input >input{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-picker .ant-picker-input >input-lg{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-picker .ant-picker-input >input-sm{padding:0px 7px;border-radius:4px;}.ant-picker .ant-picker-input >input-rtl{direction:rtl;}.ant-picker .ant-picker-input >input-textarea-rtl{direction:rtl;}.ant-picker .ant-picker-input >input:focus{box-shadow:none;}.ant-picker .ant-picker-input >input[disabled]{background:transparent;}.ant-picker .ant-picker-input:hover .ant-picker-clear{opacity:1;}.ant-picker .ant-picker-input-placeholder >input{color:rgba(255, 255, 255, 0.25);}.ant-picker-large{padding:6.5px 11px 6.5px;}.ant-picker-large .ant-picker-input>input{font-size:16px;}.ant-picker-small{padding:0px 7px 0px;}.ant-picker .ant-picker-suffix{display:flex;flex:none;align-self:center;margin-inline-start:4px;color:rgba(255, 255, 255, 0.25);line-height:1;pointer-events:none;}.ant-picker .ant-picker-suffix >*{vertical-align:top;}.ant-picker .ant-picker-suffix >*:not(:last-child){margin-inline-end:8px;}.ant-picker .ant-picker-clear{position:absolute;top:50%;inset-inline-end:0;color:rgba(255, 255, 255, 0.25);line-height:1;background:#141414;transform:translateY(-50%);cursor:pointer;opacity:0;transition:opacity 0.2s,color 0.2s;}.ant-picker .ant-picker-clear >*{vertical-align:top;}.ant-picker .ant-picker-clear:hover{color:rgba(255, 255, 255, 0.45);}.ant-picker .ant-picker-separator{position:relative;display:inline-block;width:1em;height:16px;color:rgba(255, 255, 255, 0.25);font-size:16px;vertical-align:top;cursor:default;}.ant-picker-focused .ant-picker .ant-picker-separator{color:rgba(255, 255, 255, 0.45);}.ant-picker-disabled .ant-picker-range-separator .ant-picker .ant-picker-separator{cursor:not-allowed;}.ant-picker-range{position:relative;display:inline-flex;}.ant-picker-range .ant-picker-clear{inset-inline-end:11px;}.ant-picker-range:hover .ant-picker-clear{opacity:1;}.ant-picker-range .ant-picker-active-bar{bottom:-1px;height:2px;margin-inline-start:11px;background:#037003;opacity:0;transition:all 0.3s ease-out;pointer-events:none;}.ant-picker-range.ant-picker-focused .ant-picker-active-bar{opacity:1;}.ant-picker-range .ant-picker-range-separator{align-items:center;padding:0 8px;line-height:1;}.ant-picker-range.ant-picker-small .ant-picker-clear{inset-inline-end:7px;}.ant-picker-range.ant-picker-small .ant-picker-active-bar{margin-inline-start:7px;}.ant-picker-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:-9999px;left:-9999px;z-index:1050;}.ant-picker-dropdown .ant-picker-panel{display:inline-flex;flex-direction:column;text-align:center;background:#141414;border:1px solid rgba(253, 253, 253, 0.12);border-radius:8px;outline:none;}.ant-picker-dropdown .ant-picker-panel-focused{border-color:#037003;}.ant-picker-dropdown .ant-picker-panel-rtl{direction:rtl;}.ant-picker-dropdown .ant-picker-panel-rtl .ant-picker-prev-icon,.ant-picker-dropdown .ant-picker-panel-rtl .ant-picker-super-prev-icon{transform:rotate(45deg);}.ant-picker-dropdown .ant-picker-panel-rtl .ant-picker-next-icon,.ant-picker-dropdown .ant-picker-panel-rtl .ant-picker-super-next-icon{transform:rotate(-135deg);}.ant-picker-dropdown .ant-picker-decade-panel,.ant-picker-dropdown .ant-picker-year-panel,.ant-picker-dropdown .ant-picker-quarter-panel,.ant-picker-dropdown .ant-picker-month-panel,.ant-picker-dropdown .ant-picker-week-panel,.ant-picker-dropdown .ant-picker-date-panel,.ant-picker-dropdown .ant-picker-time-panel{display:flex;flex-direction:column;width:280px;}.ant-picker-dropdown .ant-picker-header{display:flex;padding:0 8px;color:rgba(255, 255, 255, 0.85);border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-header >*{flex:none;}.ant-picker-dropdown .ant-picker-header button{padding:0;color:rgba(255, 255, 255, 0.45);line-height:40px;background:transparent;border:0;cursor:pointer;transition:color 0.2s;}.ant-picker-dropdown .ant-picker-header >button{min-width:1.6em;font-size:14px;}.ant-picker-dropdown .ant-picker-header >button:hover{color:rgba(255, 255, 255, 0.85);}.ant-picker-dropdown .ant-picker-header-view{flex:auto;font-weight:600;line-height:40px;}.ant-picker-dropdown .ant-picker-header-view button{color:inherit;font-weight:inherit;vertical-align:top;}.ant-picker-dropdown .ant-picker-header-view button:not(:first-child){margin-inline-start:8px;}.ant-picker-dropdown .ant-picker-header-view button:hover{color:#037003;}.ant-picker-dropdown .ant-picker-prev-icon,.ant-picker-dropdown .ant-picker-next-icon,.ant-picker-dropdown .ant-picker-super-prev-icon,.ant-picker-dropdown .ant-picker-super-next-icon{position:relative;display:inline-block;width:7px;height:7px;}.ant-picker-dropdown .ant-picker-prev-icon::before,.ant-picker-dropdown .ant-picker-next-icon::before,.ant-picker-dropdown .ant-picker-super-prev-icon::before,.ant-picker-dropdown .ant-picker-super-next-icon::before{position:absolute;top:0;inset-inline-start:0;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-block-start-width:1.5px;border-block-end-width:0;border-inline-start-width:1.5px;border-inline-end-width:0;content:\\"\\";}.ant-picker-dropdown .ant-picker-super-prev-icon::after,.ant-picker-dropdown .ant-picker-super-next-icon::after{position:absolute;top:4px;inset-inline-start:4px;display:inline-block;width:7px;height:7px;border:0 solid currentcolor;border-block-start-width:1.5px;border-block-end-width:0;border-inline-start-width:1.5px;border-inline-end-width:0;content:\\"\\";}.ant-picker-dropdown .ant-picker-prev-icon,.ant-picker-dropdown .ant-picker-super-prev-icon{transform:rotate(-45deg);}.ant-picker-dropdown .ant-picker-next-icon,.ant-picker-dropdown .ant-picker-super-next-icon{transform:rotate(135deg);}.ant-picker-dropdown .ant-picker-content{width:100%;table-layout:fixed;border-collapse:collapse;}.ant-picker-dropdown .ant-picker-content th,.ant-picker-dropdown .ant-picker-content td{position:relative;min-width:24px;font-weight:normal;}.ant-picker-dropdown .ant-picker-content th{height:32px;color:rgba(255, 255, 255, 0.85);vertical-align:middle;}.ant-picker-dropdown .ant-picker-cell{padding:4px 0;color:rgba(255, 255, 255, 0.25);cursor:pointer;}.ant-picker-dropdown .ant-picker-cell-in-view{color:rgba(255, 255, 255, 0.85);}.ant-picker-dropdown .ant-picker-cell::before{position:absolute;top:50%;inset-inline-start:0;inset-inline-end:0;z-index:1;height:24px;transform:translateY(-50%);transition:all 0.3s;content:\\"\\";}.ant-picker-dropdown .ant-picker-cell .ant-picker-cell-inner{position:relative;z-index:2;display:inline-block;min-width:24px;height:24px;line-height:24px;border-radius:4px;transition:background 0.2s,border 0.2s;}.ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-in-view) .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-cell:hover:not(.ant-picker-cell-selected):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end):not(.ant-picker-cell-range-hover-start):not(.ant-picker-cell-range-hover-end) .ant-picker-cell-inner{background:rgba(255, 255, 255, 0.08);}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-today .ant-picker-cell-inner::before{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:1;border:1px solid #037003;border-radius:4px;content:\\"\\";}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range{position:relative;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range::before{background:#111911;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end .ant-picker-cell-inner{color:#fff;background:#037003;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single)::before,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single)::before{background:#111911;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start::before{inset-inline-start:50%;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end::before{inset-inline-end:50%;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:not(.ant-picker-cell-in-range):not(.ant-picker-cell-range-start):not(.ant-picker-cell-range-end)::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start-single::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-end-near-hover::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-start.ant-picker-cell-range-end.ant-picker-cell-range-start-near-hover::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end.ant-picker-cell-range-end-single::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:not(.ant-picker-cell-in-range)::after{position:absolute;top:50%;z-index:0;height:24px;border-top:1px dashed #06d306;border-bottom:1px dashed #06d306;transform:translateY(-50%);transition:all 0.3s;content:\\"\\";}.ant-picker-dropdown .ant-picker-cell-range-hover-start::after,.ant-picker-dropdown .ant-picker-cell-range-hover-end::after,.ant-picker-dropdown .ant-picker-cell-range-hover::after{inset-inline-end:0;inset-inline-start:2px;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover::before,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start.ant-picker-cell-range-hover::before,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end.ant-picker-cell-range-hover::before,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single).ant-picker-cell-range-hover-start::before,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single).ant-picker-cell-range-hover-end::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start::before,.ant-picker-panel>:not(.ant-picker-date-panel) .ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end::before{background:#2cf92c;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-start:not(.ant-picker-cell-range-start-single):not(.ant-picker-cell-range-end) .ant-picker-cell-inner{border-start-start-radius:4px;border-end-start-radius:4px;border-start-end-radius:0;border-end-end-radius:0;}.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-end:not(.ant-picker-cell-range-end-single):not(.ant-picker-cell-range-start) .ant-picker-cell-inner{border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:4px;border-end-end-radius:4px;}.ant-picker-dropdown .ant-picker-cell-range-hover.ant-picker-cell-range-end::after{inset-inline-start:50%;}tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:first-child::after,tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end:first-child::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-start.ant-picker-cell-range-hover-edge-start.ant-picker-cell-range-hover-edge-start-near-range::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-start:not(.ant-picker-cell-range-hover-edge-start-near-range)::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start::after{inset-inline-start:6px;border-inline-start:1px dashed #06d306;border-start-start-radius:1px;border-end-start-radius:1px;}tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover:last-child::after,tr>.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-start:last-child::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-end.ant-picker-cell-range-hover-edge-end.ant-picker-cell-range-hover-edge-end-near-range::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-edge-end:not(.ant-picker-cell-range-hover-edge-end-near-range)::after,.ant-picker-dropdown .ant-picker-cell-in-view.ant-picker-cell-range-hover-end::after{inset-inline-end:6px;border-inline-end:1px dashed #06d306;border-start-end-radius:1px;border-end-end-radius:1px;}.ant-picker-dropdown .ant-picker-cell-disabled{color:rgba(255, 255, 255, 0.25);pointer-events:none;}.ant-picker-dropdown .ant-picker-cell-disabled .ant-picker-cell-inner{background:transparent;}.ant-picker-dropdown .ant-picker-cell-disabled::before{background:rgba(255, 255, 255, 0.08);}.ant-picker-dropdown .ant-picker-cell-disabled.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:rgba(255, 255, 255, 0.25);}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after,.ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after{position:absolute;top:0;bottom:0;z-index:-1;background:#2cf92c;transition:all 0.3s;content:\\"\\";}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-start .ant-picker-cell-inner::after{inset-inline-end:-6px;inset-inline-start:0;}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-cell-in-view.ant-picker-cell-in-range.ant-picker-cell-range-hover-end .ant-picker-cell-inner::after{inset-inline-end:0;inset-inline-start:-6px;}.ant-picker-dropdown .ant-picker-range-hover.ant-picker-range-start::after{inset-inline-end:50%;}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-content,.ant-picker-dropdown .ant-picker-year-panel .ant-picker-content,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-content,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-content{height:264px;}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{padding:0 8px;}.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-content{height:56px;}.ant-picker-dropdown .ant-picker-panel .ant-picker-footer{border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-footer{width:min-content;min-width:100%;line-height:38px;text-align:center;}.ant-picker-dropdown .ant-picker-footer-extra{padding:0 12;line-height:38px;text-align:start;}.ant-picker-dropdown .ant-picker-footer-extra:not(:last-child){border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-now{text-align:start;}.ant-picker-dropdown .ant-picker-today-btn{color:#1668dc;}.ant-picker-dropdown .ant-picker-today-btn:hover{color:#15417e;}.ant-picker-dropdown .ant-picker-today-btn:active{color:#1554ad;}.ant-picker-dropdown .ant-picker-today-btn.ant-picker-today-btn-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell-inner{padding:0 4px;}.ant-picker-dropdown .ant-picker-decade-panel .ant-picker-cell::before{display:none;}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-body,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-body,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-body{padding:0 8px;}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-inner{width:60px;}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-range-hover-start::after{inset-inline-start:16px;border-inline-start:1px dashed #06d306;border-start-start-radius:4px;border-bottom-start-radius:4px;border-start-end-radius:0;border-bottom-end-radius:0;}.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-range-hover-start::after,.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-range-hover-start::after{inset-inline-end:16px;border-inline-end:1px dashed #06d306;border-start-start-radius:0;border-bottom-start-radius:0;border-start-end-radius:4px;border-bottom-end-radius:4px;}.ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,.ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-range-hover-end::after{inset-inline-end:16px;border-inline-end:1px dashed #06d306;border-start-start-radius:0;border-end-start-radius:0;border-start-end-radius:6px;border-end-end-radius:6px;}.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-year-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-quarter-panel .ant-picker-cell-range-hover-end::after,.ant-picker-panel-rtl .ant-picker-dropdown .ant-picker-month-panel .ant-picker-cell-range-hover-end::after{inset-inline-start:16px;border-inline-start:1px dashed #06d306;border-start-start-radius:6px;border-end-start-radius:6px;border-start-end-radius:0;border-end-end-radius:0;}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-body{padding:8px 12px;}.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell:hover .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell-selected .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-week-panel .ant-picker-cell .ant-picker-cell-inner{background:transparent!important;}.ant-picker-dropdown .ant-picker-week-panel-row td{transition:background 0.2s;}.ant-picker-dropdown .ant-picker-week-panel-row td:first-child{border-start-start-radius:4px;border-end-start-radius:4px;}.ant-picker-dropdown .ant-picker-week-panel-row td:last-child{border-start-end-radius:4px;border-end-end-radius:4px;}.ant-picker-dropdown .ant-picker-week-panel-row:hover td{background:rgba(255, 255, 255, 0.08);}.ant-picker-dropdown .ant-picker-week-panel-row-selected td,.ant-picker-dropdown .ant-picker-week-panel-row-selected:hover td{background:#037003;}.ant-picker-dropdown .ant-picker-week-panel-row-selected td.ant-picker-cell-week,.ant-picker-dropdown .ant-picker-week-panel-row-selected:hover td.ant-picker-cell-week{color:#ffffff;}.ant-picker-dropdown .ant-picker-week-panel-row-selected td.ant-picker-cell-today .ant-picker-cell-inner::before,.ant-picker-dropdown .ant-picker-week-panel-row-selected:hover td.ant-picker-cell-today .ant-picker-cell-inner::before{border-color:#fff;}.ant-picker-dropdown .ant-picker-week-panel-row-selected td .ant-picker-cell-inner,.ant-picker-dropdown .ant-picker-week-panel-row-selected:hover td .ant-picker-cell-inner{color:#fff;}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-body{padding:8px 12px;}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-content{width:252px;}.ant-picker-dropdown .ant-picker-date-panel .ant-picker-content th{width:36px;}.ant-picker-dropdown .ant-picker-datetime-panel{display:flex;}.ant-picker-dropdown .ant-picker-datetime-panel .ant-picker-time-panel{border-inline-start:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-datetime-panel .ant-picker-date-panel,.ant-picker-dropdown .ant-picker-datetime-panel .ant-picker-time-panel{transition:opacity 0.3s;}.ant-picker-dropdown .ant-picker-datetime-panel-active .ant-picker-date-panel,.ant-picker-dropdown .ant-picker-datetime-panel-active .ant-picker-time-panel{opacity:0.3;}.ant-picker-dropdown .ant-picker-datetime-panel-active .ant-picker-date-panel-active,.ant-picker-dropdown .ant-picker-datetime-panel-active .ant-picker-time-panel-active{opacity:1;}.ant-picker-dropdown .ant-picker-time-panel{width:auto;min-width:auto;direction:ltr;}.ant-picker-dropdown .ant-picker-time-panel .ant-picker-content{display:flex;flex:auto;height:224px;}.ant-picker-dropdown .ant-picker-time-panel-column{flex:1 0 auto;width:56px;margin:4px 0;padding:0;overflow-y:hidden;text-align:start;list-style:none;transition:background 0.2s;overflow-x:hidden;}.ant-picker-dropdown .ant-picker-time-panel-column::after{display:block;height:196px;content:\\"\\";}.ant-picker-dropdown .ant-picker-time-panel-column:not(:first-child){border-inline-start:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-time-panel-column-active{background:#111911;}.ant-picker-dropdown .ant-picker-time-panel-column:hover{overflow-y:auto;}.ant-picker-dropdown .ant-picker-time-panel-column >li{margin:0;padding:0;}.ant-picker-dropdown .ant-picker-time-panel-column >li.ant-picker-time-panel-cell{margin-inline:4px;}.ant-picker-dropdown .ant-picker-time-panel-column >li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner{display:block;width:48px;height:28px;margin:0;padding-block:0;padding-inline-end:0;padding-inline-start:14px;color:rgba(255, 255, 255, 0.85);line-height:28px;border-radius:4px;cursor:pointer;transition:background 0.2s;}.ant-picker-dropdown .ant-picker-time-panel-column >li.ant-picker-time-panel-cell .ant-picker-time-panel-cell-inner:hover{background:rgba(255, 255, 255, 0.08);}.ant-picker-dropdown .ant-picker-time-panel-column >li.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner{background:#111911;}.ant-picker-dropdown .ant-picker-time-panel-column >li.ant-picker-time-panel-cell-disabled .ant-picker-time-panel-cell-inner{color:rgba(255, 255, 255, 0.25);background:transparent;cursor:not-allowed;}.ant-picker-dropdown .ant-picker-datetime-panel .ant-picker-time-panel-column:after{height:204px;}.ant-picker-dropdown.ant-picker-dropdown-hidden{display:none;}.ant-picker-dropdown.ant-picker-dropdown-placement-bottomLeft .ant-picker-range-arrow{top:0;display:block;transform:translateY(-100%);}.ant-picker-dropdown.ant-picker-dropdown-placement-topLeft .ant-picker-range-arrow{bottom:0;display:block;transform:translateY(100%) rotate(180deg);}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-topRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownIn;}.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-picker-dropdown-placement-bottomRight,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpIn;}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-topRight{animation-name:antSlideDownOut;}.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomLeft,.ant-picker-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-picker-dropdown-placement-bottomRight{animation-name:antSlideUpOut;}.ant-picker-dropdown .ant-picker-panel>.ant-picker-time-panel{padding-top:4px;}.ant-picker-dropdown .ant-picker-ranges{margin-bottom:0;padding:4px 12px;overflow:hidden;line-height:34px;text-align:start;list-style:none;display:flex;justify-content:space-between;}.ant-picker-dropdown .ant-picker-ranges >li{display:inline-block;}.ant-picker-dropdown .ant-picker-ranges .ant-picker-preset>.ant-tag-blue{color:#037003;background:#111911;border-color:#0e340e;cursor:pointer;}.ant-picker-dropdown .ant-picker-ranges .ant-picker-ok{margin-inline-start:auto;}.ant-picker-dropdown .ant-picker-range-wrapper{display:flex;position:relative;}.ant-picker-dropdown .ant-picker-range-arrow{position:absolute;z-index:1;display:none;margin-inline-start:16.5px;transition:left 0.3s ease-out;pointer-events:none;width:16px;height:16px;overflow:hidden;}.ant-picker-dropdown .ant-picker-range-arrow::after{content:\\"\\";position:absolute;width:8.970562748477143px;height:8.970562748477143px;bottom:0;inset-inline:0;margin:auto;border-radius:0 0 2px 0;transform:translateY(50%) rotate(-135deg);box-shadow:3px 3px 7px rgba(0, 0, 0, 0.1);z-index:0;background:transparent;}.ant-picker-dropdown .ant-picker-range-arrow::before{position:absolute;bottom:0;inset-inline-start:0;width:16px;height:8px;background:#1f1f1f;clip-path:polygon(1.6568542494923806px 100%, 50% 1.6568542494923806px, 14.34314575050762px 100%, 1.6568542494923806px 100%);clip-path:path('M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z');content:\\"\\";}.ant-picker-dropdown .ant-picker-panel-container{overflow:hidden;vertical-align:top;background:#1f1f1f;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);transition:margin 0.3s;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panel-layout{display:flex;flex-wrap:nowrap;align-items:stretch;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets{display:flex;flex-direction:column;min-width:120px;max-width:200px;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul{height:0;flex:auto;list-style:none;overflow:auto;margin:0;padding:8px;border-inline-end:1px solid rgba(253, 253, 253, 0.12);}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul li{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;border-radius:4px;padding-inline:8px;padding-block:1px;cursor:pointer;transition:all 0.3s;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul li +li{margin-top:8px;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-presets ul li:hover{background:rgba(255, 255, 255, 0.08);}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panels{display:inline-flex;flex-wrap:nowrap;direction:ltr;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panels .ant-picker-panel{border-width:0 0 1px;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panels:last-child .ant-picker-panel{border-width:0;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panel{vertical-align:top;background:transparent;border-radius:0;border-width:0;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panel .ant-picker-content,.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panel table{text-align:center;}.ant-picker-dropdown .ant-picker-panel-container .ant-picker-panel-focused{border-color:#424242;}.ant-picker-dropdown-range{padding:10.666666666666666px 0;}.ant-picker-dropdown-range-hidden{display:none;}.ant-picker-rtl{direction:rtl;}.ant-picker-rtl .ant-picker-separator{transform:rotate(180deg);}.ant-picker-rtl .ant-picker-footer-extra{direction:rtl;}.ant-slide-up-enter,.ant-slide-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running;}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none;}.ant-slide-up-enter,.ant-slide-up-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-up-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-slide-down-enter,.ant-slide-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running;}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none;}.ant-slide-down-enter,.ant-slide-down-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-down-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-move-up-enter,.ant-move-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running;}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none;}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-up-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-move-down-enter,.ant-move-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running;}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none;}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-down-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-picker-status-error.ant-picker,.ant-picker-status-error.ant-picker:not([disabled]):hover{background-color:#141414;border-color:#dc4446;}.ant-picker-status-error.ant-picker-focused,.ant-picker-status-error.ant-picker:focus{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-picker-status-error.ant-picker .ant-picker-active-bar{background:#dc4446;}.ant-picker-status-warning.ant-picker,.ant-picker-status-warning.ant-picker:not([disabled]):hover{background-color:#141414;border-color:#d89614;}.ant-picker-status-warning.ant-picker-focused,.ant-picker-status-warning.ant-picker:focus{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-picker-status-warning.ant-picker .ant-picker-active-bar{background:#d89614;}.ant-picker-compact-item:not(.ant-picker-compact-last-item){margin-inline-end:-1px;}.ant-picker-compact-item:hover,.ant-picker-compact-item:active{z-index:2;}.ant-picker-compact-item.ant-picker-focused{z-index:2;}.ant-picker-compact-item[disabled]{z-index:0;}.ant-picker-compact-item:not(.ant-picker-compact-first-item):not(.ant-picker-compact-last-item){border-radius:0;}.ant-picker-compact-item:not(.ant-picker-compact-last-item).ant-picker-compact-first-item,.ant-picker-compact-item:not(.ant-picker-compact-last-item).ant-picker-compact-first-item.ant-picker-sm,.ant-picker-compact-item:not(.ant-picker-compact-last-item).ant-picker-compact-first-item.ant-picker-lg{border-start-end-radius:0;border-end-end-radius:0;}.ant-picker-compact-item:not(.ant-picker-compact-first-item).ant-picker-compact-last-item,.ant-picker-compact-item:not(.ant-picker-compact-first-item).ant-picker-compact-last-item.ant-picker-sm,.ant-picker-compact-item:not(.ant-picker-compact-first-item).ant-picker-compact-last-item.ant-picker-lg{border-start-start-radius:0;border-end-start-radius:0;}[class^=\\"ant-descriptions\\"],[class*=\\" ant-descriptions\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-descriptions\\"]::before,[class*=\\" ant-descriptions\\"]::before,[class^=\\"ant-descriptions\\"]::after,[class*=\\" ant-descriptions\\"]::after{box-sizing:border-box;}[class^=\\"ant-descriptions\\"] [class^=\\"ant-descriptions\\"],[class*=\\" ant-descriptions\\"] [class^=\\"ant-descriptions\\"],[class^=\\"ant-descriptions\\"] [class*=\\" ant-descriptions\\"],[class*=\\" ant-descriptions\\"] [class*=\\" ant-descriptions\\"]{box-sizing:border-box;}[class^=\\"ant-descriptions\\"] [class^=\\"ant-descriptions\\"]::before,[class*=\\" ant-descriptions\\"] [class^=\\"ant-descriptions\\"]::before,[class^=\\"ant-descriptions\\"] [class*=\\" ant-descriptions\\"]::before,[class*=\\" ant-descriptions\\"] [class*=\\" ant-descriptions\\"]::before,[class^=\\"ant-descriptions\\"] [class^=\\"ant-descriptions\\"]::after,[class*=\\" ant-descriptions\\"] [class^=\\"ant-descriptions\\"]::after,[class^=\\"ant-descriptions\\"] [class*=\\" ant-descriptions\\"]::after,[class*=\\" ant-descriptions\\"] [class*=\\" ant-descriptions\\"]::after{box-sizing:border-box;}.ant-descriptions{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-view{border:1px solid rgba(253, 253, 253, 0.12);}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-view >table{table-layout:auto;border-collapse:collapse;}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-label,.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-content{padding:16px 24px;border-inline-end:1px solid rgba(253, 253, 253, 0.12);}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-label:last-child,.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-content:last-child{border-inline-end:none;}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-label{background-color:rgba(255, 255, 255, 0.04);}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-item-label::after{display:none;}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-row{border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-descriptions.ant-descriptions-bordered .ant-descriptions-row:last-child{border-bottom:none;}.ant-descriptions.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-label,.ant-descriptions.ant-descriptions-bordered.ant-descriptions-middle .ant-descriptions-item-content{padding:12px 24px;}.ant-descriptions.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-label,.ant-descriptions.ant-descriptions-bordered.ant-descriptions-small .ant-descriptions-item-content{padding:8px 16px;}.ant-descriptions-rtl{direction:rtl;}.ant-descriptions .ant-descriptions-header{display:flex;align-items:center;margin-bottom:20px;}.ant-descriptions .ant-descriptions-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:auto;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;line-height:1.5;}.ant-descriptions .ant-descriptions-extra{margin-inline-start:auto;color:rgba(255, 255, 255, 0.85);font-size:14px;}.ant-descriptions .ant-descriptions-view{width:100%;border-radius:8px;}.ant-descriptions .ant-descriptions-view table{width:100%;table-layout:fixed;}.ant-descriptions .ant-descriptions-row >th,.ant-descriptions .ant-descriptions-row >td{padding-bottom:16px;}.ant-descriptions .ant-descriptions-row:last-child{border-bottom:none;}.ant-descriptions .ant-descriptions-item-label{color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;line-height:1.5714285714285714;text-align:start;}.ant-descriptions .ant-descriptions-item-label::after{content:\\":\\";position:relative;top:-0.5px;margin-inline:2px 8px;}.ant-descriptions .ant-descriptions-item-label.ant-descriptions-item-no-colon::after{content:\\"\\";}.ant-descriptions .ant-descriptions-item-no-label::after{margin:0;content:\\"\\";}.ant-descriptions .ant-descriptions-item-content{display:table-cell;flex:1;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;word-break:break-word;overflow-wrap:break-word;}.ant-descriptions .ant-descriptions-item{padding-bottom:0;vertical-align:top;}.ant-descriptions .ant-descriptions-item-container{display:flex;}.ant-descriptions .ant-descriptions-item-container .ant-descriptions-item-label{display:inline-flex;align-items:baseline;}.ant-descriptions .ant-descriptions-item-container .ant-descriptions-item-content{display:inline-flex;align-items:baseline;}.ant-descriptions-middle .ant-descriptions-row >th,.ant-descriptions-middle .ant-descriptions-row >td{padding-bottom:12px;}.ant-descriptions-small .ant-descriptions-row >th,.ant-descriptions-small .ant-descriptions-row >td{padding-bottom:8px;}[class^=\\"ant-divider\\"],[class*=\\" ant-divider\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-divider\\"]::before,[class*=\\" ant-divider\\"]::before,[class^=\\"ant-divider\\"]::after,[class*=\\" ant-divider\\"]::after{box-sizing:border-box;}[class^=\\"ant-divider\\"] [class^=\\"ant-divider\\"],[class*=\\" ant-divider\\"] [class^=\\"ant-divider\\"],[class^=\\"ant-divider\\"] [class*=\\" ant-divider\\"],[class*=\\" ant-divider\\"] [class*=\\" ant-divider\\"]{box-sizing:border-box;}[class^=\\"ant-divider\\"] [class^=\\"ant-divider\\"]::before,[class*=\\" ant-divider\\"] [class^=\\"ant-divider\\"]::before,[class^=\\"ant-divider\\"] [class*=\\" ant-divider\\"]::before,[class*=\\" ant-divider\\"] [class*=\\" ant-divider\\"]::before,[class^=\\"ant-divider\\"] [class^=\\"ant-divider\\"]::after,[class*=\\" ant-divider\\"] [class^=\\"ant-divider\\"]::after,[class^=\\"ant-divider\\"] [class*=\\" ant-divider\\"]::after,[class*=\\" ant-divider\\"] [class*=\\" ant-divider\\"]::after{box-sizing:border-box;}.ant-divider{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';border-block-start:1px solid rgba(253, 253, 253, 0.12);}.ant-divider-vertical{position:relative;top:-0.06em;display:inline-block;height:0.9em;margin:0 8px;vertical-align:middle;border-top:0;border-inline-start:1px solid rgba(253, 253, 253, 0.12);}.ant-divider-horizontal{display:flex;clear:both;width:100%;min-width:100%;margin:24px 0;}.ant-divider-horizontal.ant-divider-with-text{display:flex;align-items:center;margin:16px 0;color:rgba(255, 255, 255, 0.85);font-weight:500;font-size:16px;white-space:nowrap;text-align:center;border-block-start:0 rgba(253, 253, 253, 0.12);}.ant-divider-horizontal.ant-divider-with-text::before,.ant-divider-horizontal.ant-divider-with-text::after{position:relative;width:50%;border-block-start:1px solid transparent;border-block-start-color:inherit;border-block-end:0;transform:translateY(50%);content:'';}.ant-divider-horizontal.ant-divider-with-text-left::before{width:5%;}.ant-divider-horizontal.ant-divider-with-text-left::after{width:95%;}.ant-divider-horizontal.ant-divider-with-text-right::before{width:95%;}.ant-divider-horizontal.ant-divider-with-text-right::after{width:5%;}.ant-divider .ant-divider-inner-text{display:inline-block;padding:0 1em;}.ant-divider-dashed{background:none;border-color:rgba(253, 253, 253, 0.12);border-style:dashed;border-width:1px 0 0;}.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::before,.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed::after{border-style:dashed none none;}.ant-divider-vertical.ant-divider-dashed{border-inline-start:1px;border-inline-end:0;border-block-start:0;border-block-end:0;}.ant-divider-plain.ant-divider-with-text{color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::before{width:0;}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left::after{width:100%;}.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-no-default-orientation-margin-left .ant-divider-inner-text{padding-inline-start:0;}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::before{width:100%;}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right::after{width:0;}.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-no-default-orientation-margin-right .ant-divider-inner-text{padding-inline-end:0;}[class^=\\"ant-dropdown\\"],[class*=\\" ant-dropdown\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-dropdown\\"]::before,[class*=\\" ant-dropdown\\"]::before,[class^=\\"ant-dropdown\\"]::after,[class*=\\" ant-dropdown\\"]::after{box-sizing:border-box;}[class^=\\"ant-dropdown\\"] [class^=\\"ant-dropdown\\"],[class*=\\" ant-dropdown\\"] [class^=\\"ant-dropdown\\"],[class^=\\"ant-dropdown\\"] [class*=\\" ant-dropdown\\"],[class*=\\" ant-dropdown\\"] [class*=\\" ant-dropdown\\"]{box-sizing:border-box;}[class^=\\"ant-dropdown\\"] [class^=\\"ant-dropdown\\"]::before,[class*=\\" ant-dropdown\\"] [class^=\\"ant-dropdown\\"]::before,[class^=\\"ant-dropdown\\"] [class*=\\" ant-dropdown\\"]::before,[class*=\\" ant-dropdown\\"] [class*=\\" ant-dropdown\\"]::before,[class^=\\"ant-dropdown\\"] [class^=\\"ant-dropdown\\"]::after,[class*=\\" ant-dropdown\\"] [class^=\\"ant-dropdown\\"]::after,[class^=\\"ant-dropdown\\"] [class*=\\" ant-dropdown\\"]::after,[class*=\\" ant-dropdown\\"] [class*=\\" ant-dropdown\\"]::after{box-sizing:border-box;}.ant-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block;}.ant-dropdown::before{position:absolute;inset-block:-4px;z-index:-9999;opacity:0.0001;content:\\"\\";}.ant-dropdown .ant-dropdown-wrap{position:relative;}.ant-dropdown .ant-dropdown-wrap .ant-btn>.anticon-down{font-size:12px;}.ant-dropdown .ant-dropdown-wrap .anticon-down::before{transition:transform 0.2s;}.ant-dropdown .ant-dropdown-wrap-open .anticon-down::before{transform:rotate(180deg);}.ant-dropdown-hidden,.ant-dropdown-menu-hidden,.ant-dropdown-menu-submenu-hidden{display:none;}.ant-dropdown-show-arrow.ant-dropdown-placement-topLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-top,.ant-dropdown-show-arrow.ant-dropdown-placement-topRight{padding-bottom:12px;}.ant-dropdown-show-arrow.ant-dropdown-placement-bottomLeft,.ant-dropdown-show-arrow.ant-dropdown-placement-bottom,.ant-dropdown-show-arrow.ant-dropdown-placement-bottomRight{padding-top:12px;}.ant-dropdown .ant-dropdown-arrow{position:absolute;z-index:1;display:block;pointer-events:none;width:16px;height:16px;overflow:hidden;}.ant-dropdown .ant-dropdown-arrow::after{content:\\"\\";position:absolute;width:8.970562748477143px;height:8.970562748477143px;bottom:0;inset-inline:0;margin:auto;border-radius:0 0 2px 0;transform:translateY(50%) rotate(-135deg);box-shadow:3px 3px 7px rgba(0, 0, 0, 0.1);z-index:0;background:transparent;}.ant-dropdown .ant-dropdown-arrow::before{position:absolute;bottom:0;inset-inline-start:0;width:16px;height:8px;background:#1f1f1f;clip-path:polygon(1.6568542494923806px 100%, 50% 1.6568542494923806px, 14.34314575050762px 100%, 1.6568542494923806px 100%);clip-path:path('M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z');content:\\"\\";}.ant-dropdown-placement-top>.ant-dropdown-arrow,.ant-dropdown-placement-topLeft>.ant-dropdown-arrow,.ant-dropdown-placement-topRight>.ant-dropdown-arrow{bottom:12px;transform:translateY(100%) rotate(180deg);}.ant-dropdown-placement-top>.ant-dropdown-arrow{left:50%;transform:translateX(-50%) translateY(100%) rotate(180deg);}.ant-dropdown-placement-topLeft>.ant-dropdown-arrow{left:6px;}.ant-dropdown-placement-topRight>.ant-dropdown-arrow{right:6px;}.ant-dropdown-placement-bottom>.ant-dropdown-arrow,.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow,.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{top:12px;transform:translateY(-100%);}.ant-dropdown-placement-bottom>.ant-dropdown-arrow{left:50%;transform:translateY(-100%) translateX(-50%);}.ant-dropdown-placement-bottomLeft>.ant-dropdown-arrow{left:6px;}.ant-dropdown-placement-bottomRight>.ant-dropdown-arrow{right:6px;}.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottom,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottom,.ant-dropdown.ant-slide-down-enter.ant-slide-down-enter-active.ant-dropdown-placement-bottomRight,.ant-dropdown.ant-slide-down-appear.ant-slide-down-appear-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpIn;}.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-top,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-top,.ant-dropdown.ant-slide-up-enter.ant-slide-up-enter-active.ant-dropdown-placement-topRight,.ant-dropdown.ant-slide-up-appear.ant-slide-up-appear-active.ant-dropdown-placement-topRight{animation-name:antSlideDownIn;}.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomLeft,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottom,.ant-dropdown.ant-slide-down-leave.ant-slide-down-leave-active.ant-dropdown-placement-bottomRight{animation-name:antSlideUpOut;}.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topLeft,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-top,.ant-dropdown.ant-slide-up-leave.ant-slide-up-leave-active.ant-dropdown-placement-topRight{animation-name:antSlideDownOut;}.ant-dropdown .ant-dropdown-menu{position:relative;margin:0;}.ant-dropdown-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;box-shadow:none;transform-origin:0 0;}.ant-dropdown-menu-submenu-popup ul,.ant-dropdown-menu-submenu-popup li{list-style:none;}.ant-dropdown-menu-submenu-popup ul{margin-inline:0.3em;}.ant-dropdown .ant-dropdown-menu,.ant-dropdown-menu-submenu .ant-dropdown-menu{padding:4px;list-style-type:none;background-color:#1f1f1f;background-clip:padding-box;border-radius:8px;outline:none;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-dropdown .ant-dropdown-menu:focus-visible,.ant-dropdown-menu-submenu .ant-dropdown-menu:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-group-title,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-group-title{padding:5px 12px;color:rgba(255, 255, 255, 0.45);transition:all 0.2s;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item{position:relative;display:flex;align-items:center;border-radius:4px;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-icon{min-width:14px;margin-inline-end:8px;font-size:12px;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-title-content,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-title-content{flex:auto;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-title-content >a,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-title-content >a{color:inherit;transition:all 0.2s;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-title-content >a:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-title-content >a:hover{color:inherit;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-title-content >a::after,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-title-content >a::after{position:absolute;inset:0;content:\\"\\";}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title{clear:both;margin:0;padding:5px 12px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;line-height:1.5714285714285714;cursor:pointer;transition:all 0.2s;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item:hover,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title:hover,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-active,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-active,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-active,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-active{background-color:rgba(255, 255, 255, 0.08);}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item:focus-visible,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item:focus-visible,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title:focus-visible,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-selected,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-selected,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected{color:#037003;background-color:#111911;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-selected:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-selected:hover,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected:hover,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-selected-active,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-selected-active,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected-active,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-selected-active{background-color:#0f2510;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-disabled,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-disabled,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-disabled:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-disabled:hover,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled:hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled:hover{color:rgba(255, 255, 255, 0.25);background-color:#1f1f1f;cursor:not-allowed;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-disabled a,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-disabled a,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled a,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-disabled a{pointer-events:none;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-divider,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title-divider,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title-divider{height:1px;margin:4px 0;overflow:hidden;line-height:0;background-color:rgba(253, 253, 253, 0.12);}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon{position:absolute;inset-inline-end:8px;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-expand-icon .ant-dropdown-menu-submenu-arrow-icon{margin-inline-end:0!important;color:rgba(255, 255, 255, 0.45);font-size:12px;font-style:normal;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item-group-list,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item-group-list{margin:0 8px;padding:0;list-style:none;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-title{padding-inline-end:24px;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-vertical,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-vertical{position:relative;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title,.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon{color:rgba(255, 255, 255, 0.25);background-color:#1f1f1f;cursor:not-allowed;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-submenu-selected .ant-dropdown-menu-submenu-title{color:#037003;}.ant-slide-up-enter,.ant-slide-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running;}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none;}.ant-slide-up-enter,.ant-slide-up-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-up-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-slide-down-enter,.ant-slide-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running;}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none;}.ant-slide-down-enter,.ant-slide-down-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-down-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-move-up-enter,.ant-move-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-up-enter.ant-move-up-enter-active,.ant-move-up-appear.ant-move-up-appear-active{animation-name:antMoveUpIn;animation-play-state:running;}.ant-move-up-leave.ant-move-up-leave-active{animation-name:antMoveUpOut;animation-play-state:running;pointer-events:none;}.ant-move-up-enter,.ant-move-up-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-up-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-move-down-enter,.ant-move-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-move-down-enter.ant-move-down-enter-active,.ant-move-down-appear.ant-move-down-appear-active{animation-name:antMoveDownIn;animation-play-state:running;}.ant-move-down-leave.ant-move-down-leave-active{animation-name:antMoveDownOut;animation-play-state:running;pointer-events:none;}.ant-move-down-enter,.ant-move-down-appear{opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-move-down-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-zoom-big-enter,.ant-zoom-big-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running;}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none;}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none;}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-dropdown-button{white-space:nowrap;}.ant-dropdown-button.ant-btn-group>.ant-btn-loading,.ant-dropdown-button.ant-btn-group>.ant-btn-loading+.ant-btn{cursor:default;pointer-events:none;opacity:0.65;}.ant-dropdown-button.ant-btn-group>.ant-btn:last-child:not(:first-child):not(.ant-btn-icon-only){padding-inline:8px;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-danger:not(.ant-dropdown-menu-item-disabled),.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-danger:not(.ant-dropdown-menu-item-disabled){color:#dc4446;}.ant-dropdown .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-danger:not(.ant-dropdown-menu-item-disabled):hover,.ant-dropdown-menu-submenu .ant-dropdown-menu .ant-dropdown-menu-item.ant-dropdown-menu-item-danger:not(.ant-dropdown-menu-item-disabled):hover{color:#fff;background-color:#dc4446;}@keyframes antZoomBigIn{0%{transform:scale(0.8);opacity:0;}100%{transform:scale(1);opacity:1;}}@keyframes antZoomBigOut{0%{transform:scale(1);}100%{transform:scale(0.8);opacity:0;}}[class^=\\"ant-drawer\\"],[class*=\\" ant-drawer\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-drawer\\"]::before,[class*=\\" ant-drawer\\"]::before,[class^=\\"ant-drawer\\"]::after,[class*=\\" ant-drawer\\"]::after{box-sizing:border-box;}[class^=\\"ant-drawer\\"] [class^=\\"ant-drawer\\"],[class*=\\" ant-drawer\\"] [class^=\\"ant-drawer\\"],[class^=\\"ant-drawer\\"] [class*=\\" ant-drawer\\"],[class*=\\" ant-drawer\\"] [class*=\\" ant-drawer\\"]{box-sizing:border-box;}[class^=\\"ant-drawer\\"] [class^=\\"ant-drawer\\"]::before,[class*=\\" ant-drawer\\"] [class^=\\"ant-drawer\\"]::before,[class^=\\"ant-drawer\\"] [class*=\\" ant-drawer\\"]::before,[class*=\\" ant-drawer\\"] [class*=\\" ant-drawer\\"]::before,[class^=\\"ant-drawer\\"] [class^=\\"ant-drawer\\"]::after,[class*=\\" ant-drawer\\"] [class^=\\"ant-drawer\\"]::after,[class^=\\"ant-drawer\\"] [class*=\\" ant-drawer\\"]::after,[class*=\\" ant-drawer\\"] [class*=\\" ant-drawer\\"]::after{box-sizing:border-box;}.ant-drawer{position:fixed;inset:0;z-index:1000;pointer-events:none;}.ant-drawer-pure{position:relative;background:#1f1f1f;}.ant-drawer-pure.ant-drawer-left{box-shadow:6px 0 16px 0 rgba(0, 0, 0, 0.08),3px 0 6px -4px rgba(0, 0, 0, 0.12),9px 0 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-pure.ant-drawer-right{box-shadow:-6px 0 16px 0 rgba(0, 0, 0, 0.08),-3px 0 6px -4px rgba(0, 0, 0, 0.12),-9px 0 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-pure.ant-drawer-top{box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-pure.ant-drawer-bottom{box-shadow:0 -6px 16px 0 rgba(0, 0, 0, 0.08),0 -3px 6px -4px rgba(0, 0, 0, 0.12),0 -9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-inline{position:absolute;}.ant-drawer .ant-drawer-mask{position:absolute;inset:0;z-index:1000;background:rgba(0, 0, 0, 0.45);pointer-events:auto;}.ant-drawer .ant-drawer-content-wrapper{position:absolute;z-index:1000;transition:all 0.3s;}.ant-drawer .ant-drawer-content-wrapper-hidden{display:none;}.ant-drawer-left>.ant-drawer-content-wrapper{top:0;bottom:0;left:0;box-shadow:6px 0 16px 0 rgba(0, 0, 0, 0.08),3px 0 6px -4px rgba(0, 0, 0, 0.12),9px 0 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-right>.ant-drawer-content-wrapper{top:0;right:0;bottom:0;box-shadow:-6px 0 16px 0 rgba(0, 0, 0, 0.08),-3px 0 6px -4px rgba(0, 0, 0, 0.12),-9px 0 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-top>.ant-drawer-content-wrapper{top:0;inset-inline:0;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer-bottom>.ant-drawer-content-wrapper{bottom:0;inset-inline:0;box-shadow:0 -6px 16px 0 rgba(0, 0, 0, 0.08),0 -3px 6px -4px rgba(0, 0, 0, 0.12),0 -9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-drawer .ant-drawer-content{width:100%;height:100%;overflow:auto;background:#1f1f1f;pointer-events:auto;}.ant-drawer .ant-drawer-wrapper-body{display:flex;flex-direction:column;width:100%;height:100%;}.ant-drawer .ant-drawer-header{display:flex;flex:0;align-items:center;padding:16px 24px;font-size:16px;line-height:1.5;border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-drawer .ant-drawer-header-title{display:flex;flex:1;align-items:center;min-width:0;min-height:0;}.ant-drawer .ant-drawer-extra{flex:none;}.ant-drawer .ant-drawer-close{display:inline-block;margin-inline-end:12px;color:rgba(255, 255, 255, 0.45);font-weight:600;font-size:16px;font-style:normal;line-height:1;text-align:center;text-transform:none;text-decoration:none;background:transparent;border:0;outline:0;cursor:pointer;transition:color 0.2s;text-rendering:auto;}.ant-drawer .ant-drawer-close:focus,.ant-drawer .ant-drawer-close:hover{color:rgba(255, 255, 255, 0.85);text-decoration:none;}.ant-drawer .ant-drawer-title{flex:1;margin:0;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;line-height:1.5;}.ant-drawer .ant-drawer-body{flex:1;min-width:0;min-height:0;padding:24px;overflow:auto;}.ant-drawer .ant-drawer-footer{flex-shrink:0;padding:8px 16px;border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-drawer-rtl{direction:rtl;}.ant-drawer .ant-drawer-mask-motion-enter-active,.ant-drawer .ant-drawer-mask-motion-appear-active,.ant-drawer .ant-drawer-mask-motion-leave-active{transition:all 0.3s;}.ant-drawer .ant-drawer-mask-motion-enter,.ant-drawer .ant-drawer-mask-motion-appear{opacity:0;}.ant-drawer .ant-drawer-mask-motion-enter-active,.ant-drawer .ant-drawer-mask-motion-appear-active{opacity:1;}.ant-drawer .ant-drawer-mask-motion-leave{opacity:1;}.ant-drawer .ant-drawer-mask-motion-leave-active{opacity:0;}.ant-drawer .ant-drawer-panel-motion-left-enter-start,.ant-drawer .ant-drawer-panel-motion-left-appear-start,.ant-drawer .ant-drawer-panel-motion-left-leave-start{transition:none;}.ant-drawer .ant-drawer-panel-motion-left-enter-active,.ant-drawer .ant-drawer-panel-motion-left-appear-active,.ant-drawer .ant-drawer-panel-motion-left-leave-active{transition:all 0.3s;}.ant-drawer .ant-drawer-panel-motion-left-enter-start,.ant-drawer .ant-drawer-panel-motion-left-appear-start{transform:translateX(-100%)!important;}.ant-drawer .ant-drawer-panel-motion-left-enter-active,.ant-drawer .ant-drawer-panel-motion-left-appear-active{transform:translateX(0);}.ant-drawer .ant-drawer-panel-motion-left-leave{transform:translateX(0);}.ant-drawer .ant-drawer-panel-motion-left-leave-active{transform:translateX(-100%);}.ant-drawer .ant-drawer-panel-motion-right-enter-start,.ant-drawer .ant-drawer-panel-motion-right-appear-start,.ant-drawer .ant-drawer-panel-motion-right-leave-start{transition:none;}.ant-drawer .ant-drawer-panel-motion-right-enter-active,.ant-drawer .ant-drawer-panel-motion-right-appear-active,.ant-drawer .ant-drawer-panel-motion-right-leave-active{transition:all 0.3s;}.ant-drawer .ant-drawer-panel-motion-right-enter-start,.ant-drawer .ant-drawer-panel-motion-right-appear-start{transform:translateX(100%)!important;}.ant-drawer .ant-drawer-panel-motion-right-enter-active,.ant-drawer .ant-drawer-panel-motion-right-appear-active{transform:translateX(0);}.ant-drawer .ant-drawer-panel-motion-right-leave{transform:translateX(0);}.ant-drawer .ant-drawer-panel-motion-right-leave-active{transform:translateX(100%);}.ant-drawer .ant-drawer-panel-motion-top-enter-start,.ant-drawer .ant-drawer-panel-motion-top-appear-start,.ant-drawer .ant-drawer-panel-motion-top-leave-start{transition:none;}.ant-drawer .ant-drawer-panel-motion-top-enter-active,.ant-drawer .ant-drawer-panel-motion-top-appear-active,.ant-drawer .ant-drawer-panel-motion-top-leave-active{transition:all 0.3s;}.ant-drawer .ant-drawer-panel-motion-top-enter-start,.ant-drawer .ant-drawer-panel-motion-top-appear-start{transform:translateY(-100%)!important;}.ant-drawer .ant-drawer-panel-motion-top-enter-active,.ant-drawer .ant-drawer-panel-motion-top-appear-active{transform:translateY(0);}.ant-drawer .ant-drawer-panel-motion-top-leave{transform:translateY(0);}.ant-drawer .ant-drawer-panel-motion-top-leave-active{transform:translateY(-100%);}.ant-drawer .ant-drawer-panel-motion-bottom-enter-start,.ant-drawer .ant-drawer-panel-motion-bottom-appear-start,.ant-drawer .ant-drawer-panel-motion-bottom-leave-start{transition:none;}.ant-drawer .ant-drawer-panel-motion-bottom-enter-active,.ant-drawer .ant-drawer-panel-motion-bottom-appear-active,.ant-drawer .ant-drawer-panel-motion-bottom-leave-active{transition:all 0.3s;}.ant-drawer .ant-drawer-panel-motion-bottom-enter-start,.ant-drawer .ant-drawer-panel-motion-bottom-appear-start{transform:translateY(100%)!important;}.ant-drawer .ant-drawer-panel-motion-bottom-enter-active,.ant-drawer .ant-drawer-panel-motion-bottom-appear-active{transform:translateY(0);}.ant-drawer .ant-drawer-panel-motion-bottom-leave{transform:translateY(0);}.ant-drawer .ant-drawer-panel-motion-bottom-leave-active{transform:translateY(100%);}[class^=\\"ant-empty\\"],[class*=\\" ant-empty\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-empty\\"]::before,[class*=\\" ant-empty\\"]::before,[class^=\\"ant-empty\\"]::after,[class*=\\" ant-empty\\"]::after{box-sizing:border-box;}[class^=\\"ant-empty\\"] [class^=\\"ant-empty\\"],[class*=\\" ant-empty\\"] [class^=\\"ant-empty\\"],[class^=\\"ant-empty\\"] [class*=\\" ant-empty\\"],[class*=\\" ant-empty\\"] [class*=\\" ant-empty\\"]{box-sizing:border-box;}[class^=\\"ant-empty\\"] [class^=\\"ant-empty\\"]::before,[class*=\\" ant-empty\\"] [class^=\\"ant-empty\\"]::before,[class^=\\"ant-empty\\"] [class*=\\" ant-empty\\"]::before,[class*=\\" ant-empty\\"] [class*=\\" ant-empty\\"]::before,[class^=\\"ant-empty\\"] [class^=\\"ant-empty\\"]::after,[class*=\\" ant-empty\\"] [class^=\\"ant-empty\\"]::after,[class^=\\"ant-empty\\"] [class*=\\" ant-empty\\"]::after,[class*=\\" ant-empty\\"] [class*=\\" ant-empty\\"]::after{box-sizing:border-box;}.ant-empty{margin-inline:8px;font-size:14px;line-height:1.5714285714285714;text-align:center;}.ant-empty .ant-empty-image{height:100px;margin-bottom:8px;opacity:1;}.ant-empty .ant-empty-image img{height:100%;}.ant-empty .ant-empty-image svg{height:100%;margin:auto;}.ant-empty .ant-empty-footer{margin-top:16px;}.ant-empty-normal{margin-block:32px;color:rgba(255, 255, 255, 0.25);}.ant-empty-normal .ant-empty-image{height:40px;}.ant-empty-small{margin-block:8px;color:rgba(255, 255, 255, 0.25);}.ant-empty-small .ant-empty-image{height:35px;}[class^=\\"ant-float-btn\\"],[class*=\\" ant-float-btn\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-float-btn\\"]::before,[class*=\\" ant-float-btn\\"]::before,[class^=\\"ant-float-btn\\"]::after,[class*=\\" ant-float-btn\\"]::after{box-sizing:border-box;}[class^=\\"ant-float-btn\\"] [class^=\\"ant-float-btn\\"],[class*=\\" ant-float-btn\\"] [class^=\\"ant-float-btn\\"],[class^=\\"ant-float-btn\\"] [class*=\\" ant-float-btn\\"],[class*=\\" ant-float-btn\\"] [class*=\\" ant-float-btn\\"]{box-sizing:border-box;}[class^=\\"ant-float-btn\\"] [class^=\\"ant-float-btn\\"]::before,[class*=\\" ant-float-btn\\"] [class^=\\"ant-float-btn\\"]::before,[class^=\\"ant-float-btn\\"] [class*=\\" ant-float-btn\\"]::before,[class*=\\" ant-float-btn\\"] [class*=\\" ant-float-btn\\"]::before,[class^=\\"ant-float-btn\\"] [class^=\\"ant-float-btn\\"]::after,[class*=\\" ant-float-btn\\"] [class^=\\"ant-float-btn\\"]::after,[class^=\\"ant-float-btn\\"] [class*=\\" ant-float-btn\\"]::after,[class*=\\" ant-float-btn\\"] [class*=\\" ant-float-btn\\"]::after{box-sizing:border-box;}.ant-float-btn-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';z-index:99;display:block;border:none;position:fixed;width:40px;height:auto;box-shadow:none;min-height:40px;inset-inline-end:24px;inset-block-end:48px;border-radius:8px;}.ant-float-btn-group .ant-float-btn-group-wrap{z-index:-1;display:block;position:relative;margin-bottom:16px;}.ant-float-btn-group.ant-float-btn-group-rtl{direction:rtl;}.ant-float-btn-group .ant-float-btn{position:static;}.ant-float-btn-group-circle .ant-float-btn-circle:not(:last-child){margin-bottom:16px;}.ant-float-btn-group-circle .ant-float-btn-circle:not(:last-child) .ant-float-btn-body{width:40px;height:40px;border-radius:50%;}.ant-float-btn-group-square .ant-float-btn-square{border-radius:0;padding:0;}.ant-float-btn-group-square .ant-float-btn-square:first-child{border-start-start-radius:8px;border-start-end-radius:8px;}.ant-float-btn-group-square .ant-float-btn-square:last-child{border-end-start-radius:8px;border-end-end-radius:8px;}.ant-float-btn-group-square .ant-float-btn-square:not(:last-child){border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-float-btn-group-square .ant-float-btn-square .ant-badge .ant-badge-count{top:-10px;inset-inline-end:-10px;}.ant-float-btn-group-square .ant-float-btn-group-wrap{display:block;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-float-btn-group-square .ant-float-btn-group-wrap .ant-float-btn-square{box-shadow:none;margin-top:0;border-radius:0;padding:4px;}.ant-float-btn-group-square .ant-float-btn-group-wrap .ant-float-btn-square:first-child{border-start-start-radius:8px;border-start-end-radius:8px;}.ant-float-btn-group-square .ant-float-btn-group-wrap .ant-float-btn-square:last-child{border-end-start-radius:8px;border-end-end-radius:8px;}.ant-float-btn-group-square .ant-float-btn-group-wrap .ant-float-btn-square:not(:last-child){border-bottom:1px solid rgba(253, 253, 253, 0.12);}.ant-float-btn-group-square .ant-float-btn-group-wrap .ant-float-btn-square .ant-float-btn-body{width:32px;height:32px;}.ant-float-btn-group-circle-shadow{box-shadow:none;}.ant-float-btn-group-square-shadow{box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-float-btn-group-square-shadow .ant-float-btn-square{box-shadow:none;padding:4px;}.ant-float-btn-group-square-shadow .ant-float-btn-square .ant-float-btn-body{width:32px;height:32px;border-radius:4px;}.ant-float-btn{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';border:none;position:fixed;cursor:pointer;z-index:99;display:block;justify-content:center;align-items:center;width:40px;height:40px;inset-inline-end:24px;inset-block-end:48px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-float-btn-pure{position:relative;inset:auto;}.ant-float-btn:empty{display:none;}.ant-float-btn .ant-badge{width:100%;height:100%;}.ant-float-btn .ant-badge .ant-badge-count{transform:translate(0, 0);transform-origin:center;top:-6px;inset-inline-end:-6px;}.ant-float-btn .ant-float-btn-body{width:100%;height:100%;display:flex;justify-content:center;align-items:center;transition:all 0.2s;}.ant-float-btn .ant-float-btn-body .ant-float-btn-content{overflow:hidden;text-align:center;min-height:40px;display:flex;flex-direction:column;justify-content:center;align-items:center;padding:2px 4px;}.ant-float-btn .ant-float-btn-body .ant-float-btn-content .ant-float-btn-icon{text-align:center;margin:auto;width:18px;font-size:18px;line-height:1;}.ant-float-btn-rtl{direction:rtl;}.ant-float-btn-circle{height:40px;border-radius:50%;}.ant-float-btn-circle .ant-badge .ant-badge-dot{top:5.857864376269049px;inset-inline-end:5.857864376269049px;}.ant-float-btn-circle .ant-float-btn-body{border-radius:50%;}.ant-float-btn-square{height:auto;min-height:40px;border-radius:8px;}.ant-float-btn-square .ant-badge .ant-badge-dot{top:2.3431457505076194px;inset-inline-end:2.3431457505076194px;}.ant-float-btn-square .ant-float-btn-body{height:auto;border-radius:8px;}.ant-float-btn-default{background-color:#1f1f1f;transition:background-color 0.2s;}.ant-float-btn-default .ant-float-btn-body{background-color:#1f1f1f;transition:background-color 0.2s;}.ant-float-btn-default .ant-float-btn-body:hover{background-color:rgba(255, 255, 255, 0.12);}.ant-float-btn-default .ant-float-btn-body .ant-float-btn-content .ant-float-btn-icon{color:rgba(255, 255, 255, 0.85);}.ant-float-btn-default .ant-float-btn-body .ant-float-btn-content .ant-float-btn-description{display:flex;align-items:center;line-height:16px;color:rgba(255, 255, 255, 0.85);font-size:12px;}.ant-float-btn-primary{background-color:#037003;}.ant-float-btn-primary .ant-float-btn-body{background-color:#037003;transition:background-color 0.2s;}.ant-float-btn-primary .ant-float-btn-body:hover{background-color:#198016;}.ant-float-btn-primary .ant-float-btn-body .ant-float-btn-content .ant-float-btn-icon{color:#fff;}.ant-float-btn-primary .ant-float-btn-body .ant-float-btn-content .ant-float-btn-description{display:flex;align-items:center;line-height:16px;color:#fff;font-size:12px;}.ant-fade-enter,.ant-fade-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-fade-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-fade-enter.ant-fade-enter-active,.ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running;}.ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none;}.ant-fade-enter,.ant-fade-appear{opacity:0;animation-timing-function:linear;}.ant-fade-leave{animation-timing-function:linear;}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-enter,.ant-float-btn-group-wrap.ant-float-btn-group-wrap-appear{animation-duration:0.3s;animation-fill-mode:both;animation-play-state:paused;}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-leave{animation-duration:0.3s;animation-fill-mode:both;animation-play-state:paused;}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-enter.ant-float-btn-group-wrap-enter-active,.ant-float-btn-group-wrap.ant-float-btn-group-wrap-appear.ant-float-btn-group-wrap-appear-active{animation-name:antFloatButtonMoveDownIn;animation-play-state:running;}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-leave.ant-float-btn-group-wrap-leave-active{animation-name:antFloatButtonMoveDownOut;animation-play-state:running;pointer-events:none;}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-enter,.ant-float-btn-group-wrap.ant-float-btn-group-wrap-appear{opacity:0;animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-float-btn-group-wrap.ant-float-btn-group-wrap-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}@keyframes antFadeIn{0%{opacity:0;}100%{opacity:1;}}@keyframes antFadeOut{0%{opacity:1;}100%{opacity:0;}}@keyframes antFloatButtonMoveDownIn{0%{transform:translate3d(0, 40px, 0);transform-origin:0 0;opacity:0;}100%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}}@keyframes antFloatButtonMoveDownOut{0%{transform:translate3d(0, 0, 0);transform-origin:0 0;opacity:1;}100%{transform:translate3d(0, 40px, 0);transform-origin:0 0;opacity:0;}}[class^=\\"ant-tooltip\\"],[class*=\\" ant-tooltip\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-tooltip\\"]::before,[class*=\\" ant-tooltip\\"]::before,[class^=\\"ant-tooltip\\"]::after,[class*=\\" ant-tooltip\\"]::after{box-sizing:border-box;}[class^=\\"ant-tooltip\\"] [class^=\\"ant-tooltip\\"],[class*=\\" ant-tooltip\\"] [class^=\\"ant-tooltip\\"],[class^=\\"ant-tooltip\\"] [class*=\\" ant-tooltip\\"],[class*=\\" ant-tooltip\\"] [class*=\\" ant-tooltip\\"]{box-sizing:border-box;}[class^=\\"ant-tooltip\\"] [class^=\\"ant-tooltip\\"]::before,[class*=\\" ant-tooltip\\"] [class^=\\"ant-tooltip\\"]::before,[class^=\\"ant-tooltip\\"] [class*=\\" ant-tooltip\\"]::before,[class*=\\" ant-tooltip\\"] [class*=\\" ant-tooltip\\"]::before,[class^=\\"ant-tooltip\\"] [class^=\\"ant-tooltip\\"]::after,[class*=\\" ant-tooltip\\"] [class^=\\"ant-tooltip\\"]::after,[class^=\\"ant-tooltip\\"] [class*=\\" ant-tooltip\\"]::after,[class*=\\" ant-tooltip\\"] [class*=\\" ant-tooltip\\"]::after{box-sizing:border-box;}.ant-tooltip{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;z-index:1070;display:block;max-width:250px;visibility:visible;--antd-arrow-background-color:#424242;}.ant-tooltip{width:max-content;width:intrinsic;}.ant-tooltip-hidden{display:none;}.ant-tooltip .ant-tooltip-inner{min-width:32px;min-height:32px;padding:6px 8px;color:#fff;text-align:start;text-decoration:none;word-wrap:break-word;background-color:#424242;border-radius:6px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-tooltip-placement-left .ant-tooltip-inner,.ant-tooltip-placement-leftTop .ant-tooltip-inner,.ant-tooltip-placement-leftBottom .ant-tooltip-inner,.ant-tooltip-placement-right .ant-tooltip-inner,.ant-tooltip-placement-rightTop .ant-tooltip-inner,.ant-tooltip-placement-rightBottom .ant-tooltip-inner{border-radius:6px;}.ant-tooltip .ant-tooltip-content{position:relative;}.ant-tooltip.ant-tooltip-blue .ant-tooltip-inner{background-color:#1668dc;}.ant-tooltip.ant-tooltip-blue .ant-tooltip-arrow{--antd-arrow-background-color:#1668dc;}.ant-tooltip.ant-tooltip-purple .ant-tooltip-inner{background-color:#642ab5;}.ant-tooltip.ant-tooltip-purple .ant-tooltip-arrow{--antd-arrow-background-color:#642ab5;}.ant-tooltip.ant-tooltip-cyan .ant-tooltip-inner{background-color:#13a8a8;}.ant-tooltip.ant-tooltip-cyan .ant-tooltip-arrow{--antd-arrow-background-color:#13a8a8;}.ant-tooltip.ant-tooltip-green .ant-tooltip-inner{background-color:#49aa19;}.ant-tooltip.ant-tooltip-green .ant-tooltip-arrow{--antd-arrow-background-color:#49aa19;}.ant-tooltip.ant-tooltip-magenta .ant-tooltip-inner{background-color:#cb2b83;}.ant-tooltip.ant-tooltip-magenta .ant-tooltip-arrow{--antd-arrow-background-color:#cb2b83;}.ant-tooltip.ant-tooltip-pink .ant-tooltip-inner{background-color:#cb2b83;}.ant-tooltip.ant-tooltip-pink .ant-tooltip-arrow{--antd-arrow-background-color:#cb2b83;}.ant-tooltip.ant-tooltip-red .ant-tooltip-inner{background-color:#d32029;}.ant-tooltip.ant-tooltip-red .ant-tooltip-arrow{--antd-arrow-background-color:#d32029;}.ant-tooltip.ant-tooltip-orange .ant-tooltip-inner{background-color:#d87a16;}.ant-tooltip.ant-tooltip-orange .ant-tooltip-arrow{--antd-arrow-background-color:#d87a16;}.ant-tooltip.ant-tooltip-yellow .ant-tooltip-inner{background-color:#d8bd14;}.ant-tooltip.ant-tooltip-yellow .ant-tooltip-arrow{--antd-arrow-background-color:#d8bd14;}.ant-tooltip.ant-tooltip-volcano .ant-tooltip-inner{background-color:#d84a1b;}.ant-tooltip.ant-tooltip-volcano .ant-tooltip-arrow{--antd-arrow-background-color:#d84a1b;}.ant-tooltip.ant-tooltip-geekblue .ant-tooltip-inner{background-color:#2b4acb;}.ant-tooltip.ant-tooltip-geekblue .ant-tooltip-arrow{--antd-arrow-background-color:#2b4acb;}.ant-tooltip.ant-tooltip-lime .ant-tooltip-inner{background-color:#8bbb11;}.ant-tooltip.ant-tooltip-lime .ant-tooltip-arrow{--antd-arrow-background-color:#8bbb11;}.ant-tooltip.ant-tooltip-gold .ant-tooltip-inner{background-color:#d89614;}.ant-tooltip.ant-tooltip-gold .ant-tooltip-arrow{--antd-arrow-background-color:#d89614;}.ant-tooltip-rtl{direction:rtl;}.ant-tooltip .ant-tooltip-arrow{position:absolute;z-index:1;display:block;pointer-events:none;width:16px;height:16px;overflow:hidden;}.ant-tooltip .ant-tooltip-arrow::after{content:\\"\\";position:absolute;width:8.970562748477143px;height:8.970562748477143px;bottom:0;inset-inline:0;margin:auto;border-radius:0 0 2px 0;transform:translateY(50%) rotate(-135deg);box-shadow:3px 3px 7px rgba(0, 0, 0, 0.1);z-index:0;background:transparent;}.ant-tooltip .ant-tooltip-arrow::before{position:absolute;bottom:0;inset-inline-start:0;width:16px;height:8px;background:var(--antd-arrow-background-color);clip-path:polygon(1.6568542494923806px 100%, 50% 1.6568542494923806px, 14.34314575050762px 100%, 1.6568542494923806px 100%);clip-path:path('M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z');content:\\"\\";}.ant-tooltip .ant-tooltip-arrow:before{background:var(--antd-arrow-background-color);}.ant-tooltip-placement-top .ant-tooltip-arrow,.ant-tooltip-placement-topLeft .ant-tooltip-arrow,.ant-tooltip-placement-topRight .ant-tooltip-arrow{bottom:0;transform:translateY(100%) rotate(180deg);}.ant-tooltip-placement-top .ant-tooltip-arrow{left:50%;transform:translateX(-50%) translateY(100%) rotate(180deg);}.ant-tooltip-placement-topLeft .ant-tooltip-arrow{left:6px;}.ant-tooltip-placement-topRight .ant-tooltip-arrow{right:6px;}.ant-tooltip-placement-bottom .ant-tooltip-arrow,.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow,.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{top:0;transform:translateY(-100%);}.ant-tooltip-placement-bottom .ant-tooltip-arrow{left:50%;transform:translateX(-50%) translateY(-100%);}.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow{left:6px;}.ant-tooltip-placement-bottomRight .ant-tooltip-arrow{right:6px;}.ant-tooltip-placement-left .ant-tooltip-arrow,.ant-tooltip-placement-leftTop .ant-tooltip-arrow,.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{right:0;transform:translateX(100%) rotate(90deg);}.ant-tooltip-placement-left .ant-tooltip-arrow{top:50%;transform:translateY(-50%) translateX(100%) rotate(90deg);}.ant-tooltip-placement-leftTop .ant-tooltip-arrow{top:2px;}.ant-tooltip-placement-leftBottom .ant-tooltip-arrow{bottom:2px;}.ant-tooltip-placement-right .ant-tooltip-arrow,.ant-tooltip-placement-rightTop .ant-tooltip-arrow,.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{left:0;transform:translateX(-100%) rotate(-90deg);}.ant-tooltip-placement-right .ant-tooltip-arrow{top:50%;transform:translateY(-50%) translateX(-100%) rotate(-90deg);}.ant-tooltip-placement-rightTop .ant-tooltip-arrow{top:2px;}.ant-tooltip-placement-rightBottom .ant-tooltip-arrow{bottom:2px;}.ant-tooltip-placement-topLeft,.ant-tooltip-placement-top,.ant-tooltip-placement-topRight{padding-bottom:12px;}.ant-tooltip-placement-bottomLeft,.ant-tooltip-placement-bottom,.ant-tooltip-placement-bottomRight{padding-top:12px;}.ant-tooltip-placement-leftTop,.ant-tooltip-placement-left,.ant-tooltip-placement-leftBottom{padding-right:12px;}.ant-tooltip-placement-rightTop,.ant-tooltip-placement-right,.ant-tooltip-placement-rightBottom{padding-left:12px;}.ant-tooltip-pure{position:relative;max-width:none;}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear{animation-duration:0.1s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-fast-leave{animation-duration:0.1s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-fast-enter.ant-zoom-big-fast-enter-active,.ant-zoom-big-fast-appear.ant-zoom-big-fast-appear-active{animation-name:antZoomBigIn;animation-play-state:running;}.ant-zoom-big-fast-leave.ant-zoom-big-fast-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none;}.ant-zoom-big-fast-enter,.ant-zoom-big-fast-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-zoom-big-fast-enter-prepare,.ant-zoom-big-fast-appear-prepare{transform:none;}.ant-zoom-big-fast-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}[class^=\\"ant-form\\"],[class*=\\" ant-form\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-form\\"]::before,[class*=\\" ant-form\\"]::before,[class^=\\"ant-form\\"]::after,[class*=\\" ant-form\\"]::after{box-sizing:border-box;}[class^=\\"ant-form\\"] [class^=\\"ant-form\\"],[class*=\\" ant-form\\"] [class^=\\"ant-form\\"],[class^=\\"ant-form\\"] [class*=\\" ant-form\\"],[class*=\\" ant-form\\"] [class*=\\" ant-form\\"]{box-sizing:border-box;}[class^=\\"ant-form\\"] [class^=\\"ant-form\\"]::before,[class*=\\" ant-form\\"] [class^=\\"ant-form\\"]::before,[class^=\\"ant-form\\"] [class*=\\" ant-form\\"]::before,[class*=\\" ant-form\\"] [class*=\\" ant-form\\"]::before,[class^=\\"ant-form\\"] [class^=\\"ant-form\\"]::after,[class*=\\" ant-form\\"] [class^=\\"ant-form\\"]::after,[class^=\\"ant-form\\"] [class*=\\" ant-form\\"]::after,[class*=\\" ant-form\\"] [class*=\\" ant-form\\"]::after{box-sizing:border-box;}.ant-form{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-form legend{display:block;width:100%;margin-bottom:24px;padding:0;color:rgba(255, 255, 255, 0.45);font-size:16px;line-height:inherit;border:0;border-bottom:1px solid #424242;}.ant-form label{font-size:14px;}.ant-form input[type=\\"search\\"]{box-sizing:border-box;}.ant-form input[type=\\"radio\\"],.ant-form input[type=\\"checkbox\\"]{line-height:normal;}.ant-form input[type=\\"file\\"]{display:block;}.ant-form input[type=\\"range\\"]{display:block;width:100%;}.ant-form select[multiple],.ant-form select[size]{height:auto;}.ant-form input[type='file']:focus,.ant-form input[type='radio']:focus,.ant-form input[type='checkbox']:focus{outline:0;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);}.ant-form output{display:block;padding-top:15px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;}.ant-form .ant-form-text{display:inline-block;padding-inline-end:12px;}.ant-form-small .ant-form-item .ant-form-item-label>label{height:24px;}.ant-form-small .ant-form-item .ant-form-item-control-input{min-height:24px;}.ant-form-large .ant-form-item .ant-form-item-label>label{height:40px;}.ant-form-large .ant-form-item .ant-form-item-control-input{min-height:40px;}.ant-form-item{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';margin-bottom:24px;vertical-align:top;}.ant-form-item-with-help{transition:none;}.ant-form-item-hidden,.ant-form-item-hidden.ant-row{display:none;}.ant-form-item-has-warning .ant-form-item-split{color:#dc4446;}.ant-form-item-has-error .ant-form-item-split{color:#d89614;}.ant-form-item .ant-form-item-label{display:inline-block;flex-grow:0;overflow:hidden;white-space:nowrap;text-align:end;vertical-align:middle;}.ant-form-item .ant-form-item-label-left{text-align:start;}.ant-form-item .ant-form-item-label-wrap{overflow:unset;line-height:1.5714285714285714 - 0.25em;white-space:unset;}.ant-form-item .ant-form-item-label >label{position:relative;display:inline-flex;align-items:center;max-width:100%;height:32px;color:rgba(255, 255, 255, 0.85);font-size:14px;}.ant-form-item .ant-form-item-label >label >.anticon{font-size:14px;vertical-align:top;}.ant-form-item .ant-form-item-label >label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{display:inline-block;margin-inline-end:4px;color:#dc4446;font-size:14px;font-family:SimSun,sans-serif;line-height:1;content:\\"*\\";}.ant-form-hide-required-mark .ant-form-item .ant-form-item-label >label.ant-form-item-required:not(.ant-form-item-required-mark-optional)::before{display:none;}.ant-form-item .ant-form-item-label >label .ant-form-item-optional{display:inline-block;margin-inline-start:4px;color:rgba(255, 255, 255, 0.45);}.ant-form-hide-required-mark .ant-form-item .ant-form-item-label >label .ant-form-item-optional{display:none;}.ant-form-item .ant-form-item-label >label .ant-form-item-tooltip{color:rgba(255, 255, 255, 0.45);cursor:help;writing-mode:horizontal-tb;margin-inline-start:4px;}.ant-form-item .ant-form-item-label >label::after{content:\\":\\";position:relative;margin-block:0;margin-inline-start:2px;margin-inline-end:8px;}.ant-form-item .ant-form-item-label >label.ant-form-item-no-colon::after{content:\\" \\";}.ant-form-item .ant-form-item-control{display:flex;flex-direction:column;flex-grow:1;}.ant-form-item .ant-form-item-control:first-child:not([class^=\\"'ant-col-'\\"]):not([class*=\\"' ant-col-'\\"]){width:100%;}.ant-form-item .ant-form-item-control-input{position:relative;display:flex;align-items:center;min-height:32px;}.ant-form-item .ant-form-item-control-input-content{flex:auto;max-width:100%;}.ant-form-item .ant-form-item-explain,.ant-form-item .ant-form-item-extra{clear:both;color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;}.ant-form-item .ant-form-item-explain-connected{width:100%;}.ant-form-item .ant-form-item-extra{min-height:24px;transition:color 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);}.ant-form-item .ant-form-item-explain-error{color:#dc4446;}.ant-form-item .ant-form-item-explain-warning{color:#d89614;}.ant-form-item-with-help .ant-form-item-explain{height:auto;opacity:1;}.ant-form-item .ant-form-item-feedback-icon{font-size:14px;text-align:center;visibility:visible;animation-name:antZoomIn;animation-duration:0.2s;animation-timing-function:cubic-bezier(0.12, 0.4, 0.29, 1.46);pointer-events:none;}.ant-form-item .ant-form-item-feedback-icon-success{color:#49aa19;}.ant-form-item .ant-form-item-feedback-icon-error{color:#dc4446;}.ant-form-item .ant-form-item-feedback-icon-warning{color:#d89614;}.ant-form-item .ant-form-item-feedback-icon-validating{color:#037003;}.ant-form-show-help{transition:opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-form-show-help-appear,.ant-form-show-help-enter{opacity:0;}.ant-form-show-help-appear-active,.ant-form-show-help-enter-active{opacity:1;}.ant-form-show-help-leave{opacity:1;}.ant-form-show-help-leave-active{opacity:0;}.ant-form-show-help .ant-form-show-help-item{overflow:hidden;transition:height 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-form-show-help .ant-form-show-help-item.ant-form-show-help-item-appear,.ant-form-show-help .ant-form-show-help-item.ant-form-show-help-item-enter{transform:translateY(-5px);opacity:0;}.ant-form-show-help .ant-form-show-help-item.ant-form-show-help-item-appear-active,.ant-form-show-help .ant-form-show-help-item.ant-form-show-help-item-enter-active{transform:translateY(0);opacity:1;}.ant-form-show-help .ant-form-show-help-item.ant-form-show-help-item-leave-active{transform:translateY(-5px);}.ant-form-horizontal .ant-form-item-label{flex-grow:0;}.ant-form-horizontal .ant-form-item-control{flex:1 1 0;min-width:0;}.ant-form-horizontal .ant-form-item-label.ant-col-24+.ant-form-item-control{min-width:unset;}.ant-form-inline{display:flex;flex-wrap:wrap;}.ant-form-inline .ant-form-item{flex:none;flex-wrap:nowrap;margin-inline-end:16px;margin-bottom:0;}.ant-form-inline .ant-form-item-with-help{margin-bottom:24px;}.ant-form-inline .ant-form-item >.ant-form-item-label,.ant-form-inline .ant-form-item >.ant-form-item-control{display:inline-block;vertical-align:top;}.ant-form-inline .ant-form-item >.ant-form-item-label{flex:none;}.ant-form-inline .ant-form-item .ant-form-text{display:inline-block;}.ant-form-inline .ant-form-item .ant-form-item-has-feedback{display:inline-block;}.ant-form-vertical .ant-form-item-row{flex-direction:column;}.ant-form-vertical .ant-form-item-label>label{height:auto;}.ant-form-vertical .ant-form-item .ant-form-item-control{width:100%;}.ant-form-vertical .ant-form-item-label,.ant-col-24.ant-form-item-label,.ant-col-xl-24.ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form-vertical .ant-form-item-label >label,.ant-col-24.ant-form-item-label >label,.ant-col-xl-24.ant-form-item-label >label{margin:0;}.ant-form-vertical .ant-form-item-label >label::after,.ant-col-24.ant-form-item-label >label::after,.ant-col-xl-24.ant-form-item-label >label::after{display:none;}@media (max-width: 575px){.ant-form-item .ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form-item .ant-form-item-label >label{margin:0;}.ant-form-item .ant-form-item-label >label::after{display:none;}.ant-form .ant-form-item{flex-wrap:wrap;}.ant-form .ant-form-item .ant-form-item-label,.ant-form .ant-form-item .ant-form-item-control{flex:0 0 100%;max-width:100%;}.ant-form .ant-col-xs-24.ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form .ant-col-xs-24.ant-form-item-label >label{margin:0;}.ant-form .ant-col-xs-24.ant-form-item-label >label::after{display:none;}}@media (max-width: 767px){.ant-form .ant-col-sm-24.ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form .ant-col-sm-24.ant-form-item-label >label{margin:0;}.ant-form .ant-col-sm-24.ant-form-item-label >label::after{display:none;}}@media (max-width: 991px){.ant-form .ant-col-md-24.ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form .ant-col-md-24.ant-form-item-label >label{margin:0;}.ant-form .ant-col-md-24.ant-form-item-label >label::after{display:none;}}@media (max-width: 1199px){.ant-form .ant-col-lg-24.ant-form-item-label{margin:0;padding:0 0 8px;white-space:initial;text-align:start;}.ant-form .ant-col-lg-24.ant-form-item-label >label{margin:0;}.ant-form .ant-col-lg-24.ant-form-item-label >label::after{display:none;}}.ant-form .ant-motion-collapse-legacy{overflow:hidden;}.ant-form .ant-motion-collapse-legacy-active{transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-form .ant-motion-collapse{overflow:hidden;transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}@keyframes antZoomIn{0%{transform:scale(0.2);opacity:0;}100%{transform:scale(1);opacity:1;}}[class^=\\"ant-row\\"],[class*=\\" ant-row\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-row\\"]::before,[class*=\\" ant-row\\"]::before,[class^=\\"ant-row\\"]::after,[class*=\\" ant-row\\"]::after{box-sizing:border-box;}[class^=\\"ant-row\\"] [class^=\\"ant-row\\"],[class*=\\" ant-row\\"] [class^=\\"ant-row\\"],[class^=\\"ant-row\\"] [class*=\\" ant-row\\"],[class*=\\" ant-row\\"] [class*=\\" ant-row\\"]{box-sizing:border-box;}[class^=\\"ant-row\\"] [class^=\\"ant-row\\"]::before,[class*=\\" ant-row\\"] [class^=\\"ant-row\\"]::before,[class^=\\"ant-row\\"] [class*=\\" ant-row\\"]::before,[class*=\\" ant-row\\"] [class*=\\" ant-row\\"]::before,[class^=\\"ant-row\\"] [class^=\\"ant-row\\"]::after,[class*=\\" ant-row\\"] [class^=\\"ant-row\\"]::after,[class^=\\"ant-row\\"] [class*=\\" ant-row\\"]::after,[class*=\\" ant-row\\"] [class*=\\" ant-row\\"]::after{box-sizing:border-box;}.ant-row{display:flex;flex-flow:row wrap;min-width:0;}.ant-row::before,.ant-row::after{display:flex;}.ant-row-no-wrap{flex-wrap:nowrap;}.ant-row-start{justify-content:flex-start;}.ant-row-center{justify-content:center;}.ant-row-end{justify-content:flex-end;}.ant-row-space-between{justify-content:space-between;}.ant-row-space-around{justify-content:space-around;}.ant-row-top{align-items:flex-start;}.ant-row-middle{align-items:center;}.ant-row-bottom{align-items:flex-end;}[class^=\\"ant-input\\"],[class*=\\" ant-input\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-input\\"]::before,[class*=\\" ant-input\\"]::before,[class^=\\"ant-input\\"]::after,[class*=\\" ant-input\\"]::after{box-sizing:border-box;}[class^=\\"ant-input\\"] [class^=\\"ant-input\\"],[class*=\\" ant-input\\"] [class^=\\"ant-input\\"],[class^=\\"ant-input\\"] [class*=\\" ant-input\\"],[class*=\\" ant-input\\"] [class*=\\" ant-input\\"]{box-sizing:border-box;}[class^=\\"ant-input\\"] [class^=\\"ant-input\\"]::before,[class*=\\" ant-input\\"] [class^=\\"ant-input\\"]::before,[class^=\\"ant-input\\"] [class*=\\" ant-input\\"]::before,[class*=\\" ant-input\\"] [class*=\\" ant-input\\"]::before,[class^=\\"ant-input\\"] [class^=\\"ant-input\\"]::after,[class*=\\" ant-input\\"] [class^=\\"ant-input\\"]::after,[class^=\\"ant-input\\"] [class*=\\" ant-input\\"]::after,[class*=\\" ant-input\\"] [class*=\\" ant-input\\"]::after{box-sizing:border-box;}.ant-input{box-sizing:border-box;margin:0;padding:4px 11px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;width:100%;min-width:0;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;}.ant-input::-moz-placeholder{opacity:1;}.ant-input::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-input:placeholder-shown{text-overflow:ellipsis;}.ant-input:hover{border-color:#198016;border-inline-end-width:1px;}.ant-input:focus,.ant-input-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-disabled,.ant-input[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-input-disabled:hover,.ant-input[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-input-borderless,.ant-input-borderless:hover,.ant-input-borderless:focus,.ant-input-borderless-focused,.ant-input-borderless-disabled,.ant-input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-input{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-input-lg{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-input-sm{padding:0px 7px;border-radius:4px;}.ant-input-rtl{direction:rtl;}.ant-input-textarea-rtl{direction:rtl;}.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input{border-color:#dc4446;}.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover{border-color:#7e2e2f;}.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-input-status-error:not(.ant-input-disabled):not(.ant-input-borderless).ant-input .ant-input-prefix{color:#dc4446;}.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input{border-color:#d89614;}.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:hover{border-color:#7c5914;}.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input:focus,.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input-focused{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-status-warning:not(.ant-input-disabled):not(.ant-input-borderless).ant-input .ant-input-prefix{color:#d89614;}.ant-input[type=\\"color\\"]{height:32px;}.ant-input[type=\\"color\\"].ant-input-lg{height:40px;}.ant-input[type=\\"color\\"].ant-input-sm{height:24px;padding-top:3px;padding-bottom:3px;}.ant-input-textarea{position:relative;}.ant-input-textarea .ant-input-textarea-suffix{position:absolute;top:0;inset-inline-end:11px;bottom:0;z-index:1;display:inline-flex;align-items:center;margin:auto;}.ant-input-textarea-status-error.ant-input-textarea-has-feedback .ant-input,.ant-input-textarea-status-warning.ant-input-textarea-has-feedback .ant-input,.ant-input-textarea-status-success.ant-input-textarea-has-feedback .ant-input,.ant-input-textarea-status-validating.ant-input-textarea-has-feedback .ant-input{padding-inline-end:24px;}.ant-input-textarea-show-count >.ant-input{height:100%;}.ant-input-textarea-show-count::after{color:rgba(255, 255, 255, 0.45);white-space:nowrap;content:attr(data-count);pointer-events:none;float:right;}.ant-input-textarea-rtl::after{float:left;}.ant-input-affix-wrapper{position:relative;display:inline-flex;width:100%;min-width:0;padding:4px 11px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;}.ant-input-affix-wrapper::-moz-placeholder{opacity:1;}.ant-input-affix-wrapper::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-input-affix-wrapper:placeholder-shown{text-overflow:ellipsis;}.ant-input-affix-wrapper:hover{border-color:#198016;border-inline-end-width:1px;}.ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-affix-wrapper-disabled,.ant-input-affix-wrapper[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-input-affix-wrapper-disabled:hover,.ant-input-affix-wrapper[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-input-affix-wrapper-borderless,.ant-input-affix-wrapper-borderless:hover,.ant-input-affix-wrapper-borderless:focus,.ant-input-affix-wrapper-borderless-focused,.ant-input-affix-wrapper-borderless-disabled,.ant-input-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-input-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-input-affix-wrapper-lg{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-input-affix-wrapper-sm{padding:0px 7px;border-radius:4px;}.ant-input-affix-wrapper-rtl{direction:rtl;}.ant-input-affix-wrapper-textarea-rtl{direction:rtl;}.ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{border-color:#198016;border-inline-end-width:1px;z-index:1;}.ant-input-search-with-button .ant-input-affix-wrapper:not(.ant-input-affix-wrapper-disabled):hover{z-index:0;}.ant-input-affix-wrapper-focused,.ant-input-affix-wrapper:focus{z-index:1;}.ant-input-affix-wrapper-disabled .ant-input[disabled]{background:transparent;}.ant-input-affix-wrapper >input.ant-input{padding:0;font-size:inherit;border:none;border-radius:0;outline:none;}.ant-input-affix-wrapper >input.ant-input:focus{box-shadow:none!important;}.ant-input-affix-wrapper::before{width:0;visibility:hidden;content:\\"\\\\a0\\";}.ant-input-affix-wrapper .ant-input-prefix,.ant-input-affix-wrapper .ant-input-suffix{display:flex;flex:none;align-items:center;}.ant-input-affix-wrapper .ant-input-prefix >*:not(:last-child),.ant-input-affix-wrapper .ant-input-suffix >*:not(:last-child){margin-inline-end:8px;}.ant-input-affix-wrapper .ant-input-show-count-suffix{color:rgba(255, 255, 255, 0.45);}.ant-input-affix-wrapper .ant-input-show-count-has-suffix{margin-inline-end:4px;}.ant-input-affix-wrapper .ant-input-prefix{margin-inline-end:4px;}.ant-input-affix-wrapper .ant-input-suffix{margin-inline-start:4px;}.ant-input-affix-wrapper .ant-input-clear-icon{margin:0;color:rgba(255, 255, 255, 0.25);font-size:12px;vertical-align:-1px;cursor:pointer;transition:color 0.3s;}.ant-input-affix-wrapper .ant-input-clear-icon:hover{color:rgba(255, 255, 255, 0.45);}.ant-input-affix-wrapper .ant-input-clear-icon:active{color:rgba(255, 255, 255, 0.85);}.ant-input-affix-wrapper .ant-input-clear-icon-hidden{visibility:hidden;}.ant-input-affix-wrapper .ant-input-clear-icon-has-suffix{margin:0 4px;}.ant-input-affix-wrapper-textarea-with-clear-btn{padding:0!important;border:0!important;}.ant-input-affix-wrapper-textarea-with-clear-btn .ant-input-clear-icon{position:absolute;inset-block-start:8px;inset-inline-end:8px;z-index:1;}.ant-input-affix-wrapper .anticon.ant-input-password-icon{color:rgba(255, 255, 255, 0.45);cursor:pointer;transition:all 0.3s;}.ant-input-affix-wrapper .anticon.ant-input-password-icon:hover{color:rgba(255, 255, 255, 0.85);}.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper{border-color:#dc4446;}.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover{border-color:#7e2e2f;}.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper .ant-input-prefix{color:#dc4446;}.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper{border-color:#d89614;}.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:hover{border-color:#7c5914;}.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus,.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper-focused{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-affix-wrapper-status-warning:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper .ant-input-prefix{color:#d89614;}.ant-input-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0;}.ant-input-group[class*='col-']{padding-inline-end:8px;}.ant-input-group[class*='col-']:last-child{padding-inline-end:0;}.ant-input-group-lg .ant-input,.ant-input-group-lg>.ant-input-group-addon{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-input-group-sm .ant-input,.ant-input-group-sm>.ant-input-group-addon{padding:0px 7px;border-radius:4px;}.ant-input-group >.ant-input{display:table-cell;}.ant-input-group >.ant-input:not(:first-child):not(:last-child){border-radius:0;}.ant-input-group .ant-input-group-addon,.ant-input-group .ant-input-group-wrap{display:table-cell;width:1px;white-space:nowrap;vertical-align:middle;}.ant-input-group .ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group .ant-input-group-wrap:not(:first-child):not(:last-child){border-radius:0;}.ant-input-group .ant-input-group-wrap>*{display:block!important;}.ant-input-group .ant-input-group-addon{position:relative;padding:0 11px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;text-align:center;background-color:rgba(255, 255, 255, 0.04);border:1px solid #424242;border-radius:6px;transition:all 0.3s;line-height:1;}.ant-input-group .ant-input-group-addon .ant-select{margin:-5px -11px;}.ant-input-group .ant-input-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none;}.ant-input-group .ant-input-group-addon .ant-select-open .ant-select-selector,.ant-input-group .ant-input-group-addon .ant-select-focused .ant-select-selector{color:#037003;}.ant-input-group .ant-input-group-addon .ant-cascader-picker{margin:-9px -11px;background-color:transparent;}.ant-input-group .ant-input-group-addon .ant-cascader-picker .ant-cascader-input{text-align:start;border:0;box-shadow:none;}.ant-input-group .ant-input-group-addon:first-child{border-inline-end:0;}.ant-input-group .ant-input-group-addon:last-child{border-inline-start:0;}.ant-input-group .ant-input{float:inline-start;width:100%;margin-bottom:0;text-align:inherit;}.ant-input-group .ant-input:focus{z-index:1;border-inline-end-width:1px;}.ant-input-group .ant-input:hover{z-index:1;border-inline-end-width:1px;}.ant-input-search-with-button .ant-input-group .ant-input:hover{z-index:0;}.ant-input-group >.ant-input:first-child,.ant-input-group .ant-input-group-addon:first-child{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-group >.ant-input:first-child .ant-select .ant-select-selector,.ant-input-group .ant-input-group-addon:first-child .ant-select .ant-select-selector{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-group >.ant-input-affix-wrapper:not(:first-child) .ant-input{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-group >.ant-input-affix-wrapper:not(:last-child) .ant-input{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-group >.ant-input:last-child,.ant-input-group .ant-input-group-addon:last-child{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-group >.ant-input:last-child .ant-select .ant-select-selector,.ant-input-group .ant-input-group-addon:last-child .ant-select .ant-select-selector{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-group .ant-input-affix-wrapper:not(:last-child){border-start-end-radius:0;border-end-end-radius:0;}.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:last-child){border-start-start-radius:6px;border-end-start-radius:6px;}.ant-input-group .ant-input-affix-wrapper:not(:first-child),.ant-input-search .ant-input-group .ant-input-affix-wrapper:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;}.ant-input-group.ant-input-group-compact{display:block;}.ant-input-group.ant-input-group-compact::before{display:table;content:\\"\\";}.ant-input-group.ant-input-group-compact::after{display:table;clear:both;content:\\"\\";}.ant-input-group.ant-input-group-compact .ant-input-group-addon:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact .ant-input-group-wrap:not(:first-child):not(:last-child),.ant-input-group.ant-input-group-compact >.ant-input:not(:first-child):not(:last-child){border-inline-end-width:1px;}.ant-input-group.ant-input-group-compact .ant-input-group-addon:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact .ant-input-group-wrap:not(:first-child):not(:last-child):hover,.ant-input-group.ant-input-group-compact >.ant-input:not(:first-child):not(:last-child):hover{z-index:1;}.ant-input-group.ant-input-group-compact .ant-input-group-addon:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact .ant-input-group-wrap:not(:first-child):not(:last-child):focus,.ant-input-group.ant-input-group-compact >.ant-input:not(:first-child):not(:last-child):focus{z-index:1;}.ant-input-group.ant-input-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0;}.ant-input-group.ant-input-group-compact>.ant-input-affix-wrapper{display:inline-flex;}.ant-input-group.ant-input-group-compact>.ant-picker-range{display:inline-flex;}.ant-input-group.ant-input-group-compact>*:not(:last-child){margin-inline-end:-1px;border-inline-end-width:1px;}.ant-input-group.ant-input-group-compact .ant-input{float:none;}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input{border-inline-end-width:1px;border-radius:0;}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:hover,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:hover{z-index:1;}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-cascader-picker .ant-input:focus,.ant-input-group.ant-input-group-compact>.ant-input-group-wrapper .ant-input:focus{z-index:1;}.ant-input-group.ant-input-group-compact>.ant-select-focused{z-index:1;}.ant-input-group.ant-input-group-compact>.ant-select>.ant-select-arrow{z-index:1;}.ant-input-group.ant-input-group-compact>*:first-child,.ant-input-group.ant-input-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-select-auto-complete:first-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:first-child .ant-input{border-start-start-radius:6px;border-end-start-radius:6px;}.ant-input-group.ant-input-group-compact>*:last-child,.ant-input-group.ant-input-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-group.ant-input-group-compact>.ant-cascader-picker:last-child .ant-input,.ant-input-group.ant-input-group-compact>.ant-cascader-picker-focused:last-child .ant-input{border-inline-end-width:1px;border-start-end-radius:6px;border-end-end-radius:6px;}.ant-input-group.ant-input-group-compact>.ant-select-auto-complete .ant-input{vertical-align:top;}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper{margin-inline-start:-1px;}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper+.ant-input-group-wrapper .ant-input-affix-wrapper{border-radius:0;}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input-group-addon>.ant-input-search-button{border-radius:0;}.ant-input-group.ant-input-group-compact .ant-input-group-wrapper:not(:last-child).ant-input-search>.ant-input-group>.ant-input{border-start-start-radius:6px;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:6px;}.ant-input-group.ant-input-group-sm .ant-btn{font-size:12px;height:24px;line-height:normal;}.ant-input-group.ant-input-group-lg .ant-btn{font-size:16px;height:40px;line-height:normal;}.ant-input-group.ant-input-group-lg .ant-select-single .ant-select-selector{height:40px;}.ant-input-group.ant-input-group-lg .ant-select-single .ant-select-selector .ant-select-selection-item,.ant-input-group.ant-input-group-lg .ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:38px;}.ant-input-group.ant-input-group-lg .ant-select-single .ant-select-selector .ant-select-selection-search-input{height:40px;}.ant-input-group.ant-input-group-sm .ant-select-single .ant-select-selector{height:24px;}.ant-input-group.ant-input-group-sm .ant-select-single .ant-select-selector .ant-select-selection-item,.ant-input-group.ant-input-group-sm .ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:22px;}.ant-input-group.ant-input-group-sm .ant-select-single .ant-select-selector .ant-select-selection-search-input{height:24px;}.ant-input-group-rtl{direction:rtl;}.ant-input-group-wrapper{display:inline-block;width:100%;text-align:start;vertical-align:top;}.ant-input-group-wrapper-rtl{direction:rtl;}.ant-input-group-wrapper-lg .ant-input-group-addon{border-radius:8px;}.ant-input-group-wrapper-sm .ant-input-group-addon{border-radius:4px;}.ant-input-group-wrapper-status-error .ant-input-group-addon{color:#dc4446;border-color:#dc4446;}.ant-input-group-wrapper-status-warning .ant-input-group-addon:last-child{color:#49aa19;border-color:#49aa19;}.ant-input-search .ant-input:hover,.ant-input-search .ant-input:focus{border-color:#198016;}.ant-input-search .ant-input:hover +.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary),.ant-input-search .ant-input:focus +.ant-input-group-addon .ant-input-search-button:not(.ant-btn-primary){border-inline-start-color:#198016;}.ant-input-search .ant-input-affix-wrapper{border-radius:0;}.ant-input-search .ant-input-lg{line-height:1.4998;}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child{inset-inline-start:-1px;padding:0;border:0;}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child .ant-input-search-button{padding-top:0;padding-bottom:0;border-start-start-radius:0;border-start-end-radius:6px;border-end-end-radius:6px;border-end-start-radius:0;}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary){color:rgba(255, 255, 255, 0.45);}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary):hover{color:#198016;}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary):active{color:#075a07;}.ant-input-search >.ant-input-group >.ant-input-group-addon:last-child .ant-input-search-button:not(.ant-btn-primary).ant-btn-loading::before{inset-inline-start:0;inset-inline-end:0;inset-block-start:0;inset-block-end:0;}.ant-input-search .ant-input-search-button{height:32px;}.ant-input-search .ant-input-search-button:hover,.ant-input-search .ant-input-search-button:focus{z-index:1;}.ant-input-search-large .ant-input-search-button{height:40px;}.ant-input-search-small .ant-input-search-button{height:24px;}.ant-input-search-rtl{direction:rtl;}.ant-input-search.ant-input-compact-item:not(.ant-input-compact-last-item) .ant-input-group-addon .ant-input-search-button{margin-inline-end:-1px;border-radius:0;}.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input,.ant-input-search.ant-input-compact-item:not(.ant-input-compact-first-item) .ant-input-affix-wrapper{border-radius:0;}.ant-input-search.ant-input-compact-item >.ant-input-group-addon .ant-input-search-button:hover,.ant-input-search.ant-input-compact-item >.ant-input:hover,.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:hover,.ant-input-search.ant-input-compact-item >.ant-input-group-addon .ant-input-search-button:focus,.ant-input-search.ant-input-compact-item >.ant-input:focus,.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:focus,.ant-input-search.ant-input-compact-item >.ant-input-group-addon .ant-input-search-button:active,.ant-input-search.ant-input-compact-item >.ant-input:active,.ant-input-search.ant-input-compact-item .ant-input-affix-wrapper:active{z-index:2;}.ant-input-search.ant-input-compact-item >.ant-input-affix-wrapper-focused{z-index:2;}.ant-input-compact-item:not(.ant-input-compact-last-item){margin-inline-end:-1px;}.ant-input-compact-item:hover,.ant-input-compact-item:focus,.ant-input-compact-item:active{z-index:2;}.ant-input-compact-item[disabled]{z-index:0;}.ant-input-compact-item:not(.ant-input-compact-first-item):not(.ant-input-compact-last-item){border-radius:0;}.ant-input-compact-item:not(.ant-input-compact-last-item).ant-input-compact-first-item,.ant-input-compact-item:not(.ant-input-compact-last-item).ant-input-compact-first-item.ant-input-sm,.ant-input-compact-item:not(.ant-input-compact-last-item).ant-input-compact-first-item.ant-input-lg{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-compact-item:not(.ant-input-compact-first-item).ant-input-compact-last-item,.ant-input-compact-item:not(.ant-input-compact-first-item).ant-input-compact-last-item.ant-input-sm,.ant-input-compact-item:not(.ant-input-compact-first-item).ant-input-compact-last-item.ant-input-lg{border-start-start-radius:0;border-end-start-radius:0;}[class^=\\"ant-image\\"],[class*=\\" ant-image\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-image\\"]::before,[class*=\\" ant-image\\"]::before,[class^=\\"ant-image\\"]::after,[class*=\\" ant-image\\"]::after{box-sizing:border-box;}[class^=\\"ant-image\\"] [class^=\\"ant-image\\"],[class*=\\" ant-image\\"] [class^=\\"ant-image\\"],[class^=\\"ant-image\\"] [class*=\\" ant-image\\"],[class*=\\" ant-image\\"] [class*=\\" ant-image\\"]{box-sizing:border-box;}[class^=\\"ant-image\\"] [class^=\\"ant-image\\"]::before,[class*=\\" ant-image\\"] [class^=\\"ant-image\\"]::before,[class^=\\"ant-image\\"] [class*=\\" ant-image\\"]::before,[class*=\\" ant-image\\"] [class*=\\" ant-image\\"]::before,[class^=\\"ant-image\\"] [class^=\\"ant-image\\"]::after,[class*=\\" ant-image\\"] [class^=\\"ant-image\\"]::after,[class^=\\"ant-image\\"] [class*=\\" ant-image\\"]::after,[class*=\\" ant-image\\"] [class*=\\" ant-image\\"]::after{box-sizing:border-box;}.ant-image{position:relative;display:inline-block;}.ant-image .ant-image-img{width:100%;height:auto;vertical-align:middle;}.ant-image .ant-image-img-placeholder{background-color:rgba(255, 255, 255, 0.08);background-image:url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=');background-repeat:no-repeat;background-position:center center;background-size:30%;}.ant-image .ant-image-mask{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;background:rgba(0, 0, 0, 0.5);cursor:pointer;opacity:0;transition:opacity 0.3s;}.ant-image .ant-image-mask .ant-image-mask-info{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 4px;}.ant-image .ant-image-mask .ant-image-mask-info .anticon{margin-inline-end:4px;}.ant-image .ant-image-mask .ant-image-mask-info .anticon svg{vertical-align:baseline;}.ant-image .ant-image-mask:hover{opacity:1;}.ant-image .ant-image-placeholder{position:absolute;inset:0;}.ant-image-preview-root .ant-image-preview{height:100%;text-align:center;pointer-events:none;}.ant-image-preview-root .ant-image-preview-body{position:absolute;inset:0;overflow:hidden;}.ant-image-preview-root .ant-image-preview-img{max-width:100%;max-height:100%;vertical-align:middle;transform:scale3d(1, 1, 1);cursor:grab;transition:transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;user-select:none;pointer-events:auto;}.ant-image-preview-root .ant-image-preview-img-wrapper{position:absolute;inset:0;transition:transform 0.3s cubic-bezier(0.215, 0.61, 0.355, 1) 0s;display:flex;justify-content:center;align-items:center;}.ant-image-preview-root .ant-image-preview-img-wrapper::before{display:inline-block;width:1px;height:50%;margin-inline-end:-1px;content:\\"\\";}.ant-image-preview-root .ant-image-preview-moving .ant-image-preview-preview-img{cursor:grabbing;}.ant-image-preview-root .ant-image-preview-moving .ant-image-preview-preview-img-wrapper{transition-duration:0s;}.ant-image-preview-root .ant-image-preview-wrap{z-index:1080;}.ant-image-preview-operations-wrapper{position:fixed;inset-block-start:0;inset-inline-end:0;z-index:1081;width:100%;}.ant-image-preview-operations{box-sizing:border-box;margin:0;padding:0;color:rgb(255, 255, 255);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;flex-direction:row-reverse;align-items:center;background:rgba(0, 0, 0, 0.1);pointer-events:auto;}.ant-image-preview-operations-operation{margin-inline-start:12px;padding:12px;cursor:pointer;transition:all 0.3s;user-select:none;}.ant-image-preview-operations-operation:hover{background:rgba(0, 0, 0, 0.2);}.ant-image-preview-operations-operation-disabled{color:rgba(255, 255, 255, 0.25);pointer-events:none;}.ant-image-preview-operations-operation:last-of-type{margin-inline-start:0;}.ant-image-preview-operations-progress{position:absolute;left:50%;transform:translateX(-50%);}.ant-image-preview-operations-icon{font-size:18px;}.ant-image-preview-switch-left,.ant-image-preview-switch-right{position:fixed;inset-block-start:50%;z-index:1081;display:flex;align-items:center;justify-content:center;width:40px;height:40px;margin-top:-20px;color:rgb(255, 255, 255);background:rgba(0, 0, 0, 0.1);border-radius:50%;transform:translateY(-50%);cursor:pointer;transition:all 0.3s;pointer-events:auto;user-select:none;}.ant-image-preview-switch-left:hover,.ant-image-preview-switch-right:hover{background:rgba(0, 0, 0, 0.2);}.ant-image-preview-switch-left-disabled,.ant-image-preview-switch-right-disabled,.ant-image-preview-switch-left-disabled:hover,.ant-image-preview-switch-right-disabled:hover{color:rgba(255, 255, 255, 0.25);background:transparent;cursor:not-allowed;}.ant-image-preview-switch-left-disabled >.anticon,.ant-image-preview-switch-right-disabled >.anticon,.ant-image-preview-switch-left-disabled:hover >.anticon,.ant-image-preview-switch-right-disabled:hover >.anticon{cursor:not-allowed;}.ant-image-preview-switch-left >.anticon,.ant-image-preview-switch-right >.anticon{font-size:18px;}.ant-image-preview-switch-left{inset-inline-start:12px;}.ant-image-preview-switch-right{inset-inline-end:12px;}.ant-image-preview-root .ant-image-preview.ant-zoom-enter,.ant-image-preview-root .ant-image-preview.ant-zoom-appear{transform:none;opacity:0;animation-duration:0.3s;user-select:none;}.ant-image-preview-root .ant-image-preview.ant-zoom-leave .ant-image-preview-content{pointer-events:none;}.ant-image-preview-root .ant-image-preview-mask{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:1000;height:100%;background-color:rgba(0, 0, 0, 0.45);}.ant-image-preview-root .ant-image-preview-mask .ant-image-preview-hidden{display:none;}.ant-image-preview-root .ant-image-preview-wrap{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch;}.ant-image-preview-root .ant-fade-enter,.ant-image-preview-root .ant-fade-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-image-preview-root .ant-fade-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-image-preview-root .ant-fade-enter.ant-fade-enter-active,.ant-image-preview-root .ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running;}.ant-image-preview-root .ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none;}.ant-image-preview-root .ant-fade-enter,.ant-image-preview-root .ant-fade-appear{opacity:0;animation-timing-function:linear;}.ant-image-preview-root .ant-fade-leave{animation-timing-function:linear;}.ant-image-preview-root .ant-zoom-enter,.ant-image-preview-root .ant-zoom-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-image-preview-root .ant-zoom-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-image-preview-root .ant-zoom-enter.ant-zoom-enter-active,.ant-image-preview-root .ant-zoom-appear.ant-zoom-appear-active{animation-name:antZoomIn;animation-play-state:running;}.ant-image-preview-root .ant-zoom-leave.ant-zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none;}.ant-image-preview-root .ant-zoom-enter,.ant-image-preview-root .ant-zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-image-preview-root .ant-zoom-enter-prepare,.ant-image-preview-root .ant-zoom-appear-prepare{transform:none;}.ant-image-preview-root .ant-zoom-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-fade-enter,.ant-fade-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-fade-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-fade-enter.ant-fade-enter-active,.ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running;}.ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none;}.ant-fade-enter,.ant-fade-appear{opacity:0;animation-timing-function:linear;}.ant-fade-leave{animation-timing-function:linear;}@keyframes antZoomOut{0%{transform:scale(1);}100%{transform:scale(0.2);opacity:0;}}[class^=\\"ant-input-number\\"],[class*=\\" ant-input-number\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-input-number\\"]::before,[class*=\\" ant-input-number\\"]::before,[class^=\\"ant-input-number\\"]::after,[class*=\\" ant-input-number\\"]::after{box-sizing:border-box;}[class^=\\"ant-input-number\\"] [class^=\\"ant-input-number\\"],[class*=\\" ant-input-number\\"] [class^=\\"ant-input-number\\"],[class^=\\"ant-input-number\\"] [class*=\\" ant-input-number\\"],[class*=\\" ant-input-number\\"] [class*=\\" ant-input-number\\"]{box-sizing:border-box;}[class^=\\"ant-input-number\\"] [class^=\\"ant-input-number\\"]::before,[class*=\\" ant-input-number\\"] [class^=\\"ant-input-number\\"]::before,[class^=\\"ant-input-number\\"] [class*=\\" ant-input-number\\"]::before,[class*=\\" ant-input-number\\"] [class*=\\" ant-input-number\\"]::before,[class^=\\"ant-input-number\\"] [class^=\\"ant-input-number\\"]::after,[class*=\\" ant-input-number\\"] [class^=\\"ant-input-number\\"]::after,[class^=\\"ant-input-number\\"] [class*=\\" ant-input-number\\"]::after,[class*=\\" ant-input-number\\"] [class*=\\" ant-input-number\\"]::after{box-sizing:border-box;}.ant-input-number{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;width:90px;min-width:0;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;border:1px solid #424242;}.ant-input-number::-moz-placeholder{opacity:1;}.ant-input-number::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-input-number:placeholder-shown{text-overflow:ellipsis;}.ant-input-number:hover{border-color:#198016;border-inline-end-width:1px;}.ant-input-number:focus,.ant-input-number-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-number-disabled,.ant-input-number[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-input-number-disabled:hover,.ant-input-number[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-input-number-borderless,.ant-input-number-borderless:hover,.ant-input-number-borderless:focus,.ant-input-number-borderless-focused,.ant-input-number-borderless-disabled,.ant-input-number-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-input-number{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-input-number-lg{padding:0;font-size:16px;border-radius:8px;}.ant-input-number-lg input.ant-input-number-input{height:38px;}.ant-input-number-sm{padding:0;border-radius:4px;}.ant-input-number-sm input.ant-input-number-input{height:22px;padding:0 7px;}.ant-input-number-rtl{direction:rtl;}.ant-input-number-rtl .ant-input-number-input{direction:rtl;}.ant-input-number-textarea-rtl{direction:rtl;}.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number{border-color:#dc4446;}.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover{border-color:#7e2e2f;}.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-input-number-status-error:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number .ant-input-number-prefix{color:#dc4446;}.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number{border-color:#d89614;}.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:hover{border-color:#7c5914;}.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number:focus,.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number-focused{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-number-status-warning:not(.ant-input-number-disabled):not(.ant-input-number-borderless).ant-input-number .ant-input-number-prefix{color:#d89614;}.ant-input-number-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-number-disabled{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-input-number-disabled:hover{border-color:#424242;border-inline-end-width:1px;}.ant-input-number-disabled .ant-input-number-input{cursor:not-allowed;}.ant-input-number-out-of-range input{color:#dc4446;}.ant-input-number-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:table;width:100%;border-collapse:separate;border-spacing:0;}.ant-input-number-group[class*='col-']{padding-inline-end:8px;}.ant-input-number-group[class*='col-']:last-child{padding-inline-end:0;}.ant-input-number-group-lg .ant-input-number,.ant-input-number-group-lg>.ant-input-number-group-addon{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-input-number-group-sm .ant-input-number,.ant-input-number-group-sm>.ant-input-number-group-addon{padding:0px 7px;border-radius:4px;}.ant-input-number-group >.ant-input-number{display:table-cell;}.ant-input-number-group >.ant-input-number:not(:first-child):not(:last-child){border-radius:0;}.ant-input-number-group .ant-input-number-group-addon,.ant-input-number-group .ant-input-number-group-wrap{display:table-cell;width:1px;white-space:nowrap;vertical-align:middle;}.ant-input-number-group .ant-input-number-group-addon:not(:first-child):not(:last-child),.ant-input-number-group .ant-input-number-group-wrap:not(:first-child):not(:last-child){border-radius:0;}.ant-input-number-group .ant-input-number-group-wrap>*{display:block!important;}.ant-input-number-group .ant-input-number-group-addon{position:relative;padding:0 11px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;text-align:center;background-color:rgba(255, 255, 255, 0.04);border:1px solid #424242;border-radius:6px;transition:all 0.3s;line-height:1;}.ant-input-number-group .ant-input-number-group-addon .ant-select{margin:-5px -11px;}.ant-input-number-group .ant-input-number-group-addon .ant-select.ant-select-single:not(.ant-select-customize-input) .ant-select-selector{background-color:inherit;border:1px solid transparent;box-shadow:none;}.ant-input-number-group .ant-input-number-group-addon .ant-select-open .ant-select-selector,.ant-input-number-group .ant-input-number-group-addon .ant-select-focused .ant-select-selector{color:#037003;}.ant-input-number-group .ant-input-number-group-addon .ant-cascader-picker{margin:-9px -11px;background-color:transparent;}.ant-input-number-group .ant-input-number-group-addon .ant-cascader-picker .ant-cascader-input{text-align:start;border:0;box-shadow:none;}.ant-input-number-group .ant-input-number-group-addon:first-child{border-inline-end:0;}.ant-input-number-group .ant-input-number-group-addon:last-child{border-inline-start:0;}.ant-input-number-group .ant-input-number{float:inline-start;width:100%;margin-bottom:0;text-align:inherit;}.ant-input-number-group .ant-input-number:focus{z-index:1;border-inline-end-width:1px;}.ant-input-number-group .ant-input-number:hover{z-index:1;border-inline-end-width:1px;}.ant-input-number-search-with-button .ant-input-number-group .ant-input-number:hover{z-index:0;}.ant-input-number-group >.ant-input-number:first-child,.ant-input-number-group .ant-input-number-group-addon:first-child{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-number-group >.ant-input-number:first-child .ant-select .ant-select-selector,.ant-input-number-group .ant-input-number-group-addon:first-child .ant-select .ant-select-selector{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-number-group >.ant-input-number-affix-wrapper:not(:first-child) .ant-input-number{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-number-group >.ant-input-number-affix-wrapper:not(:last-child) .ant-input-number{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-number-group >.ant-input-number:last-child,.ant-input-number-group .ant-input-number-group-addon:last-child{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-number-group >.ant-input-number:last-child .ant-select .ant-select-selector,.ant-input-number-group .ant-input-number-group-addon:last-child .ant-select .ant-select-selector{border-start-start-radius:0;border-end-start-radius:0;}.ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-start-end-radius:0;border-end-end-radius:0;}.ant-input-number-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:last-child){border-start-start-radius:6px;border-end-start-radius:6px;}.ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child),.ant-input-number-search .ant-input-number-group .ant-input-number-affix-wrapper:not(:first-child){border-start-start-radius:0;border-end-start-radius:0;}.ant-input-number-group.ant-input-number-group-compact{display:block;}.ant-input-number-group.ant-input-number-group-compact::before{display:table;content:\\"\\";}.ant-input-number-group.ant-input-number-group-compact::after{display:table;clear:both;content:\\"\\";}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-addon:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrap:not(:first-child):not(:last-child),.ant-input-number-group.ant-input-number-group-compact >.ant-input-number:not(:first-child):not(:last-child){border-inline-end-width:1px;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-addon:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrap:not(:first-child):not(:last-child):hover,.ant-input-number-group.ant-input-number-group-compact >.ant-input-number:not(:first-child):not(:last-child):hover{z-index:1;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-addon:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrap:not(:first-child):not(:last-child):focus,.ant-input-number-group.ant-input-number-group-compact >.ant-input-number:not(:first-child):not(:last-child):focus{z-index:1;}.ant-input-number-group.ant-input-number-group-compact>*{display:inline-block;float:none;vertical-align:top;border-radius:0;}.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-affix-wrapper{display:inline-flex;}.ant-input-number-group.ant-input-number-group-compact>.ant-picker-range{display:inline-flex;}.ant-input-number-group.ant-input-number-group-compact>*:not(:last-child){margin-inline-end:-1px;border-inline-end-width:1px;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number{float:none;}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input-number,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input-number,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-group-wrapper .ant-input-number{border-inline-end-width:1px;border-radius:0;}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input-number:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input-number:hover,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-group-wrapper .ant-input-number:hover{z-index:1;}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-selector:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input-number:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker .ant-input-number:focus,.ant-input-number-group.ant-input-number-group-compact>.ant-input-number-group-wrapper .ant-input-number:focus{z-index:1;}.ant-input-number-group.ant-input-number-group-compact>.ant-select-focused{z-index:1;}.ant-input-number-group.ant-input-number-group-compact>.ant-select>.ant-select-arrow{z-index:1;}.ant-input-number-group.ant-input-number-group-compact>*:first-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:first-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete:first-child .ant-input-number,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:first-child .ant-input-number{border-start-start-radius:6px;border-end-start-radius:6px;}.ant-input-number-group.ant-input-number-group-compact>*:last-child,.ant-input-number-group.ant-input-number-group-compact>.ant-select:last-child>.ant-select-selector,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker:last-child .ant-input-number,.ant-input-number-group.ant-input-number-group-compact>.ant-cascader-picker-focused:last-child .ant-input-number{border-inline-end-width:1px;border-start-end-radius:6px;border-end-end-radius:6px;}.ant-input-number-group.ant-input-number-group-compact>.ant-select-auto-complete .ant-input-number{vertical-align:top;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrapper+.ant-input-number-group-wrapper{margin-inline-start:-1px;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrapper+.ant-input-number-group-wrapper .ant-input-number-affix-wrapper{border-radius:0;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrapper:not(:last-child).ant-input-number-search>.ant-input-number-group>.ant-input-number-group-addon>.ant-input-number-search-button{border-radius:0;}.ant-input-number-group.ant-input-number-group-compact .ant-input-number-group-wrapper:not(:last-child).ant-input-number-search>.ant-input-number-group>.ant-input-number{border-start-start-radius:6px;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:6px;}.ant-input-number-group.ant-input-number-group-sm .ant-btn{font-size:12px;height:24px;line-height:normal;}.ant-input-number-group.ant-input-number-group-lg .ant-btn{font-size:16px;height:40px;line-height:normal;}.ant-input-number-group.ant-input-number-group-lg .ant-select-single .ant-select-selector{height:40px;}.ant-input-number-group.ant-input-number-group-lg .ant-select-single .ant-select-selector .ant-select-selection-item,.ant-input-number-group.ant-input-number-group-lg .ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:38px;}.ant-input-number-group.ant-input-number-group-lg .ant-select-single .ant-select-selector .ant-select-selection-search-input{height:40px;}.ant-input-number-group.ant-input-number-group-sm .ant-select-single .ant-select-selector{height:24px;}.ant-input-number-group.ant-input-number-group-sm .ant-select-single .ant-select-selector .ant-select-selection-item,.ant-input-number-group.ant-input-number-group-sm .ant-select-single .ant-select-selector .ant-select-selection-placeholder{line-height:22px;}.ant-input-number-group.ant-input-number-group-sm .ant-select-single .ant-select-selector .ant-select-selection-search-input{height:24px;}.ant-input-number-group-wrapper{display:inline-block;text-align:start;vertical-align:top;}.ant-input-number-group-wrapper .ant-input-number-affix-wrapper{width:100%;}.ant-input-number-group-wrapper-lg .ant-input-number-group-addon{border-radius:8px;}.ant-input-number-group-wrapper-sm .ant-input-number-group-addon{border-radius:4px;}.ant-input-number .ant-input-number-input{width:100%;height:30px;padding:0 11px;text-align:start;background-color:transparent;border:0;border-radius:6px;outline:0;transition:all 0.2s linear;appearance:textfield;color:rgba(255, 255, 255, 0.85);font-size:inherit;vertical-align:top;}.ant-input-number .ant-input-number-input::-moz-placeholder{opacity:1;}.ant-input-number .ant-input-number-input::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-input-number .ant-input-number-input:placeholder-shown{text-overflow:ellipsis;}.ant-input-number .ant-input-number-input[type=\\"number\\"]::-webkit-inner-spin-button,.ant-input-number .ant-input-number-input[type=\\"number\\"]::-webkit-outer-spin-button{margin:0;webkit-appearance:none;appearance:none;}.ant-input-number:hover .ant-input-number-handler-wrap,.ant-input-number-focused .ant-input-number-handler-wrap{opacity:1;}.ant-input-number .ant-input-number-handler-wrap{position:absolute;inset-block-start:0;inset-inline-end:0;width:22px;height:100%;background:#141414;border-start-start-radius:0;border-start-end-radius:6px;border-end-end-radius:6px;border-end-start-radius:0;opacity:0;display:flex;flex-direction:column;align-items:stretch;transition:opacity 0.2s linear 0.2s;}.ant-input-number .ant-input-number-handler-wrap .ant-input-number-handler{display:flex;align-items:center;justify-content:center;flex:auto;height:40%;}.ant-input-number .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-up-inner,.ant-input-number .ant-input-number-handler-wrap .ant-input-number-handler .ant-input-number-handler-down-inner{margin-inline-end:0;font-size:7px;}.ant-input-number .ant-input-number-handler{height:50%;overflow:hidden;color:rgba(255, 255, 255, 0.45);font-weight:bold;line-height:0;text-align:center;cursor:pointer;border-inline-start:1px solid #424242;transition:all 0.2s linear;}.ant-input-number .ant-input-number-handler:active{background:rgba(255, 255, 255, 0.04);}.ant-input-number .ant-input-number-handler:hover{height:60%;}.ant-input-number .ant-input-number-handler:hover .ant-input-number-handler-up-inner,.ant-input-number .ant-input-number-handler:hover .ant-input-number-handler-down-inner{color:#037003;}.ant-input-number .ant-input-number-handler-up-inner,.ant-input-number .ant-input-number-handler-down-inner{display:inline-flex;align-items:center;color:rgba(255, 255, 255, 0.45);font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;transition:all 0.2s linear;user-select:none;}.ant-input-number .ant-input-number-handler-up-inner >*,.ant-input-number .ant-input-number-handler-down-inner >*{line-height:1;}.ant-input-number .ant-input-number-handler-up-inner svg,.ant-input-number .ant-input-number-handler-down-inner svg{display:inline-block;}.ant-input-number .ant-input-number-handler-up{border-start-end-radius:6px;}.ant-input-number .ant-input-number-handler-down{border-block-start:1px solid #424242;border-end-end-radius:6px;}.ant-input-number-disabled .ant-input-number-handler-wrap,.ant-input-number-readonly .ant-input-number-handler-wrap{display:none;}.ant-input-number .ant-input-number-handler-up-disabled,.ant-input-number .ant-input-number-handler-down-disabled{cursor:not-allowed;}.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner,.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner{color:rgba(255, 255, 255, 0.25);}.ant-input-number-borderless{border-color:transparent;box-shadow:none;}.ant-input-number-borderless .ant-input-number-handler-down{border-block-start-width:0;}.ant-input-number-affix-wrapper{position:relative;display:inline-flex;width:90px;min-width:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;padding-inline-start:11px;}.ant-input-number-affix-wrapper::-moz-placeholder{opacity:1;}.ant-input-number-affix-wrapper::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-input-number-affix-wrapper:placeholder-shown{text-overflow:ellipsis;}.ant-input-number-affix-wrapper:hover{border-color:#198016;border-inline-end-width:1px;}.ant-input-number-affix-wrapper:focus,.ant-input-number-affix-wrapper-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-number-affix-wrapper-disabled,.ant-input-number-affix-wrapper[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-input-number-affix-wrapper-disabled:hover,.ant-input-number-affix-wrapper[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-input-number-affix-wrapper-borderless,.ant-input-number-affix-wrapper-borderless:hover,.ant-input-number-affix-wrapper-borderless:focus,.ant-input-number-affix-wrapper-borderless-focused,.ant-input-number-affix-wrapper-borderless-disabled,.ant-input-number-affix-wrapper-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-input-number-affix-wrapper{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-input-number-affix-wrapper-lg{border-radius:8px;}.ant-input-number-affix-wrapper-sm{border-radius:4px;}.ant-input-number-affix-wrapper-rtl{direction:rtl;}.ant-input-number-affix-wrapper-textarea-rtl{direction:rtl;}.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper{border-color:#dc4446;}.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{border-color:#7e2e2f;}.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-input-number-affix-wrapper-status-error:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper .ant-input-number-prefix{color:#dc4446;}.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper{border-color:#d89614;}.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:hover{border-color:#7c5914;}.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper:focus,.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper-focused{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-input-number-affix-wrapper-status-warning:not(.ant-input-number-affix-wrapper-disabled):not(.ant-input-number-affix-wrapper-borderless).ant-input-number-affix-wrapper .ant-input-number-prefix{color:#d89614;}.ant-input-number-affix-wrapper:not(.ant-input-number-affix-wrapper-disabled):hover{border-color:#198016;border-inline-end-width:1px;z-index:1;}.ant-input-number-affix-wrapper-focused,.ant-input-number-affix-wrapper:focus{z-index:1;}.ant-input-number-affix-wrapper-disabled .ant-input-number[disabled]{background:transparent;}.ant-input-number-affix-wrapper >div.ant-input-number{width:100%;border:none;outline:none;}.ant-input-number-affix-wrapper >div.ant-input-number.ant-input-number-focused{box-shadow:none!important;}.ant-input-number-affix-wrapper input.ant-input-number-input{padding:0;}.ant-input-number-affix-wrapper::before{width:0;visibility:hidden;content:\\"\\\\a0\\";}.ant-input-number-affix-wrapper .ant-input-number-handler-wrap{z-index:2;}.ant-input-number-affix-wrapper .ant-input-number-prefix,.ant-input-number-affix-wrapper .ant-input-number-suffix{display:flex;flex:none;align-items:center;pointer-events:none;}.ant-input-number-affix-wrapper .ant-input-number-prefix{margin-inline-end:4px;}.ant-input-number-affix-wrapper .ant-input-number-suffix{position:absolute;inset-block-start:0;inset-inline-end:0;z-index:1;height:100%;margin-inline-end:11px;margin-inline-start:4px;}.ant-input-number-compact-item:not(.ant-input-number-compact-last-item){margin-inline-end:-1px;}.ant-input-number-compact-item:hover,.ant-input-number-compact-item:focus,.ant-input-number-compact-item:active{z-index:2;}.ant-input-number-compact-item[disabled]{z-index:0;}.ant-input-number-compact-item:not(.ant-input-number-compact-first-item):not(.ant-input-number-compact-last-item){border-radius:0;}.ant-input-number-compact-item:not(.ant-input-number-compact-last-item).ant-input-number-compact-first-item,.ant-input-number-compact-item:not(.ant-input-number-compact-last-item).ant-input-number-compact-first-item.ant-input-number-sm,.ant-input-number-compact-item:not(.ant-input-number-compact-last-item).ant-input-number-compact-first-item.ant-input-number-lg{border-start-end-radius:0;border-end-end-radius:0;}.ant-input-number-compact-item:not(.ant-input-number-compact-first-item).ant-input-number-compact-last-item,.ant-input-number-compact-item:not(.ant-input-number-compact-first-item).ant-input-number-compact-last-item.ant-input-number-sm,.ant-input-number-compact-item:not(.ant-input-number-compact-first-item).ant-input-number-compact-last-item.ant-input-number-lg{border-start-start-radius:0;border-end-start-radius:0;}[class^=\\"ant-layout\\"],[class*=\\" ant-layout\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-layout\\"]::before,[class*=\\" ant-layout\\"]::before,[class^=\\"ant-layout\\"]::after,[class*=\\" ant-layout\\"]::after{box-sizing:border-box;}[class^=\\"ant-layout\\"] [class^=\\"ant-layout\\"],[class*=\\" ant-layout\\"] [class^=\\"ant-layout\\"],[class^=\\"ant-layout\\"] [class*=\\" ant-layout\\"],[class*=\\" ant-layout\\"] [class*=\\" ant-layout\\"]{box-sizing:border-box;}[class^=\\"ant-layout\\"] [class^=\\"ant-layout\\"]::before,[class*=\\" ant-layout\\"] [class^=\\"ant-layout\\"]::before,[class^=\\"ant-layout\\"] [class*=\\" ant-layout\\"]::before,[class*=\\" ant-layout\\"] [class*=\\" ant-layout\\"]::before,[class^=\\"ant-layout\\"] [class^=\\"ant-layout\\"]::after,[class*=\\" ant-layout\\"] [class^=\\"ant-layout\\"]::after,[class^=\\"ant-layout\\"] [class*=\\" ant-layout\\"]::after,[class*=\\" ant-layout\\"] [class*=\\" ant-layout\\"]::after{box-sizing:border-box;}.ant-layout{display:flex;flex:auto;flex-direction:column;min-height:0;background:#000000;}.ant-layout,.ant-layout *{box-sizing:border-box;}.ant-layout.ant-layout-has-sider{flex-direction:row;}.ant-layout.ant-layout-has-sider >.ant-layout,.ant-layout.ant-layout-has-sider >.ant-layout-content{width:0;}.ant-layout .ant-layout-header,.ant-layout.ant-layout-footer{flex:0 0 auto;}.ant-layout .ant-layout-header{height:64px;padding-inline:50px;color:rgba(255, 255, 255, 0.85);line-height:64px;background:#001529;}.ant-layout .ant-layout-header .ant-menu{line-height:inherit;}.ant-layout .ant-layout-footer{padding:24px 50px;color:rgba(255, 255, 255, 0.85);font-size:14px;background:#000000;}.ant-layout .ant-layout-content{flex:auto;min-height:0;}.ant-layout .ant-layout-sider{position:relative;min-width:0;background:#001529;transition:all 0.2s,background 0s;}.ant-layout .ant-layout-sider-children{height:100%;margin-top:-0.1px;padding-top:0.1px;}.ant-layout .ant-layout-sider-children .ant-menu.ant-menu-inline-collapsed{width:auto;}.ant-layout .ant-layout-sider-has-trigger{padding-bottom:48px;}.ant-layout .ant-layout-sider-right{order:1;}.ant-layout .ant-layout-sider-trigger{position:fixed;bottom:0;z-index:1;height:48px;color:#fff;line-height:48px;text-align:center;background:#002140;cursor:pointer;transition:all 0.2s;}.ant-layout .ant-layout-sider-zero-width >*{overflow:hidden;}.ant-layout .ant-layout-sider-zero-width-trigger{position:absolute;top:64px;inset-inline-end:-40px;z-index:1;width:40px;height:40px;color:#fff;font-size:20px;display:flex;align-items:center;justify-content:center;background:#001529;border-start-start-radius:0;border-start-end-radius:6px;border-end-end-radius:6px;border-end-start-radius:0;cursor:pointer;transition:background 0.3s ease;}.ant-layout .ant-layout-sider-zero-width-trigger::after{position:absolute;inset:0;background:transparent;transition:all 0.3s;content:\\"\\";}.ant-layout .ant-layout-sider-zero-width-trigger:hover::after{background:rgba(255, 255, 255, 0.2);}.ant-layout .ant-layout-sider-zero-width-trigger-right{inset-inline-start:-40px;border-start-start-radius:6px;border-start-end-radius:0;border-end-end-radius:0;border-end-start-radius:6px;}.ant-layout .ant-layout-sider-light{background:#141414;}.ant-layout .ant-layout-sider-light .ant-layout-sider-trigger{color:rgba(255, 255, 255, 0.85);background:#141414;}.ant-layout .ant-layout-sider-light .ant-layout-sider-zero-width-trigger{color:rgba(255, 255, 255, 0.85);background:#141414;border:1px solid #000000;border-inline-start:0;}.ant-layout-rtl{direction:rtl;}[class^=\\"ant-list\\"],[class*=\\" ant-list\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-list\\"]::before,[class*=\\" ant-list\\"]::before,[class^=\\"ant-list\\"]::after,[class*=\\" ant-list\\"]::after{box-sizing:border-box;}[class^=\\"ant-list\\"] [class^=\\"ant-list\\"],[class*=\\" ant-list\\"] [class^=\\"ant-list\\"],[class^=\\"ant-list\\"] [class*=\\" ant-list\\"],[class*=\\" ant-list\\"] [class*=\\" ant-list\\"]{box-sizing:border-box;}[class^=\\"ant-list\\"] [class^=\\"ant-list\\"]::before,[class*=\\" ant-list\\"] [class^=\\"ant-list\\"]::before,[class^=\\"ant-list\\"] [class*=\\" ant-list\\"]::before,[class*=\\" ant-list\\"] [class*=\\" ant-list\\"]::before,[class^=\\"ant-list\\"] [class^=\\"ant-list\\"]::after,[class*=\\" ant-list\\"] [class^=\\"ant-list\\"]::after,[class^=\\"ant-list\\"] [class*=\\" ant-list\\"]::after,[class*=\\" ant-list\\"] [class*=\\" ant-list\\"]::after{box-sizing:border-box;}.ant-list{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;}.ant-list *{outline:none;}.ant-list .ant-list-header,.ant-list .ant-list-footer{background:transparent;padding-block:12px;}.ant-list .ant-list-pagination{margin-block-start:24px;text-align:end;}.ant-list .ant-list-pagination .ant-pagination-options{text-align:start;}.ant-list .ant-list-spin{min-height:40px;text-align:center;}.ant-list .ant-list-items{margin:0;padding:0;list-style:none;}.ant-list .ant-list-item{display:flex;align-items:center;justify-content:space-between;padding:12px 24px;color:rgba(255, 255, 255, 0.85);}.ant-list .ant-list-item .ant-list-item-meta{display:flex;flex:1;align-items:flex-start;max-width:100%;}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-avatar{margin-inline-end:16px;}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-content{flex:1 0;width:0;color:rgba(255, 255, 255, 0.85);}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-title{margin-bottom:4px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-title >a{color:rgba(255, 255, 255, 0.85);transition:all 0.3s;}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-title >a:hover{color:#037003;}.ant-list .ant-list-item .ant-list-item-meta .ant-list-item-meta-description{color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;}.ant-list .ant-list-item .ant-list-item-action{flex:0 0 auto;margin-inline-start:48px;padding:0;font-size:0;list-style:none;}.ant-list .ant-list-item .ant-list-item-action>li{position:relative;display:inline-block;padding:0 8px;color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;text-align:center;}.ant-list .ant-list-item .ant-list-item-action>li:first-child{padding-inline-start:0;}.ant-list .ant-list-item .ant-list-item-action .ant-list-item-action-split{position:absolute;inset-block-start:50%;inset-inline-end:0;width:1px;height:14px;transform:translateY(-50%);background-color:rgba(253, 253, 253, 0.12);}.ant-list .ant-list-empty{padding:16px 0;color:rgba(255, 255, 255, 0.45);font-size:12px;text-align:center;}.ant-list .ant-list-empty-text{padding:16px;color:rgba(255, 255, 255, 0.25);font-size:14px;text-align:center;}.ant-list .ant-list-item-no-flex{display:block;}.ant-list-grid .ant-col>.ant-list-item{display:block;max-width:100%;margin-block-end:16px;padding-block:0;border-block-end:none;}.ant-list-vertical .ant-list-item{align-items:initial;}.ant-list-vertical .ant-list-item .ant-list-item-main{display:block;flex:1;}.ant-list-vertical .ant-list-item .ant-list-item-extra{margin-inline-start:24px;}.ant-list-vertical .ant-list-item .ant-list-item-meta{margin-block-end:16px;}.ant-list-vertical .ant-list-item .ant-list-item-meta .ant-list-item-meta-title{margin-block-end:12px;color:rgba(255, 255, 255, 0.85);font-size:16px;line-height:1.5;}.ant-list-vertical .ant-list-item .ant-list-item-action{margin-block-start:16px;margin-inline-start:auto;}.ant-list-vertical .ant-list-item .ant-list-item-action >li{padding:0 16px;}.ant-list-vertical .ant-list-item .ant-list-item-action >li:first-child{padding-inline-start:0;}.ant-list-split .ant-list-item{border-block-end:1px solid rgba(253, 253, 253, 0.12);}.ant-list-split .ant-list-item:last-child{border-block-end:none;}.ant-list-split .ant-list-header{border-block-end:1px solid rgba(253, 253, 253, 0.12);}.ant-list-split.ant-list-empty .ant-list-footer{border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-list-loading .ant-list-spin-nested-loading{min-height:32px;}.ant-list-split.ant-list-something-after-last-item .ant-spin-container>.ant-list-items>.ant-list-item:last-child{border-block-end:1px solid rgba(253, 253, 253, 0.12);}.ant-list-lg .ant-list-item{padding:16px 24px;}.ant-list-sm .ant-list-item{padding:8px 16px;}.ant-list:not(.ant-list-vertical) .ant-list-item-no-flex .ant-list-item-action{float:right;}.ant-list-bordered{border:1px solid #424242;border-radius:8px;}.ant-list-bordered .ant-list-header,.ant-list-bordered .ant-list-footer,.ant-list-bordered .ant-list-item{padding-inline:24px;}.ant-list-bordered .ant-list-pagination{margin:16px 24px;}.ant-list-bordered.ant-list-sm .ant-list-item,.ant-list-bordered.ant-list-sm .ant-list-header,.ant-list-bordered.ant-list-sm .ant-list-footer{padding:8px 16px;}.ant-list-bordered.ant-list-lg .ant-list-item,.ant-list-bordered.ant-list-lg .ant-list-header,.ant-list-bordered.ant-list-lg .ant-list-footer{padding:16px 24px;}@media screen and (max-width:768){.ant-list .ant-list-item .ant-list-item-action{margin-inline-start:24px;}.ant-list-vertical .ant-list-item .ant-list-item-extra{margin-inline-start:24px;}}@media screen and (max-width: 576){.ant-list .ant-list-item{flex-wrap:wrap;}.ant-list .ant-list-item .ant-list-action{margin-inline-start:12px;}.ant-list-vertical .ant-list-item{flex-wrap:wrap-reverse;}.ant-list-vertical .ant-list-item .ant-list-item-main{min-width:220px;}.ant-list-vertical .ant-list-item .ant-list-item-extra{margin:auto auto 16px;}}[class^=\\"ant-spin\\"],[class*=\\" ant-spin\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-spin\\"]::before,[class*=\\" ant-spin\\"]::before,[class^=\\"ant-spin\\"]::after,[class*=\\" ant-spin\\"]::after{box-sizing:border-box;}[class^=\\"ant-spin\\"] [class^=\\"ant-spin\\"],[class*=\\" ant-spin\\"] [class^=\\"ant-spin\\"],[class^=\\"ant-spin\\"] [class*=\\" ant-spin\\"],[class*=\\" ant-spin\\"] [class*=\\" ant-spin\\"]{box-sizing:border-box;}[class^=\\"ant-spin\\"] [class^=\\"ant-spin\\"]::before,[class*=\\" ant-spin\\"] [class^=\\"ant-spin\\"]::before,[class^=\\"ant-spin\\"] [class*=\\" ant-spin\\"]::before,[class*=\\" ant-spin\\"] [class*=\\" ant-spin\\"]::before,[class^=\\"ant-spin\\"] [class^=\\"ant-spin\\"]::after,[class*=\\" ant-spin\\"] [class^=\\"ant-spin\\"]::after,[class^=\\"ant-spin\\"] [class*=\\" ant-spin\\"]::after,[class*=\\" ant-spin\\"] [class*=\\" ant-spin\\"]::after{box-sizing:border-box;}.ant-spin{box-sizing:border-box;margin:0;padding:0;color:#037003;font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;display:none;text-align:center;vertical-align:middle;opacity:0;transition:transform 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-spin-spinning{position:static;display:inline-block;opacity:1;}.ant-spin-nested-loading{position:relative;}.ant-spin-nested-loading >div>.ant-spin{position:absolute;top:0;inset-inline-start:0;z-index:4;display:block;width:100%;height:100%;max-height:400px;}.ant-spin-nested-loading >div>.ant-spin .ant-spin-dot{position:absolute;top:50%;inset-inline-start:50%;margin:-10px;}.ant-spin-nested-loading >div>.ant-spin .ant-spin-text{position:absolute;top:50%;width:100%;padding-top:5px;text-shadow:0 1px 2px #141414;}.ant-spin-nested-loading >div>.ant-spin.ant-spin-show-text .ant-spin-dot{margin-top:-20px;}.ant-spin-nested-loading >div>.ant-spin-sm .ant-spin-dot{margin:-7px;}.ant-spin-nested-loading >div>.ant-spin-sm .ant-spin-text{padding-top:2px;}.ant-spin-nested-loading >div>.ant-spin-sm.ant-spin-show-text .ant-spin-dot{margin-top:-17px;}.ant-spin-nested-loading >div>.ant-spin-lg .ant-spin-dot{margin:-16px;}.ant-spin-nested-loading >div>.ant-spin-lg .ant-spin-text{padding-top:11px;}.ant-spin-nested-loading >div>.ant-spin-lg.ant-spin-show-text .ant-spin-dot{margin-top:-26px;}.ant-spin-nested-loading .ant-spin-container{position:relative;transition:opacity 0.3s;}.ant-spin-nested-loading .ant-spin-container::after{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:10;width:100%;height:100%;background:#141414;opacity:0;transition:all 0.3s;content:\\"\\";pointer-events:none;}.ant-spin-nested-loading .ant-spin-blur{clear:both;opacity:0.5;user-select:none;pointer-events:none;}.ant-spin-nested-loading .ant-spin-blur::after{opacity:0.4;pointer-events:auto;}.ant-spin-tip{color:rgba(255, 255, 255, 0.45);}.ant-spin .ant-spin-dot{position:relative;display:inline-block;font-size:20px;width:1em;height:1em;}.ant-spin .ant-spin-dot-item{position:absolute;display:block;width:9px;height:9px;background-color:#037003;border-radius:100%;transform:scale(0.75);transform-origin:50% 50%;opacity:0.3;animation-name:antSpinMove;animation-duration:1s;animation-iteration-count:infinite;animation-timing-function:linear;animation-direction:alternate;}.ant-spin .ant-spin-dot-item:nth-child(1){top:0;inset-inline-start:0;}.ant-spin .ant-spin-dot-item:nth-child(2){top:0;inset-inline-end:0;animation-delay:0.4s;}.ant-spin .ant-spin-dot-item:nth-child(3){inset-inline-end:0;bottom:0;animation-delay:0.8s;}.ant-spin .ant-spin-dot-item:nth-child(4){bottom:0;inset-inline-start:0;animation-delay:1.2s;}.ant-spin .ant-spin-dot-spin{transform:rotate(45deg);animation-name:antRotate;animation-duration:1.2s;animation-iteration-count:infinite;animation-timing-function:linear;}.ant-spin-sm .ant-spin-dot{font-size:14px;}.ant-spin-sm .ant-spin-dot i{width:6px;height:6px;}.ant-spin-lg .ant-spin-dot{font-size:32px;}.ant-spin-lg .ant-spin-dot i{width:14px;height:14px;}.ant-spin.ant-spin-show-text .ant-spin-text{display:block;}@keyframes antSpinMove{to{opacity:1;}}@keyframes antRotate{to{transform:rotate(405deg);}}[class^=\\"ant-menu\\"],[class*=\\" ant-menu\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-menu\\"]::before,[class*=\\" ant-menu\\"]::before,[class^=\\"ant-menu\\"]::after,[class*=\\" ant-menu\\"]::after{box-sizing:border-box;}[class^=\\"ant-menu\\"] [class^=\\"ant-menu\\"],[class*=\\" ant-menu\\"] [class^=\\"ant-menu\\"],[class^=\\"ant-menu\\"] [class*=\\" ant-menu\\"],[class*=\\" ant-menu\\"] [class*=\\" ant-menu\\"]{box-sizing:border-box;}[class^=\\"ant-menu\\"] [class^=\\"ant-menu\\"]::before,[class*=\\" ant-menu\\"] [class^=\\"ant-menu\\"]::before,[class^=\\"ant-menu\\"] [class*=\\" ant-menu\\"]::before,[class*=\\" ant-menu\\"] [class*=\\" ant-menu\\"]::before,[class^=\\"ant-menu\\"] [class^=\\"ant-menu\\"]::after,[class*=\\" ant-menu\\"] [class^=\\"ant-menu\\"]::after,[class^=\\"ant-menu\\"] [class*=\\" ant-menu\\"]::after,[class*=\\" ant-menu\\"] [class*=\\" ant-menu\\"]::after{box-sizing:border-box;}.ant-menu::before{display:table;content:\\"\\";}.ant-menu::after{display:table;clear:both;content:\\"\\";}.ant-menu-hidden{display:none;}.ant-menu-submenu-hidden{display:none;}.ant-menu{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:0;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';margin-bottom:0;padding-inline-start:0;outline:none;transition:width 0.3s cubic-bezier(0.2, 0, 0, 1) 0s;}.ant-menu::before{display:table;content:\\"\\";}.ant-menu::after{display:table;clear:both;content:\\"\\";}.ant-menu ul,.ant-menu ol{margin:0;padding:0;list-style:none;}.ant-menu-overflow{display:flex;}.ant-menu-overflow .ant-menu-item{flex:none;}.ant-menu .ant-menu-item,.ant-menu .ant-menu-submenu,.ant-menu .ant-menu-submenu-title{border-radius:8px;}.ant-menu .ant-menu-item-group-title{padding:8px 16px;font-size:14px;line-height:1.5714285714285714;transition:all 0.3s;}.ant-menu-horizontal .ant-menu-submenu{transition:border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu .ant-menu-submenu,.ant-menu .ant-menu-submenu-inline{transition:border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),padding 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu .ant-menu-submenu .ant-menu-sub{cursor:initial;transition:background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu .ant-menu-title-content{transition:color 0.3s;}.ant-menu .ant-menu-item a::before{position:absolute;inset:0;background-color:transparent;content:\\"\\";}.ant-menu .ant-menu-item-divider{overflow:hidden;line-height:0;border-color:rgba(253, 253, 253, 0.12);border-style:solid;border-width:0;border-top-width:1px;margin-block:1px;padding:0;}.ant-menu .ant-menu-item-divider-dashed{border-style:dashed;}.ant-menu .ant-menu-item,.ant-menu .ant-menu-submenu-title{position:relative;display:block;margin:0;white-space:nowrap;cursor:pointer;transition:border-color 0.3s,background 0.3s,padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu .ant-menu-item .ant-menu-item-icon,.ant-menu .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu .ant-menu-item .anticon,.ant-menu .ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size 0.2s cubic-bezier(0.215, 0.61, 0.355, 1),margin 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),color 0.3s;}.ant-menu .ant-menu-item .ant-menu-item-icon +span,.ant-menu .ant-menu-submenu-title .ant-menu-item-icon +span,.ant-menu .ant-menu-item .anticon +span,.ant-menu .ant-menu-submenu-title .anticon +span{margin-inline-start:10px;opacity:1;transition:opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),margin 0.3s,color 0.3s;}.ant-menu .ant-menu-item .ant-menu-item-icon,.ant-menu .ant-menu-submenu-title .ant-menu-item-icon{display:inline-flex;align-items:center;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.ant-menu .ant-menu-item .ant-menu-item-icon >*,.ant-menu .ant-menu-submenu-title .ant-menu-item-icon >*{line-height:1;}.ant-menu .ant-menu-item .ant-menu-item-icon svg,.ant-menu .ant-menu-submenu-title .ant-menu-item-icon svg{display:inline-block;}.ant-menu .ant-menu-item.ant-menu-item-only-child >.anticon,.ant-menu .ant-menu-submenu-title.ant-menu-item-only-child >.anticon,.ant-menu .ant-menu-item.ant-menu-item-only-child >.ant-menu-item-icon,.ant-menu .ant-menu-submenu-title.ant-menu-item-only-child >.ant-menu-item-icon{margin-inline-end:0;}.ant-menu .ant-menu-item-disabled,.ant-menu .ant-menu-submenu-disabled{background:none!important;cursor:not-allowed;}.ant-menu .ant-menu-item-disabled::after,.ant-menu .ant-menu-submenu-disabled::after{border-color:transparent!important;}.ant-menu .ant-menu-item-disabled a,.ant-menu .ant-menu-submenu-disabled a{color:inherit!important;}.ant-menu .ant-menu-item-disabled >.ant-menu-submenu-title,.ant-menu .ant-menu-submenu-disabled >.ant-menu-submenu-title{color:inherit!important;cursor:not-allowed;}.ant-menu .ant-menu-item-group .ant-menu-item-group-list{margin:0;padding:0;}.ant-menu .ant-menu-item-group .ant-menu-item-group-list .ant-menu-item,.ant-menu .ant-menu-item-group .ant-menu-item-group-list .ant-menu-submenu-title{padding-inline:28px 16px;}.ant-menu-submenu-popup{position:absolute;z-index:1050;background:transparent;border-radius:8px;box-shadow:none;transform-origin:0 0;}.ant-menu-submenu-popup::before{position:absolute;inset:-7px 0 0;z-index:-1;width:100%;height:100%;opacity:0;content:\\"\\";}.ant-menu-submenu-placement-rightTop::before{top:0;inset-inline-start:-7px;}.ant-menu-submenu >.ant-menu{border-radius:8px;}.ant-menu-submenu >.ant-menu .ant-menu-item,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title{position:relative;display:block;margin:0;white-space:nowrap;cursor:pointer;transition:border-color 0.3s,background 0.3s,padding 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu-submenu >.ant-menu .ant-menu-item .ant-menu-item-icon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-submenu >.ant-menu .ant-menu-item .anticon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .anticon{min-width:14px;font-size:14px;transition:font-size 0.2s cubic-bezier(0.215, 0.61, 0.355, 1),margin 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),color 0.3s;}.ant-menu-submenu >.ant-menu .ant-menu-item .ant-menu-item-icon +span,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .ant-menu-item-icon +span,.ant-menu-submenu >.ant-menu .ant-menu-item .anticon +span,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .anticon +span{margin-inline-start:10px;opacity:1;transition:opacity 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),margin 0.3s,color 0.3s;}.ant-menu-submenu >.ant-menu .ant-menu-item .ant-menu-item-icon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .ant-menu-item-icon{display:inline-flex;align-items:center;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.ant-menu-submenu >.ant-menu .ant-menu-item .ant-menu-item-icon >*,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .ant-menu-item-icon >*{line-height:1;}.ant-menu-submenu >.ant-menu .ant-menu-item .ant-menu-item-icon svg,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title .ant-menu-item-icon svg{display:inline-block;}.ant-menu-submenu >.ant-menu .ant-menu-item.ant-menu-item-only-child >.anticon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title.ant-menu-item-only-child >.anticon,.ant-menu-submenu >.ant-menu .ant-menu-item.ant-menu-item-only-child >.ant-menu-item-icon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-title.ant-menu-item-only-child >.ant-menu-item-icon{margin-inline-end:0;}.ant-menu-submenu >.ant-menu .ant-menu-item-disabled,.ant-menu-submenu >.ant-menu .ant-menu-submenu-disabled{background:none!important;cursor:not-allowed;}.ant-menu-submenu >.ant-menu .ant-menu-item-disabled::after,.ant-menu-submenu >.ant-menu .ant-menu-submenu-disabled::after{border-color:transparent!important;}.ant-menu-submenu >.ant-menu .ant-menu-item-disabled a,.ant-menu-submenu >.ant-menu .ant-menu-submenu-disabled a{color:inherit!important;}.ant-menu-submenu >.ant-menu .ant-menu-item-disabled >.ant-menu-submenu-title,.ant-menu-submenu >.ant-menu .ant-menu-submenu-disabled >.ant-menu-submenu-title{color:inherit!important;cursor:not-allowed;}.ant-menu-submenu >.ant-menu .ant-menu-submenu-expand-icon,.ant-menu-submenu >.ant-menu .ant-menu-submenu-arrow{position:absolute;top:50%;inset-inline-end:16px;width:10px;color:currentcolor;transform:translateY(-50%);transition:transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s;}.ant-menu-submenu >.ant-menu .ant-menu-submenu-arrow::before,.ant-menu-submenu >.ant-menu .ant-menu-submenu-arrow::after{position:absolute;width:6px;height:1.5px;background-color:currentcolor;border-radius:6px;transition:background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),top 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);content:\\"\\";}.ant-menu-submenu >.ant-menu .ant-menu-submenu-arrow::before{transform:rotate(45deg) translateY(-2.5px);}.ant-menu-submenu >.ant-menu .ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateY(2.5px);}.ant-menu-submenu >.ant-menu .ant-menu-item,.ant-menu-submenu >.ant-menu .ant-menu-submenu>.ant-menu-submenu-title{border-radius:4px;}.ant-menu-submenu >.ant-menu .ant-menu-submenu-title::after{transition:transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu .ant-menu-submenu-expand-icon,.ant-menu .ant-menu-submenu-arrow{position:absolute;top:50%;inset-inline-end:16px;width:10px;color:currentcolor;transform:translateY(-50%);transition:transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.3s;}.ant-menu .ant-menu-submenu-arrow::before,.ant-menu .ant-menu-submenu-arrow::after{position:absolute;width:6px;height:1.5px;background-color:currentcolor;border-radius:6px;transition:background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),top 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);content:\\"\\";}.ant-menu .ant-menu-submenu-arrow::before{transform:rotate(45deg) translateY(-2.5px);}.ant-menu .ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateY(2.5px);}.ant-menu-inline-collapsed .ant-menu-submenu-arrow::before,.ant-menu-inline .ant-menu-submenu-arrow::before{transform:rotate(-45deg) translateX(2.5px);}.ant-menu-inline-collapsed .ant-menu-submenu-arrow::after,.ant-menu-inline .ant-menu-submenu-arrow::after{transform:rotate(45deg) translateX(-2.5px);}.ant-menu .ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow{transform:translateY(-2px);}.ant-menu .ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow::after{transform:rotate(-45deg) translateX(-2.5px);}.ant-menu .ant-menu-submenu-open.ant-menu-submenu-inline>.ant-menu-submenu-title>.ant-menu-submenu-arrow::before{transform:rotate(45deg) translateX(2.5px);}.ant-layout-header .ant-menu{line-height:inherit;}.ant-menu-horizontal{line-height:46px;border:0;border-bottom:1px solid rgba(253, 253, 253, 0.12);box-shadow:none;}.ant-menu-horizontal::after{display:block;clear:both;height:0;content:\\"\\\\20\\";}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu{position:relative;display:inline-block;vertical-align:bottom;padding-inline:16px;}.ant-menu-horizontal >.ant-menu-item:hover,.ant-menu-horizontal >.ant-menu-item-active,.ant-menu-horizontal >.ant-menu-submenu .ant-menu-submenu-title:hover{background-color:transparent;}.ant-menu-horizontal .ant-menu-item,.ant-menu-horizontal .ant-menu-submenu-title{transition:border-color 0.3s,background 0.3s;}.ant-menu-horizontal .ant-menu-submenu-arrow{display:none;}.ant-menu-inline.ant-menu-root,.ant-menu-vertical.ant-menu-root{box-shadow:none;}.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-item{position:relative;}.ant-menu-inline .ant-menu-item,.ant-menu-vertical .ant-menu-item,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{height:40px;line-height:40px;padding-inline:16px;overflow:hidden;text-overflow:ellipsis;margin-inline:4px;margin-block:4px;width:calc(100% - 8px);}.ant-menu-inline .ant-menu-submenu,.ant-menu-vertical .ant-menu-submenu{padding-bottom:0.02px;}.ant-menu-inline >.ant-menu-item,.ant-menu-vertical >.ant-menu-item,.ant-menu-inline >.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-vertical >.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;}.ant-menu-inline .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-inline .ant-menu-submenu-title,.ant-menu-vertical .ant-menu-submenu-title{padding-inline-end:34px;}.ant-menu-submenu-popup .ant-menu-vertical{box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-item{position:relative;}.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-item,.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-submenu-title{height:40px;line-height:40px;padding-inline:16px;overflow:hidden;text-overflow:ellipsis;margin-inline:4px;margin-block:4px;width:calc(100% - 8px);}.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-submenu{padding-bottom:0.02px;}.ant-menu-submenu-popup .ant-menu-vertical >.ant-menu-item,.ant-menu-submenu-popup .ant-menu-vertical >.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;}.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-item-group-list .ant-menu-submenu-title,.ant-menu-submenu-popup .ant-menu-vertical .ant-menu-submenu-title{padding-inline-end:34px;}.ant-menu-submenu-popup .ant-menu-vertical.ant-menu-sub{min-width:160px;max-height:calc(100vh - 100px);padding:0;overflow:hidden;border-inline-end:0;}.ant-menu-submenu-popup .ant-menu-vertical.ant-menu-sub:not([class*='-active']){overflow-x:hidden;overflow-y:auto;}.ant-menu-inline{width:100%;}.ant-menu-inline.ant-menu-root .ant-menu-item,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title{display:flex;align-items:center;transition:border-color 0.3s,background 0.3s,padding 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);}.ant-menu-inline.ant-menu-root .ant-menu-item >.ant-menu-title-content,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title >.ant-menu-title-content{flex:auto;min-width:0;overflow:hidden;text-overflow:ellipsis;}.ant-menu-inline.ant-menu-root .ant-menu-item >*,.ant-menu-inline.ant-menu-root .ant-menu-submenu-title >*{flex:none;}.ant-menu-inline .ant-menu-sub.ant-menu-inline{padding:0;border:0;border-radius:0;box-shadow:none;}.ant-menu-inline .ant-menu-sub.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc;}.ant-menu-inline .ant-menu-sub.ant-menu-inline .ant-menu-item-group-title{padding-inline-start:32px;}.ant-menu-inline .ant-menu-item{height:40px;line-height:40px;list-style-position:inside;list-style-type:disc;}.ant-menu-inline-collapsed{width:80px;}.ant-menu-inline-collapsed.ant-menu-root .ant-menu-item >.ant-menu-inline-collapsed-noicon,.ant-menu-inline-collapsed.ant-menu-root .ant-menu-submenu .ant-menu-submenu-title >.ant-menu-inline-collapsed-noicon{font-size:16px;text-align:center;}.ant-menu-inline-collapsed >.ant-menu-item,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title{inset-inline-start:0;padding-inline:calc(50% - 12px);text-overflow:clip;}.ant-menu-inline-collapsed >.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-arrow,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-arrow,.ant-menu-inline-collapsed >.ant-menu-item .ant-menu-submenu-expand-icon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-submenu-expand-icon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-expand-icon,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-submenu-expand-icon{opacity:0;}.ant-menu-inline-collapsed >.ant-menu-item .ant-menu-item-icon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon,.ant-menu-inline-collapsed >.ant-menu-item .anticon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .anticon{margin:0;font-size:16px;line-height:40px;}.ant-menu-inline-collapsed >.ant-menu-item .ant-menu-item-icon +span,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .ant-menu-item-icon +span,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon +span,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .ant-menu-item-icon +span,.ant-menu-inline-collapsed >.ant-menu-item .anticon +span,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-item .anticon +span,.ant-menu-inline-collapsed >.ant-menu-item-group>.ant-menu-item-group-list>.ant-menu-submenu>.ant-menu-submenu-title .anticon +span,.ant-menu-inline-collapsed >.ant-menu-submenu>.ant-menu-submenu-title .anticon +span{display:inline-block;opacity:0;}.ant-menu-inline-collapsed .ant-menu-item-icon,.ant-menu-inline-collapsed .anticon{display:inline-block;}.ant-menu-inline-collapsed-tooltip{pointer-events:none;}.ant-menu-inline-collapsed-tooltip .ant-menu-item-icon,.ant-menu-inline-collapsed-tooltip .anticon{display:none;}.ant-menu-inline-collapsed-tooltip a,.ant-menu-inline-collapsed-tooltip a:hover{color:#fff;}.ant-menu-inline-collapsed .ant-menu-item-group-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding-inline:8px;}.ant-menu-light{color:rgba(255, 255, 255, 0.85);background:#141414;}.ant-menu-light.ant-menu-root:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-menu-light .ant-menu-item-group-title{color:rgba(255, 255, 255, 0.45);}.ant-menu-light .ant-menu-submenu-selected >.ant-menu-submenu-title{color:#037003;}.ant-menu-light .ant-menu-item-disabled,.ant-menu-light .ant-menu-submenu-disabled{color:rgba(255, 255, 255, 0.25)!important;}.ant-menu-light .ant-menu-item:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected),.ant-menu-light .ant-menu-submenu-title:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected){color:rgba(255, 255, 255, 0.85);}.ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):hover{background-color:rgba(255, 255, 255, 0.12);}.ant-menu-light:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):active{background-color:#111911;}.ant-menu-light:not(.ant-menu-horizontal) .ant-menu-submenu-title:hover{background-color:rgba(255, 255, 255, 0.12);}.ant-menu-light:not(.ant-menu-horizontal) .ant-menu-submenu-title:active{background-color:#111911;}.ant-menu-light .ant-menu-item-danger{color:#dc4446;}.ant-menu-light .ant-menu-item-danger.ant-menu-item:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected){color:#dc4446;}.ant-menu-light .ant-menu-item-danger.ant-menu-item:active{background:#2c1618;}.ant-menu-light .ant-menu-item a,.ant-menu-light .ant-menu-item a:hover{color:inherit;}.ant-menu-light .ant-menu-item-selected{color:#037003;}.ant-menu-light .ant-menu-item-selected.ant-menu-item-danger{color:#dc4446;}.ant-menu-light .ant-menu-item-selected a,.ant-menu-light .ant-menu-item-selected a:hover{color:inherit;}.ant-menu-light .ant-menu-item-selected{background-color:#111911;}.ant-menu-light .ant-menu-item-selected.ant-menu-item-danger{background-color:#2c1618;}.ant-menu-light .ant-menu-item:not(.ant-menu-item-disabled):focus-visible,.ant-menu-light .ant-menu-submenu-title:not(.ant-menu-item-disabled):focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-menu-light.ant-menu-submenu>.ant-menu{background-color:#1f1f1f;}.ant-menu-light.ant-menu-popup>.ant-menu{background-color:#141414;}.ant-menu-light.ant-menu-horizontal >.ant-menu-item,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu{top:1px;margin-top:-1px;margin-bottom:0;border-radius:0;}.ant-menu-light.ant-menu-horizontal >.ant-menu-item::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu::after{position:absolute;inset-inline:16px;bottom:0;border-bottom:2px solid transparent;transition:border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);content:\\"\\";}.ant-menu-light.ant-menu-horizontal >.ant-menu-item:hover::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu:hover::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-item-active::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu-active::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-item-open::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu-open::after{border-bottom-width:2px;border-bottom-color:#037003;}.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu-selected{color:#037003;background-color:transparent;}.ant-menu-light.ant-menu-horizontal >.ant-menu-item-selected::after,.ant-menu-light.ant-menu-horizontal >.ant-menu-submenu-selected::after{border-bottom-width:2px;border-bottom-color:#037003;}.ant-menu-light.ant-menu-root.ant-menu-inline,.ant-menu-light.ant-menu-root.ant-menu-vertical{border-inline-end:1px solid rgba(253, 253, 253, 0.12);}.ant-menu-light.ant-menu-inline .ant-menu-sub.ant-menu-inline{background:rgba(255, 255, 255, 0.04);}.ant-menu-light.ant-menu-inline .ant-menu-item{position:relative;}.ant-menu-light.ant-menu-inline .ant-menu-item::after{position:absolute;inset-block:0;inset-inline-end:0;border-inline-end:0px solid #037003;transform:scaleY(0.0001);opacity:0;transition:transform 0.2s cubic-bezier(0.215, 0.61, 0.355, 1),opacity 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);content:\\"\\";}.ant-menu-light.ant-menu-inline .ant-menu-item.ant-menu-item-danger::after{border-inline-end-color:#dc4446;}.ant-menu-light.ant-menu-inline .ant-menu-selected::after,.ant-menu-light.ant-menu-inline .ant-menu-item-selected::after{transform:scaleY(1);opacity:1;transition:transform 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu-dark{color:rgba(255, 255, 255, 0.65);background:#001529;}.ant-menu-dark.ant-menu-root:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-menu-dark .ant-menu-item-group-title{color:rgba(255, 255, 255, 0.65);}.ant-menu-dark .ant-menu-submenu-selected >.ant-menu-submenu-title{color:#fff;}.ant-menu-dark .ant-menu-item-disabled,.ant-menu-dark .ant-menu-submenu-disabled{color:rgba(255, 255, 255, 0.25)!important;}.ant-menu-dark .ant-menu-item:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected),.ant-menu-dark .ant-menu-submenu-title:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected){color:#fff;}.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):hover{background-color:rgba(255, 255, 255, 0.12);}.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-item:not(.ant-menu-item-selected):active{background-color:#037003;}.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-submenu-title:hover{background-color:rgba(255, 255, 255, 0.12);}.ant-menu-dark:not(.ant-menu-horizontal) .ant-menu-submenu-title:active{background-color:#037003;}.ant-menu-dark .ant-menu-item-danger{color:#dc4446;}.ant-menu-dark .ant-menu-item-danger.ant-menu-item:hover:not(.ant-menu-item-selected):not(.ant-menu-submenu-selected){color:#e86e6b;}.ant-menu-dark .ant-menu-item-danger.ant-menu-item:active{background:#dc4446;}.ant-menu-dark .ant-menu-item a,.ant-menu-dark .ant-menu-item a:hover{color:inherit;}.ant-menu-dark .ant-menu-item-selected{color:#fff;}.ant-menu-dark .ant-menu-item-selected.ant-menu-item-danger{color:#fff;}.ant-menu-dark .ant-menu-item-selected a,.ant-menu-dark .ant-menu-item-selected a:hover{color:inherit;}.ant-menu-dark .ant-menu-item-selected{background-color:#037003;}.ant-menu-dark .ant-menu-item-selected.ant-menu-item-danger{background-color:#dc4446;}.ant-menu-dark .ant-menu-item:not(.ant-menu-item-disabled):focus-visible,.ant-menu-dark .ant-menu-submenu-title:not(.ant-menu-item-disabled):focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-menu-dark.ant-menu-submenu>.ant-menu{background-color:#001529;}.ant-menu-dark.ant-menu-popup>.ant-menu{background-color:#001529;}.ant-menu-dark.ant-menu-horizontal{border-bottom:0;}.ant-menu-dark.ant-menu-horizontal >.ant-menu-item,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu{top:0;margin-top:0;margin-bottom:0;border-radius:0;}.ant-menu-dark.ant-menu-horizontal >.ant-menu-item::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu::after{position:absolute;inset-inline:16px;bottom:0;border-bottom:0px solid transparent;transition:border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);content:\\"\\";}.ant-menu-dark.ant-menu-horizontal >.ant-menu-item:hover::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu:hover::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-item-active::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu-active::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-item-open::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu-open::after{border-bottom-width:0;border-bottom-color:#fff;}.ant-menu-dark.ant-menu-horizontal >.ant-menu-item-selected,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu-selected{color:#fff;background-color:#037003;}.ant-menu-dark.ant-menu-horizontal >.ant-menu-item-selected::after,.ant-menu-dark.ant-menu-horizontal >.ant-menu-submenu-selected::after{border-bottom-width:0;border-bottom-color:#fff;}.ant-menu-dark.ant-menu-root.ant-menu-inline,.ant-menu-dark.ant-menu-root.ant-menu-vertical{border-inline-end:0px solid rgba(253, 253, 253, 0.12);}.ant-menu-dark.ant-menu-inline .ant-menu-sub.ant-menu-inline{background:#000c17;}.ant-menu-dark.ant-menu-inline .ant-menu-item{position:relative;}.ant-menu-dark.ant-menu-inline .ant-menu-item::after{position:absolute;inset-block:0;inset-inline-end:0;border-inline-end:0px solid #fff;transform:scaleY(0.0001);opacity:0;transition:transform 0.2s cubic-bezier(0.215, 0.61, 0.355, 1),opacity 0.2s cubic-bezier(0.215, 0.61, 0.355, 1);content:\\"\\";}.ant-menu-dark.ant-menu-inline .ant-menu-item.ant-menu-item-danger::after{border-inline-end-color:#fff;}.ant-menu-dark.ant-menu-inline .ant-menu-selected::after,.ant-menu-dark.ant-menu-inline .ant-menu-item-selected::after{transform:scaleY(1);opacity:1;transition:transform 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-menu-rtl{direction:rtl;}.ant-menu-submenu-rtl{transform-origin:100% 0;}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-arrow::before,.ant-menu-submenu-rtl .ant-menu-vertical .ant-menu-submenu-arrow::before{transform:rotate(-45deg) translateY(-2.5px);}.ant-menu-rtl.ant-menu-vertical .ant-menu-submenu-arrow::after,.ant-menu-submenu-rtl .ant-menu-vertical .ant-menu-submenu-arrow::after{transform:rotate(45deg) translateY(2.5px);}.ant-menu .ant-motion-collapse-legacy{overflow:hidden;}.ant-menu .ant-motion-collapse-legacy-active{transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-menu .ant-motion-collapse{overflow:hidden;transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-slide-up-enter,.ant-slide-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running;}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none;}.ant-slide-up-enter,.ant-slide-up-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-up-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-slide-down-enter,.ant-slide-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running;}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none;}.ant-slide-down-enter,.ant-slide-down-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-down-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-zoom-big-enter,.ant-zoom-big-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running;}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none;}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none;}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}[class^=\\"ant-mentions\\"],[class*=\\" ant-mentions\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-mentions\\"]::before,[class*=\\" ant-mentions\\"]::before,[class^=\\"ant-mentions\\"]::after,[class*=\\" ant-mentions\\"]::after{box-sizing:border-box;}[class^=\\"ant-mentions\\"] [class^=\\"ant-mentions\\"],[class*=\\" ant-mentions\\"] [class^=\\"ant-mentions\\"],[class^=\\"ant-mentions\\"] [class*=\\" ant-mentions\\"],[class*=\\" ant-mentions\\"] [class*=\\" ant-mentions\\"]{box-sizing:border-box;}[class^=\\"ant-mentions\\"] [class^=\\"ant-mentions\\"]::before,[class*=\\" ant-mentions\\"] [class^=\\"ant-mentions\\"]::before,[class^=\\"ant-mentions\\"] [class*=\\" ant-mentions\\"]::before,[class*=\\" ant-mentions\\"] [class*=\\" ant-mentions\\"]::before,[class^=\\"ant-mentions\\"] [class^=\\"ant-mentions\\"]::after,[class*=\\" ant-mentions\\"] [class^=\\"ant-mentions\\"]::after,[class^=\\"ant-mentions\\"] [class*=\\" ant-mentions\\"]::after,[class*=\\" ant-mentions\\"] [class*=\\" ant-mentions\\"]::after{box-sizing:border-box;}.ant-mentions{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;width:100%;min-width:0;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;height:auto;overflow:hidden;white-space:pre-wrap;vertical-align:bottom;}.ant-mentions::-moz-placeholder{opacity:1;}.ant-mentions::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-mentions:placeholder-shown{text-overflow:ellipsis;}.ant-mentions:hover{border-color:#198016;border-inline-end-width:1px;}.ant-mentions:focus,.ant-mentions-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-mentions-disabled,.ant-mentions[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-mentions-disabled:hover,.ant-mentions[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-mentions-borderless,.ant-mentions-borderless:hover,.ant-mentions-borderless:focus,.ant-mentions-borderless-focused,.ant-mentions-borderless-disabled,.ant-mentions-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-mentions{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-mentions-lg{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-mentions-sm{padding:0px 7px;border-radius:4px;}.ant-mentions-rtl{direction:rtl;}.ant-mentions-textarea-rtl{direction:rtl;}.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions{border-color:#dc4446;}.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover{border-color:#7e2e2f;}.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused{border-color:#dc4446;box-shadow:0 0 0 2px rgba(238, 38, 56, 0.11);border-inline-end-width:1px;outline:0;}.ant-mentions-status-error:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions .ant-mentions-prefix{color:#dc4446;}.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions{border-color:#d89614;}.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:hover{border-color:#7c5914;}.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions:focus,.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions-focused{border-color:#d89614;box-shadow:0 0 0 2px rgba(173, 107, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-mentions-status-warning:not(.ant-mentions-disabled):not(.ant-mentions-borderless).ant-mentions .ant-mentions-prefix{color:#d89614;}.ant-mentions-disabled >textarea{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-mentions-disabled >textarea:hover{border-color:#424242;border-inline-end-width:1px;}.ant-mentions-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-mentions-affix-wrapper .ant-mentions-suffix{position:absolute;top:0;inset-inline-end:11px;bottom:0;z-index:1;display:inline-flex;align-items:center;margin:auto;}.ant-mentions >textarea,.ant-mentions .ant-mentions-measure{color:rgba(255, 255, 255, 0.85);box-sizing:border-box;min-height:30px;margin:0;padding:4px 11px;overflow:inherit;overflow-x:hidden;overflow-y:auto;font-weight:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-variant:inherit;font-size-adjust:inherit;font-stretch:inherit;line-height:inherit;direction:inherit;letter-spacing:inherit;white-space:inherit;text-align:inherit;vertical-align:top;word-wrap:break-word;word-break:inherit;tab-size:inherit;}.ant-mentions >textarea{width:100%;border:none;outline:none;resize:none;background-color:inherit;}.ant-mentions >textarea::-moz-placeholder{opacity:1;}.ant-mentions >textarea::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-mentions >textarea:placeholder-shown{text-overflow:ellipsis;}.ant-mentions .ant-mentions-measure{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:-1;color:transparent;pointer-events:none;}.ant-mentions .ant-mentions-measure >span{display:inline-block;min-height:1em;}.ant-mentions-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:-9999px;inset-inline-start:-9999px;z-index:1050;font-variant:initial;background-color:#1f1f1f;border-radius:8px;outline:none;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-mentions-dropdown-hidden{display:none;}.ant-mentions-dropdown .ant-mentions-dropdown-menu{max-height:250px;margin-bottom:0;padding-inline-start:0;overflow:auto;list-style:none;outline:none;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;position:relative;display:block;min-width:100px;padding:5px 12px;color:rgba(255, 255, 255, 0.85);font-weight:normal;line-height:1.5714285714285714;cursor:pointer;transition:background 0.3s ease;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item:hover{background-color:rgba(255, 255, 255, 0.08);}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item:first-child{border-start-start-radius:8px;border-start-end-radius:8px;border-end-start-radius:0;border-end-end-radius:0;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item:last-child{border-start-start-radius:0;border-start-end-radius:0;border-end-start-radius:8px;border-end-end-radius:8px;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item-disabled:hover{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);cursor:not-allowed;}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item-selected{color:rgba(255, 255, 255, 0.85);font-weight:600;background-color:rgba(255, 255, 255, 0.08);}.ant-mentions-dropdown .ant-mentions-dropdown-menu-item-active{background-color:rgba(255, 255, 255, 0.08);}[class^=\\"ant-modal\\"],[class*=\\" ant-modal\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-modal\\"]::before,[class*=\\" ant-modal\\"]::before,[class^=\\"ant-modal\\"]::after,[class*=\\" ant-modal\\"]::after{box-sizing:border-box;}[class^=\\"ant-modal\\"] [class^=\\"ant-modal\\"],[class*=\\" ant-modal\\"] [class^=\\"ant-modal\\"],[class^=\\"ant-modal\\"] [class*=\\" ant-modal\\"],[class*=\\" ant-modal\\"] [class*=\\" ant-modal\\"]{box-sizing:border-box;}[class^=\\"ant-modal\\"] [class^=\\"ant-modal\\"]::before,[class*=\\" ant-modal\\"] [class^=\\"ant-modal\\"]::before,[class^=\\"ant-modal\\"] [class*=\\" ant-modal\\"]::before,[class*=\\" ant-modal\\"] [class*=\\" ant-modal\\"]::before,[class^=\\"ant-modal\\"] [class^=\\"ant-modal\\"]::after,[class*=\\" ant-modal\\"] [class^=\\"ant-modal\\"]::after,[class^=\\"ant-modal\\"] [class*=\\" ant-modal\\"]::after,[class*=\\" ant-modal\\"] [class*=\\" ant-modal\\"]::after{box-sizing:border-box;}.ant-modal-root .ant-modal-wrap{z-index:1000;position:fixed;inset:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch;}.ant-modal-root .ant-modal-wrap-rtl{direction:rtl;}.ant-modal-root .ant-modal-centered{text-align:center;}.ant-modal-root .ant-modal-centered::before{display:inline-block;width:0;height:100%;vertical-align:middle;content:\\"\\";}.ant-modal-root .ant-modal-centered .ant-modal{top:0;display:inline-block;padding-bottom:0;text-align:start;vertical-align:middle;}@media (max-width: 767){.ant-modal-root .ant-modal{max-width:calc(100vw - 16px);margin:8 auto;}.ant-modal-root .ant-modal-centered .ant-modal{flex:1;}}.ant-modal{box-sizing:border-box;margin:0 auto;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';pointer-events:none;position:relative;top:100px;width:auto;max-width:calc(100vw - 32px);padding-bottom:24px;}.ant-modal .ant-modal-title{margin:0;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;line-height:1.5;word-wrap:break-word;}.ant-modal .ant-modal-content{position:relative;background-color:#1f1f1f;background-clip:padding-box;border:0;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);pointer-events:auto;padding:20px 24px;}.ant-modal .ant-modal-close{position:absolute;top:17px;inset-inline-end:17px;z-index:1010;padding:0;color:rgba(255, 255, 255, 0.45);font-weight:600;line-height:1;text-decoration:none;background:transparent;border-radius:4px;width:22px;height:22px;border:0;outline:0;cursor:pointer;transition:color 0.2s,background-color 0.2s;}.ant-modal .ant-modal-close-x{display:block;font-size:16px;font-style:normal;line-height:22px;text-align:center;text-transform:none;text-rendering:auto;}.ant-modal .ant-modal-close:hover{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.12);text-decoration:none;}.ant-modal .ant-modal-close:active{background-color:rgba(255, 255, 255, 0.18);}.ant-modal .ant-modal-close:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-modal .ant-modal-header{color:rgba(255, 255, 255, 0.85);background:#1f1f1f;border-radius:8px 8px 0 0;margin-bottom:8px;}.ant-modal .ant-modal-body{font-size:14px;line-height:1.5714285714285714;word-wrap:break-word;}.ant-modal .ant-modal-footer{text-align:end;background:transparent;margin-top:12px;}.ant-modal .ant-modal-footer .ant-btn+.ant-btn:not(.ant-dropdown-trigger){margin-bottom:0;margin-inline-start:8px;}.ant-modal .ant-modal-open{overflow:hidden;}.ant-modal-pure-panel{top:auto;padding:0;display:flex;flex-direction:column;}.ant-modal-pure-panel .ant-modal-content,.ant-modal-pure-panel .ant-modal-body,.ant-modal-pure-panel .ant-modal-confirm-body-wrapper{display:flex;flex-direction:column;flex:auto;}.ant-modal-pure-panel .ant-modal-confirm-body{margin-bottom:auto;}.ant-modal-confirm-rtl{direction:rtl;}.ant-modal-confirm .ant-modal-header{display:none;}.ant-modal-confirm .ant-modal-confirm-body-wrapper::before{display:table;content:\\"\\";}.ant-modal-confirm .ant-modal-confirm-body-wrapper::after{display:table;clear:both;content:\\"\\";}.ant-modal-confirm .ant-modal-confirm-body{display:flex;flex-wrap:wrap;align-items:center;}.ant-modal-confirm .ant-modal-confirm-body .ant-modal-confirm-title{flex:0 0 100%;display:block;overflow:hidden;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;line-height:1.5;}.ant-modal-confirm .ant-modal-confirm-body .ant-modal-confirm-title +.ant-modal-confirm-content{margin-block-start:8px;flex-basis:100%;max-width:calc(100% - 34px);}.ant-modal-confirm .ant-modal-confirm-body .ant-modal-confirm-content{color:rgba(255, 255, 255, 0.85);font-size:14px;}.ant-modal-confirm .ant-modal-confirm-body >.anticon{flex:none;margin-inline-end:12px;font-size:22px;}.ant-modal-confirm .ant-modal-confirm-body >.anticon +.ant-modal-confirm-title{flex:1;}.ant-modal-confirm .ant-modal-confirm-body >.anticon +.ant-modal-confirm-title+.ant-modal-confirm-content{margin-inline-start:34px;}.ant-modal-confirm .ant-modal-confirm-btns{text-align:end;margin-top:12px;}.ant-modal-confirm .ant-modal-confirm-btns .ant-btn+.ant-btn{margin-bottom:0;margin-inline-start:8px;}.ant-modal-confirm-error .ant-modal-confirm-body>.anticon{color:#dc4446;}.ant-modal-confirm-warning .ant-modal-confirm-body>.anticon,.ant-modal-confirm-confirm .ant-modal-confirm-body>.anticon{color:#d89614;}.ant-modal-confirm-info .ant-modal-confirm-body>.anticon{color:#1668dc;}.ant-modal-confirm-success .ant-modal-confirm-body>.anticon{color:#49aa19;}.ant-modal-zoom-leave .ant-modal-btns{pointer-events:none;}.ant-modal-root .ant-modal-wrap-rtl{direction:rtl;}.ant-modal-root .ant-modal-wrap-rtl .ant-modal-confirm-body{direction:rtl;}.ant-modal-root .ant-modal.ant-zoom-enter,.ant-modal-root .ant-modal.ant-zoom-appear{transform:none;opacity:0;animation-duration:0.3s;user-select:none;}.ant-modal-root .ant-modal.ant-zoom-leave .ant-modal-content{pointer-events:none;}.ant-modal-root .ant-modal-mask{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;z-index:1000;height:100%;background-color:rgba(0, 0, 0, 0.45);}.ant-modal-root .ant-modal-mask .ant-modal-hidden{display:none;}.ant-modal-root .ant-modal-wrap{position:fixed;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;overflow:auto;outline:0;-webkit-overflow-scrolling:touch;}.ant-modal-root .ant-fade-enter,.ant-modal-root .ant-fade-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-modal-root .ant-fade-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-modal-root .ant-fade-enter.ant-fade-enter-active,.ant-modal-root .ant-fade-appear.ant-fade-appear-active{animation-name:antFadeIn;animation-play-state:running;}.ant-modal-root .ant-fade-leave.ant-fade-leave-active{animation-name:antFadeOut;animation-play-state:running;pointer-events:none;}.ant-modal-root .ant-fade-enter,.ant-modal-root .ant-fade-appear{opacity:0;animation-timing-function:linear;}.ant-modal-root .ant-fade-leave{animation-timing-function:linear;}.ant-zoom-enter,.ant-zoom-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-enter.ant-zoom-enter-active,.ant-zoom-appear.ant-zoom-appear-active{animation-name:antZoomIn;animation-play-state:running;}.ant-zoom-leave.ant-zoom-leave-active{animation-name:antZoomOut;animation-play-state:running;pointer-events:none;}.ant-zoom-enter,.ant-zoom-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-zoom-enter-prepare,.ant-zoom-appear-prepare{transform:none;}.ant-zoom-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}[class^=\\"ant-statistic\\"],[class*=\\" ant-statistic\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-statistic\\"]::before,[class*=\\" ant-statistic\\"]::before,[class^=\\"ant-statistic\\"]::after,[class*=\\" ant-statistic\\"]::after{box-sizing:border-box;}[class^=\\"ant-statistic\\"] [class^=\\"ant-statistic\\"],[class*=\\" ant-statistic\\"] [class^=\\"ant-statistic\\"],[class^=\\"ant-statistic\\"] [class*=\\" ant-statistic\\"],[class*=\\" ant-statistic\\"] [class*=\\" ant-statistic\\"]{box-sizing:border-box;}[class^=\\"ant-statistic\\"] [class^=\\"ant-statistic\\"]::before,[class*=\\" ant-statistic\\"] [class^=\\"ant-statistic\\"]::before,[class^=\\"ant-statistic\\"] [class*=\\" ant-statistic\\"]::before,[class*=\\" ant-statistic\\"] [class*=\\" ant-statistic\\"]::before,[class^=\\"ant-statistic\\"] [class^=\\"ant-statistic\\"]::after,[class*=\\" ant-statistic\\"] [class^=\\"ant-statistic\\"]::after,[class^=\\"ant-statistic\\"] [class*=\\" ant-statistic\\"]::after,[class*=\\" ant-statistic\\"] [class*=\\" ant-statistic\\"]::after{box-sizing:border-box;}.ant-statistic{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-statistic .ant-statistic-title{margin-bottom:4px;color:rgba(255, 255, 255, 0.45);font-size:14px;}.ant-statistic .ant-statistic-skeleton{padding-top:16px;}.ant-statistic .ant-statistic-content{color:rgba(255, 255, 255, 0.85);font-size:24px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-statistic .ant-statistic-content .ant-statistic-content-value{display:inline-block;direction:ltr;}.ant-statistic .ant-statistic-content .ant-statistic-content-prefix,.ant-statistic .ant-statistic-content .ant-statistic-content-suffix{display:inline-block;}.ant-statistic .ant-statistic-content .ant-statistic-content-prefix{margin-inline-end:4px;}.ant-statistic .ant-statistic-content .ant-statistic-content-suffix{margin-inline-start:4px;}[class^=\\"ant-skeleton\\"],[class*=\\" ant-skeleton\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-skeleton\\"]::before,[class*=\\" ant-skeleton\\"]::before,[class^=\\"ant-skeleton\\"]::after,[class*=\\" ant-skeleton\\"]::after{box-sizing:border-box;}[class^=\\"ant-skeleton\\"] [class^=\\"ant-skeleton\\"],[class*=\\" ant-skeleton\\"] [class^=\\"ant-skeleton\\"],[class^=\\"ant-skeleton\\"] [class*=\\" ant-skeleton\\"],[class*=\\" ant-skeleton\\"] [class*=\\" ant-skeleton\\"]{box-sizing:border-box;}[class^=\\"ant-skeleton\\"] [class^=\\"ant-skeleton\\"]::before,[class*=\\" ant-skeleton\\"] [class^=\\"ant-skeleton\\"]::before,[class^=\\"ant-skeleton\\"] [class*=\\" ant-skeleton\\"]::before,[class*=\\" ant-skeleton\\"] [class*=\\" ant-skeleton\\"]::before,[class^=\\"ant-skeleton\\"] [class^=\\"ant-skeleton\\"]::after,[class*=\\" ant-skeleton\\"] [class^=\\"ant-skeleton\\"]::after,[class^=\\"ant-skeleton\\"] [class*=\\" ant-skeleton\\"]::after,[class*=\\" ant-skeleton\\"] [class*=\\" ant-skeleton\\"]::after{box-sizing:border-box;}.ant-skeleton{display:table;width:100%;}.ant-skeleton .ant-skeleton-header{display:table-cell;padding-inline-end:16px;vertical-align:top;}.ant-skeleton .ant-skeleton-header .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(255, 255, 255, 0.12);width:32px;height:32px;line-height:32px;}.ant-skeleton .ant-skeleton-header .ant-skeleton-avatar-circle{border-radius:50%;}.ant-skeleton .ant-skeleton-header .ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px;}.ant-skeleton .ant-skeleton-header .ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px;}.ant-skeleton .ant-skeleton-content{display:table-cell;width:100%;vertical-align:top;}.ant-skeleton .ant-skeleton-content .ant-skeleton-title{width:100%;height:16px;background:rgba(255, 255, 255, 0.12);border-radius:4px;}.ant-skeleton .ant-skeleton-content .ant-skeleton-title +.ant-skeleton-paragraph{margin-block-start:24px;}.ant-skeleton .ant-skeleton-content .ant-skeleton-paragraph{padding:0;}.ant-skeleton .ant-skeleton-content .ant-skeleton-paragraph >li{width:100%;height:16px;list-style:none;background:rgba(255, 255, 255, 0.12);border-radius:4px;}.ant-skeleton .ant-skeleton-content .ant-skeleton-paragraph >li +li{margin-block-start:16px;}.ant-skeleton .ant-skeleton-content .ant-skeleton-paragraph>li:last-child:not(:first-child):not(:nth-child(2)){width:61%;}.ant-skeleton-round .ant-skeleton-content .ant-skeleton-title,.ant-skeleton-round .ant-skeleton-content .ant-skeleton-paragraph>li{border-radius:100px;}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title{margin-block-start:12px;}.ant-skeleton-with-avatar .ant-skeleton-content .ant-skeleton-title +.ant-skeleton-paragraph{margin-block-start:28px;}.ant-skeleton.ant-skeleton-element{display:inline-block;width:auto;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button{display:inline-block;vertical-align:top;background:rgba(255, 255, 255, 0.12);border-radius:4px;width:64px;min-width:64px;height:32px;line-height:32px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-circle{width:32px;min-width:32px;border-radius:50%;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button.ant-skeleton-button-round{border-radius:32px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-lg{width:80px;min-width:80px;height:40px;line-height:40px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-circle{width:40px;min-width:40px;border-radius:50%;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-lg.ant-skeleton-button-round{border-radius:40px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-sm{width:48px;min-width:48px;height:24px;line-height:24px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-circle{width:24px;min-width:24px;border-radius:50%;}.ant-skeleton.ant-skeleton-element .ant-skeleton-button-sm.ant-skeleton-button-round{border-radius:24px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-avatar{display:inline-block;vertical-align:top;background:rgba(255, 255, 255, 0.12);width:32px;height:32px;line-height:32px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-circle{border-radius:50%;}.ant-skeleton.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-lg{width:40px;height:40px;line-height:40px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-avatar.ant-skeleton-avatar-sm{width:24px;height:24px;line-height:24px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-input{display:inline-block;vertical-align:top;background:rgba(255, 255, 255, 0.12);border-radius:4px;width:160px;min-width:160px;height:32px;line-height:32px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-input-lg{width:200px;min-width:200px;height:40px;line-height:40px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-input-sm{width:120px;min-width:120px;height:24px;line-height:24px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-image{display:flex;align-items:center;justify-content:center;vertical-align:top;background:rgba(255, 255, 255, 0.12);border-radius:4px;width:96px;height:96px;line-height:96px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-image .ant-skeleton-image-path{fill:#bfbfbf;}.ant-skeleton.ant-skeleton-element .ant-skeleton-image .ant-skeleton-image-svg{width:48px;height:48px;line-height:48px;max-width:192px;max-height:192px;}.ant-skeleton.ant-skeleton-element .ant-skeleton-image .ant-skeleton-image-svg.ant-skeleton-image-svg-circle{border-radius:50%;}.ant-skeleton.ant-skeleton-element .ant-skeleton-image.ant-skeleton-image-circle{border-radius:50%;}.ant-skeleton.ant-skeleton-block{width:100%;}.ant-skeleton.ant-skeleton-block .ant-skeleton-button{width:100%;}.ant-skeleton.ant-skeleton-block .ant-skeleton-input{width:100%;}.ant-skeleton.ant-skeleton-active .ant-skeleton-title,.ant-skeleton.ant-skeleton-active .ant-skeleton-paragraph>li,.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar,.ant-skeleton.ant-skeleton-active .ant-skeleton-button,.ant-skeleton.ant-skeleton-active .ant-skeleton-input,.ant-skeleton.ant-skeleton-active .ant-skeleton-image{position:relative;z-index:0;overflow:hidden;background:transparent;}.ant-skeleton.ant-skeleton-active .ant-skeleton-title::after,.ant-skeleton.ant-skeleton-active .ant-skeleton-paragraph>li::after,.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar::after,.ant-skeleton.ant-skeleton-active .ant-skeleton-button::after,.ant-skeleton.ant-skeleton-active .ant-skeleton-input::after,.ant-skeleton.ant-skeleton-active .ant-skeleton-image::after{position:absolute;top:0;inset-inline-end:-150%;bottom:0;inset-inline-start:-150%;background:linear-gradient(90deg, rgba(255, 255, 255, 0.12) 25%, rgba(255, 255, 255, 0.18) 37%, rgba(255, 255, 255, 0.12) 63%);animation-name:ant-skeleton-loading;animation-duration:1.4s;animation-timing-function:ease;animation-iteration-count:infinite;content:\\"\\";}@keyframes ant-skeleton-loading{0%{transform:translateX(-37.5%);}100%{transform:translateX(37.5%);}}[class^=\\"ant-page-header\\"],[class*=\\" ant-page-header\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-page-header\\"]::before,[class*=\\" ant-page-header\\"]::before,[class^=\\"ant-page-header\\"]::after,[class*=\\" ant-page-header\\"]::after{box-sizing:border-box;}[class^=\\"ant-page-header\\"] [class^=\\"ant-page-header\\"],[class*=\\" ant-page-header\\"] [class^=\\"ant-page-header\\"],[class^=\\"ant-page-header\\"] [class*=\\" ant-page-header\\"],[class*=\\" ant-page-header\\"] [class*=\\" ant-page-header\\"]{box-sizing:border-box;}[class^=\\"ant-page-header\\"] [class^=\\"ant-page-header\\"]::before,[class*=\\" ant-page-header\\"] [class^=\\"ant-page-header\\"]::before,[class^=\\"ant-page-header\\"] [class*=\\" ant-page-header\\"]::before,[class*=\\" ant-page-header\\"] [class*=\\" ant-page-header\\"]::before,[class^=\\"ant-page-header\\"] [class^=\\"ant-page-header\\"]::after,[class*=\\" ant-page-header\\"] [class^=\\"ant-page-header\\"]::after,[class^=\\"ant-page-header\\"] [class*=\\" ant-page-header\\"]::after,[class*=\\" ant-page-header\\"] [class*=\\" ant-page-header\\"]::after{box-sizing:border-box;}.ant-page-header{box-sizing:border-box;margin:0;padding:20px 24px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;background-color:#141414;}.ant-page-header.ant-page-header-ghost{background-color:transparent;}.ant-page-header.has-footer{padding-bottom:0;}.ant-page-header .ant-page-header-back{margin-right:20px;font-size:16px;line-height:1;}.ant-page-header .ant-page-header-back-button{color:#fff;text-decoration:none;outline:none;cursor:pointer;transition:color 0.3s;}.ant-page-header .ant-page-header-back-button:focus,.ant-page-header .ant-page-header-back-button:hover{color:#15417e;}.ant-page-header .ant-page-header-back-button:active{color:#1554ad;}.ant-page-header .ant-divider-vertical{height:14px;margin:0 12;vertical-align:middle;}.ant-breadcrumb+.ant-page-header-heading{margin-top:8px;}.ant-page-header .ant-page-header-heading{display:flex;justify-content:space-between;}.ant-page-header .ant-page-header-heading-left{display:flex;align-items:center;margin:4px 0;overflow:hidden;}.ant-page-header .ant-page-header-heading-title{margin-right:12px;margin-bottom:0;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:20px;line-height:32px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-page-header .ant-page-header-heading .ant-avatar{margin-right:12px;}.ant-page-header .ant-page-header-heading-sub-title{margin-right:12px;color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-page-header .ant-page-header-heading-extra{margin:4px 0;white-space:nowrap;}.ant-page-header .ant-page-header-heading-extra >*{margin-left:12px;white-space:unset;}.ant-page-header .ant-page-header-heading-extra >*:first-child{margin-left:0;}.ant-page-header .ant-page-header-content{padding-top:12px;}.ant-page-header .ant-page-header-footer{margin-top:20px;}.ant-page-header .ant-page-header-footer .ant-tabs >.ant-tabs-nav{margin:0;}.ant-page-header .ant-page-header-footer .ant-tabs >.ant-tabs-nav::before{border:none;}.ant-page-header .ant-page-header-footer .ant-tabs .ant-tabs-tab{padding-top:8px;padding-bottom:8px;font-size:16px;}.ant-page-header .ant-page-header-compact .ant-page-header-heading{flex-wrap:wrap;}.ant-page-header.ant-page-header-rtl{direction:rtl;}[class^=\\"ant-pagination\\"],[class*=\\" ant-pagination\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-pagination\\"]::before,[class*=\\" ant-pagination\\"]::before,[class^=\\"ant-pagination\\"]::after,[class*=\\" ant-pagination\\"]::after{box-sizing:border-box;}[class^=\\"ant-pagination\\"] [class^=\\"ant-pagination\\"],[class*=\\" ant-pagination\\"] [class^=\\"ant-pagination\\"],[class^=\\"ant-pagination\\"] [class*=\\" ant-pagination\\"],[class*=\\" ant-pagination\\"] [class*=\\" ant-pagination\\"]{box-sizing:border-box;}[class^=\\"ant-pagination\\"] [class^=\\"ant-pagination\\"]::before,[class*=\\" ant-pagination\\"] [class^=\\"ant-pagination\\"]::before,[class^=\\"ant-pagination\\"] [class*=\\" ant-pagination\\"]::before,[class*=\\" ant-pagination\\"] [class*=\\" ant-pagination\\"]::before,[class^=\\"ant-pagination\\"] [class^=\\"ant-pagination\\"]::after,[class*=\\" ant-pagination\\"] [class^=\\"ant-pagination\\"]::after,[class^=\\"ant-pagination\\"] [class*=\\" ant-pagination\\"]::after,[class*=\\" ant-pagination\\"] [class*=\\" ant-pagination\\"]::after{box-sizing:border-box;}.ant-pagination{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-pagination ul,.ant-pagination ol{margin:0;padding:0;list-style:none;}.ant-pagination::after{display:block;clear:both;height:0;overflow:hidden;visibility:hidden;content:\\"\\";}.ant-pagination .ant-pagination-total-text{display:inline-block;height:32px;margin-inline-end:8px;line-height:30px;vertical-align:middle;}.ant-pagination .ant-pagination-item{display:inline-block;min-width:32px;height:32px;margin-inline-end:8px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:30px;text-align:center;vertical-align:middle;list-style:none;background-color:transparent;border:1px solid transparent;border-radius:6px;outline:0;cursor:pointer;user-select:none;}.ant-pagination .ant-pagination-item a{display:block;padding:0 6px;color:rgba(255, 255, 255, 0.85);transition:none;}.ant-pagination .ant-pagination-item a:hover{text-decoration:none;}.ant-pagination .ant-pagination-item:not(.ant-pagination-item-active):hover{transition:all 0.2s;background-color:rgba(255, 255, 255, 0.12);}.ant-pagination .ant-pagination-item:not(.ant-pagination-item-active):active{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination .ant-pagination-item:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-pagination .ant-pagination-item-active{font-weight:600;background-color:#141414;border-color:#037003;}.ant-pagination .ant-pagination-item-active a{color:#037003;}.ant-pagination .ant-pagination-item-active:hover{border-color:#198016;}.ant-pagination .ant-pagination-item-active:hover a{color:#198016;}.ant-pagination .ant-pagination-jump-prev,.ant-pagination .ant-pagination-jump-next{outline:0;}.ant-pagination .ant-pagination-jump-prev .ant-pagination-item-container,.ant-pagination .ant-pagination-jump-next .ant-pagination-item-container{position:relative;}.ant-pagination .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon,.ant-pagination .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon{color:#037003;font-size:12px;opacity:0;transition:all 0.2s;}.ant-pagination .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon-svg,.ant-pagination .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon-svg{top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;margin:auto;}.ant-pagination .ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis,.ant-pagination .ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;display:block;margin:auto;color:rgba(255, 255, 255, 0.25);font-family:Arial,Helvetica,sans-serif;letter-spacing:2px;text-align:center;text-indent:0.13em;opacity:1;transition:all 0.2s;}.ant-pagination .ant-pagination-jump-prev:hover .ant-pagination-item-link-icon,.ant-pagination .ant-pagination-jump-next:hover .ant-pagination-item-link-icon{opacity:1;}.ant-pagination .ant-pagination-jump-prev:hover .ant-pagination-item-ellipsis,.ant-pagination .ant-pagination-jump-next:hover .ant-pagination-item-ellipsis{opacity:0;}.ant-pagination .ant-pagination-jump-prev:focus-visible,.ant-pagination .ant-pagination-jump-next:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-pagination .ant-pagination-jump-prev:focus-visible .ant-pagination-item-link-icon,.ant-pagination .ant-pagination-jump-next:focus-visible .ant-pagination-item-link-icon{opacity:1;}.ant-pagination .ant-pagination-jump-prev:focus-visible .ant-pagination-item-ellipsis,.ant-pagination .ant-pagination-jump-next:focus-visible .ant-pagination-item-ellipsis{opacity:0;}.ant-pagination .ant-pagination-prev,.ant-pagination .ant-pagination-jump-prev,.ant-pagination .ant-pagination-jump-next{margin-inline-end:8px;}.ant-pagination .ant-pagination-prev,.ant-pagination .ant-pagination-next,.ant-pagination .ant-pagination-jump-prev,.ant-pagination .ant-pagination-jump-next{display:inline-block;min-width:32px;height:32px;color:rgba(255, 255, 255, 0.85);font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:32px;text-align:center;vertical-align:middle;list-style:none;border-radius:6px;cursor:pointer;transition:all 0.2s;}.ant-pagination .ant-pagination-prev,.ant-pagination .ant-pagination-next{font-family:Arial,Helvetica,sans-serif;outline:0;}.ant-pagination .ant-pagination-prev button,.ant-pagination .ant-pagination-next button{color:rgba(255, 255, 255, 0.85);cursor:pointer;user-select:none;}.ant-pagination .ant-pagination-prev .ant-pagination-item-link,.ant-pagination .ant-pagination-next .ant-pagination-item-link{display:block;width:100%;height:100%;padding:0;font-size:12px;text-align:center;background-color:transparent;border:1px solid transparent;border-radius:6px;outline:none;transition:all 0.2s;}.ant-pagination .ant-pagination-prev:focus-visible .ant-pagination-item-link,.ant-pagination .ant-pagination-next:focus-visible .ant-pagination-item-link{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-pagination .ant-pagination-prev:hover .ant-pagination-item-link,.ant-pagination .ant-pagination-next:hover .ant-pagination-item-link{background-color:rgba(255, 255, 255, 0.12);}.ant-pagination .ant-pagination-prev:active .ant-pagination-item-link,.ant-pagination .ant-pagination-next:active .ant-pagination-item-link{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination .ant-pagination-prev.ant-pagination-disabled:hover .ant-pagination-item-link,.ant-pagination .ant-pagination-next.ant-pagination-disabled:hover .ant-pagination-item-link{background-color:transparent;}.ant-pagination .ant-pagination-slash{margin-inline-end:12px;margin-inline-start:4px;}.ant-pagination .ant-pagination-options{display:inline-block;margin-inline-start:16px;vertical-align:middle;}.ant-pagination .ant-pagination-options-size-changer.-select{display:inline-block;width:auto;}.ant-pagination .ant-pagination-options-quick-jumper{display:inline-block;height:32px;margin-inline-start:8px;line-height:32px;vertical-align:top;}.ant-pagination .ant-pagination-options-quick-jumper input{position:relative;display:inline-block;width:50px;min-width:0;padding:4px 11px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;background-color:#141414;background-image:none;border-width:1px;border-style:solid;border-color:#424242;border-radius:6px;transition:all 0.2s;height:32px;box-sizing:border-box;margin:0;margin-inline-start:8px;margin-inline-end:8px;}.ant-pagination .ant-pagination-options-quick-jumper input::-moz-placeholder{opacity:1;}.ant-pagination .ant-pagination-options-quick-jumper input::placeholder{color:rgba(255, 255, 255, 0.25);user-select:none;}.ant-pagination .ant-pagination-options-quick-jumper input:placeholder-shown{text-overflow:ellipsis;}.ant-pagination .ant-pagination-options-quick-jumper input:hover{border-color:#198016;border-inline-end-width:1px;}.ant-pagination .ant-pagination-options-quick-jumper input:focus,.ant-pagination .ant-pagination-options-quick-jumper input-focused{border-color:#198016;box-shadow:0 0 0 2px rgba(0, 53, 0, 0.15);border-inline-end-width:1px;outline:0;}.ant-pagination .ant-pagination-options-quick-jumper input-disabled,.ant-pagination .ant-pagination-options-quick-jumper input[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;box-shadow:none;cursor:not-allowed;opacity:1;}.ant-pagination .ant-pagination-options-quick-jumper input-disabled:hover,.ant-pagination .ant-pagination-options-quick-jumper input[disabled]:hover{border-color:#424242;border-inline-end-width:1px;}.ant-pagination .ant-pagination-options-quick-jumper input-borderless,.ant-pagination .ant-pagination-options-quick-jumper input-borderless:hover,.ant-pagination .ant-pagination-options-quick-jumper input-borderless:focus,.ant-pagination .ant-pagination-options-quick-jumper input-borderless-focused,.ant-pagination .ant-pagination-options-quick-jumper input-borderless-disabled,.ant-pagination .ant-pagination-options-quick-jumper input-borderless[disabled]{background-color:transparent;border:none;box-shadow:none;}textarea.ant-pagination .ant-pagination-options-quick-jumper input{max-width:100%;height:auto;min-height:32px;line-height:1.5714285714285714;vertical-align:bottom;transition:all 0.3s,height 0s;resize:vertical;}.ant-pagination .ant-pagination-options-quick-jumper input-lg{padding:7px 11px;font-size:16px;line-height:1.5;border-radius:8px;}.ant-pagination .ant-pagination-options-quick-jumper input-sm{padding:0px 7px;border-radius:4px;}.ant-pagination .ant-pagination-options-quick-jumper input-rtl{direction:rtl;}.ant-pagination .ant-pagination-options-quick-jumper input-textarea-rtl{direction:rtl;}.ant-pagination.ant-pagination-simple .ant-pagination-prev,.ant-pagination.ant-pagination-simple .ant-pagination-next{height:24px;line-height:24px;vertical-align:top;}.ant-pagination.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link,.ant-pagination.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link{height:24px;background-color:transparent;border:0;}.ant-pagination.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:hover,.ant-pagination.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:hover{background-color:rgba(255, 255, 255, 0.12);}.ant-pagination.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link:active,.ant-pagination.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link:active{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link::after,.ant-pagination.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link::after{height:24px;line-height:24px;}.ant-pagination.ant-pagination-simple .ant-pagination-simple-pager{display:inline-block;height:24px;margin-inline-end:8px;}.ant-pagination.ant-pagination-simple .ant-pagination-simple-pager input{box-sizing:border-box;height:100%;margin-inline-end:8px;padding:0 6px;text-align:center;background-color:#141414;border:1px solid #424242;border-radius:6px;outline:none;transition:border-color 0.2s;color:inherit;}.ant-pagination.ant-pagination-simple .ant-pagination-simple-pager input:hover{border-color:#037003;}.ant-pagination.ant-pagination-simple .ant-pagination-simple-pager input:focus{border-color:#198016;box-shadow:0 0px 0 2px rgba(0, 53, 0, 0.15);}.ant-pagination.ant-pagination-simple .ant-pagination-simple-pager input[disabled]{color:rgba(255, 255, 255, 0.25);background-color:rgba(255, 255, 255, 0.08);border-color:#424242;cursor:not-allowed;}.ant-pagination.ant-pagination-mini .ant-pagination-total-text,.ant-pagination.ant-pagination-mini .ant-pagination-simple-pager{height:24px;line-height:24px;}.ant-pagination.ant-pagination-mini .ant-pagination-item{min-width:24px;height:24px;margin:0;line-height:22px;}.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active){background-color:transparent;border-color:transparent;}.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active):hover{background-color:rgba(255, 255, 255, 0.12);}.ant-pagination.ant-pagination-mini .ant-pagination-item:not(.ant-pagination-item-active):active{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination.ant-pagination-mini .ant-pagination-prev,.ant-pagination.ant-pagination-mini .ant-pagination-next{min-width:24px;height:24px;margin:0;line-height:24px;}.ant-pagination.ant-pagination-mini .ant-pagination-prev:hover .ant-pagination-item-link,.ant-pagination.ant-pagination-mini .ant-pagination-next:hover .ant-pagination-item-link{background-color:rgba(255, 255, 255, 0.12);}.ant-pagination.ant-pagination-mini .ant-pagination-prev:active .ant-pagination-item-link,.ant-pagination.ant-pagination-mini .ant-pagination-next:active .ant-pagination-item-link{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination.ant-pagination-mini .ant-pagination-prev.ant-pagination-disabled:hover .ant-pagination-item-link,.ant-pagination.ant-pagination-mini .ant-pagination-next.ant-pagination-disabled:hover .ant-pagination-item-link{background-color:transparent;}.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link,.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link{background-color:transparent;border-color:transparent;}.ant-pagination.ant-pagination-mini .ant-pagination-prev .ant-pagination-item-link::after,.ant-pagination.ant-pagination-mini .ant-pagination-next .ant-pagination-item-link::after{height:24px;line-height:24px;}.ant-pagination.ant-pagination-mini .ant-pagination-jump-prev,.ant-pagination.ant-pagination-mini .ant-pagination-jump-next{height:24px;margin-inline-end:0;line-height:24px;}.ant-pagination.ant-pagination-mini .ant-pagination-options{margin-inline-start:2px;}.ant-pagination.ant-pagination-mini .ant-pagination-options-size-changer{top:0;}.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper{height:24px;line-height:24px;}.ant-pagination.ant-pagination-mini .ant-pagination-options-quick-jumper input{padding:0px 7px;border-radius:4px;width:44px;height:24px;}.ant-pagination .ant-pagination-disabled,.ant-pagination .ant-pagination-disabled:hover{cursor:not-allowed;}.ant-pagination .ant-pagination-disabled .ant-pagination-item-link,.ant-pagination .ant-pagination-disabled:hover .ant-pagination-item-link{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-pagination .ant-pagination-disabled:focus-visible{cursor:not-allowed;}.ant-pagination .ant-pagination-disabled:focus-visible .ant-pagination-item-link{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-pagination.ant-pagination-disabled{cursor:not-allowed;}.ant-pagination.ant-pagination-disabled.ant-pagination-mini:hover .ant-pagination-item:not(.ant-pagination-item-active),.ant-pagination.ant-pagination-disabled.ant-pagination-mini:active .ant-pagination-item:not(.ant-pagination-item-active),.ant-pagination.ant-pagination-disabled.ant-pagination-mini:hover .ant-pagination-item-link,.ant-pagination.ant-pagination-disabled.ant-pagination-mini:active .ant-pagination-item-link{background-color:transparent;}.ant-pagination.ant-pagination-disabled .ant-pagination-item{cursor:not-allowed;}.ant-pagination.ant-pagination-disabled .ant-pagination-item:hover,.ant-pagination.ant-pagination-disabled .ant-pagination-item:active{background-color:transparent;}.ant-pagination.ant-pagination-disabled .ant-pagination-item a{color:rgba(255, 255, 255, 0.25);background-color:transparent;border:none;cursor:not-allowed;}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active{border-color:#424242;background-color:rgba(255, 255, 255, 0.18);}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active:hover,.ant-pagination.ant-pagination-disabled .ant-pagination-item-active:active{background-color:rgba(255, 255, 255, 0.18);}.ant-pagination.ant-pagination-disabled .ant-pagination-item-active a{color:rgba(255, 255, 255, 0.25);}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:hover,.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:active{background-color:transparent;}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link{background-color:transparent;}.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:hover,.ant-pagination-simple.ant-pagination.ant-pagination-disabled .ant-pagination-item-link:active{background-color:transparent;}.ant-pagination.ant-pagination-disabled .ant-pagination-simple-pager{color:rgba(255, 255, 255, 0.25);}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev .ant-pagination-item-link-icon,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next .ant-pagination-item-link-icon{opacity:0;}.ant-pagination.ant-pagination-disabled .ant-pagination-jump-prev .ant-pagination-item-ellipsis,.ant-pagination.ant-pagination-disabled .ant-pagination-jump-next .ant-pagination-item-ellipsis{opacity:1;}.ant-pagination.ant-pagination-simple .ant-pagination-prev.ant-pagination-disabled .ant-pagination-item-link:hover,.ant-pagination.ant-pagination-simple .ant-pagination-next.ant-pagination-disabled .ant-pagination-item-link:hover,.ant-pagination.ant-pagination-simple .ant-pagination-prev.ant-pagination-disabled .ant-pagination-item-link:active,.ant-pagination.ant-pagination-simple .ant-pagination-next.ant-pagination-disabled .ant-pagination-item-link:active{background-color:transparent;}@media only screen and (max-width: 992px){.ant-pagination .ant-pagination-item-after-jump-prev,.ant-pagination .ant-pagination-item-before-jump-next{display:none;}}@media only screen and (max-width: 576px){.ant-pagination .ant-pagination-options{display:none;}}.ant-pagination-rtl{direction:rtl;}[class^=\\"ant-popconfirm\\"],[class*=\\" ant-popconfirm\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-popconfirm\\"]::before,[class*=\\" ant-popconfirm\\"]::before,[class^=\\"ant-popconfirm\\"]::after,[class*=\\" ant-popconfirm\\"]::after{box-sizing:border-box;}[class^=\\"ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"],[class*=\\" ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"],[class^=\\"ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"],[class*=\\" ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"]{box-sizing:border-box;}[class^=\\"ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"]::before,[class*=\\" ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"]::before,[class^=\\"ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"]::before,[class*=\\" ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"]::before,[class^=\\"ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"]::after,[class*=\\" ant-popconfirm\\"] [class^=\\"ant-popconfirm\\"]::after,[class^=\\"ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"]::after,[class*=\\" ant-popconfirm\\"] [class*=\\" ant-popconfirm\\"]::after{box-sizing:border-box;}.ant-popconfirm{z-index:1060;}.ant-popconfirm .ant-popconfirm-inner-content{color:rgba(255, 255, 255, 0.85);}.ant-popconfirm .ant-popconfirm-message{position:relative;margin-bottom:8px;color:rgba(255, 255, 255, 0.85);font-size:14px;display:flex;flex-wrap:nowrap;align-items:start;}.ant-popconfirm .ant-popconfirm-message >.ant-popconfirm-message-icon .anticon{color:#d89614;font-size:14px;flex:none;line-height:1;padding-top:4px;}.ant-popconfirm .ant-popconfirm-message-title{flex:auto;margin-inline-start:8px;}.ant-popconfirm .ant-popconfirm-message-title-only{font-weight:600;}.ant-popconfirm .ant-popconfirm-description{position:relative;margin-inline-start:22px;margin-bottom:8px;color:rgba(255, 255, 255, 0.85);font-size:14px;}.ant-popconfirm .ant-popconfirm-buttons{text-align:end;}.ant-popconfirm .ant-popconfirm-buttons button{margin-inline-start:8px;}[class^=\\"ant-popover\\"],[class*=\\" ant-popover\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-popover\\"]::before,[class*=\\" ant-popover\\"]::before,[class^=\\"ant-popover\\"]::after,[class*=\\" ant-popover\\"]::after{box-sizing:border-box;}[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"],[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"],[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"],[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]{box-sizing:border-box;}[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"]::before,[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"]::before,[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"]::before,[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]::before,[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"]::after,[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"]::after,[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"]::after,[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]::after{box-sizing:border-box;}.ant-popover{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:0;left:0;z-index:1030;font-weight:normal;white-space:normal;text-align:start;cursor:auto;user-select:text;--antd-arrow-background-color:#1f1f1f;}.ant-popover-rtl{direction:rtl;}.ant-popover-hidden{display:none;}.ant-popover .ant-popover-content{position:relative;}.ant-popover .ant-popover-inner{background-color:#1f1f1f;background-clip:padding-box;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);padding:12px;}.ant-popover .ant-popover-title{min-width:177px;margin-bottom:8px;color:rgba(255, 255, 255, 0.85);font-weight:600;}.ant-popover .ant-popover-inner-content{color:rgba(255, 255, 255, 0.85);}.ant-popover .ant-popover-arrow{position:absolute;z-index:1;display:block;pointer-events:none;width:16px;height:16px;overflow:hidden;}.ant-popover .ant-popover-arrow::after{content:\\"\\";position:absolute;width:8.970562748477143px;height:8.970562748477143px;bottom:0;inset-inline:0;margin:auto;border-radius:0 0 2px 0;transform:translateY(50%) rotate(-135deg);box-shadow:3px 3px 7px rgba(0, 0, 0, 0.1);z-index:0;background:transparent;}.ant-popover .ant-popover-arrow::before{position:absolute;bottom:0;inset-inline-start:0;width:16px;height:8px;background:var(--antd-arrow-background-color);clip-path:polygon(1.6568542494923806px 100%, 50% 1.6568542494923806px, 14.34314575050762px 100%, 1.6568542494923806px 100%);clip-path:path('M 0 8 A 4 4 0 0 0 2.82842712474619 6.82842712474619 L 6.585786437626905 3.0710678118654755 A 2 2 0 0 1 9.414213562373096 3.0710678118654755 L 13.17157287525381 6.82842712474619 A 4 4 0 0 0 16 8 Z');content:\\"\\";}.ant-popover .ant-popover-arrow:before{background:var(--antd-arrow-background-color);}.ant-popover-placement-top .ant-popover-arrow,.ant-popover-placement-topLeft .ant-popover-arrow,.ant-popover-placement-topRight .ant-popover-arrow{bottom:0;transform:translateY(100%) rotate(180deg);}.ant-popover-placement-top .ant-popover-arrow{left:50%;transform:translateX(-50%) translateY(100%) rotate(180deg);}.ant-popover-placement-topLeft .ant-popover-arrow{left:6px;}.ant-popover-placement-topRight .ant-popover-arrow{right:6px;}.ant-popover-placement-bottom .ant-popover-arrow,.ant-popover-placement-bottomLeft .ant-popover-arrow,.ant-popover-placement-bottomRight .ant-popover-arrow{top:0;transform:translateY(-100%);}.ant-popover-placement-bottom .ant-popover-arrow{left:50%;transform:translateX(-50%) translateY(-100%);}.ant-popover-placement-bottomLeft .ant-popover-arrow{left:6px;}.ant-popover-placement-bottomRight .ant-popover-arrow{right:6px;}.ant-popover-placement-left .ant-popover-arrow,.ant-popover-placement-leftTop .ant-popover-arrow,.ant-popover-placement-leftBottom .ant-popover-arrow{right:0;transform:translateX(100%) rotate(90deg);}.ant-popover-placement-left .ant-popover-arrow{top:50%;transform:translateY(-50%) translateX(100%) rotate(90deg);}.ant-popover-placement-leftTop .ant-popover-arrow{top:6px;}.ant-popover-placement-leftBottom .ant-popover-arrow{bottom:6px;}.ant-popover-placement-right .ant-popover-arrow,.ant-popover-placement-rightTop .ant-popover-arrow,.ant-popover-placement-rightBottom .ant-popover-arrow{left:0;transform:translateX(-100%) rotate(-90deg);}.ant-popover-placement-right .ant-popover-arrow{top:50%;transform:translateY(-50%) translateX(-100%) rotate(-90deg);}.ant-popover-placement-rightTop .ant-popover-arrow{top:6px;}.ant-popover-placement-rightBottom .ant-popover-arrow{bottom:6px;}.ant-popover-placement-topLeft,.ant-popover-placement-top,.ant-popover-placement-topRight{padding-bottom:12px;}.ant-popover-placement-bottomLeft,.ant-popover-placement-bottom,.ant-popover-placement-bottomRight{padding-top:12px;}.ant-popover-placement-leftTop,.ant-popover-placement-left,.ant-popover-placement-leftBottom{padding-right:12px;}.ant-popover-placement-rightTop,.ant-popover-placement-right,.ant-popover-placement-rightBottom{padding-left:12px;}.ant-popover-pure{position:relative;max-width:none;}.ant-popover-pure .ant-popover-content{display:inline-block;}.ant-popover.ant-popover-blue{--antd-arrow-background-color:#1668dc;}.ant-popover.ant-popover-blue .ant-popover-inner{background-color:#1668dc;}.ant-popover.ant-popover-blue .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-purple{--antd-arrow-background-color:#642ab5;}.ant-popover.ant-popover-purple .ant-popover-inner{background-color:#642ab5;}.ant-popover.ant-popover-purple .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-cyan{--antd-arrow-background-color:#13a8a8;}.ant-popover.ant-popover-cyan .ant-popover-inner{background-color:#13a8a8;}.ant-popover.ant-popover-cyan .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-green{--antd-arrow-background-color:#49aa19;}.ant-popover.ant-popover-green .ant-popover-inner{background-color:#49aa19;}.ant-popover.ant-popover-green .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-magenta{--antd-arrow-background-color:#cb2b83;}.ant-popover.ant-popover-magenta .ant-popover-inner{background-color:#cb2b83;}.ant-popover.ant-popover-magenta .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-pink{--antd-arrow-background-color:#cb2b83;}.ant-popover.ant-popover-pink .ant-popover-inner{background-color:#cb2b83;}.ant-popover.ant-popover-pink .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-red{--antd-arrow-background-color:#d32029;}.ant-popover.ant-popover-red .ant-popover-inner{background-color:#d32029;}.ant-popover.ant-popover-red .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-orange{--antd-arrow-background-color:#d87a16;}.ant-popover.ant-popover-orange .ant-popover-inner{background-color:#d87a16;}.ant-popover.ant-popover-orange .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-yellow{--antd-arrow-background-color:#d8bd14;}.ant-popover.ant-popover-yellow .ant-popover-inner{background-color:#d8bd14;}.ant-popover.ant-popover-yellow .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-volcano{--antd-arrow-background-color:#d84a1b;}.ant-popover.ant-popover-volcano .ant-popover-inner{background-color:#d84a1b;}.ant-popover.ant-popover-volcano .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-geekblue{--antd-arrow-background-color:#2b4acb;}.ant-popover.ant-popover-geekblue .ant-popover-inner{background-color:#2b4acb;}.ant-popover.ant-popover-geekblue .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-lime{--antd-arrow-background-color:#8bbb11;}.ant-popover.ant-popover-lime .ant-popover-inner{background-color:#8bbb11;}.ant-popover.ant-popover-lime .ant-popover-arrow{background:transparent;}.ant-popover.ant-popover-gold{--antd-arrow-background-color:#d89614;}.ant-popover.ant-popover-gold .ant-popover-inner{background-color:#d89614;}.ant-popover.ant-popover-gold .ant-popover-arrow{background:transparent;}.ant-zoom-big-enter,.ant-zoom-big-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-zoom-big-enter.ant-zoom-big-enter-active,.ant-zoom-big-appear.ant-zoom-big-appear-active{animation-name:antZoomBigIn;animation-play-state:running;}.ant-zoom-big-leave.ant-zoom-big-leave-active{animation-name:antZoomBigOut;animation-play-state:running;pointer-events:none;}.ant-zoom-big-enter,.ant-zoom-big-appear{transform:scale(0);opacity:0;animation-timing-function:cubic-bezier(0.08, 0.82, 0.17, 1);}.ant-zoom-big-enter-prepare,.ant-zoom-big-appear-prepare{transform:none;}.ant-zoom-big-leave{animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}[class^=\\"ant-popover\\"],[class*=\\" ant-popover\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-popover\\"]::before,[class*=\\" ant-popover\\"]::before,[class^=\\"ant-popover\\"]::after,[class*=\\" ant-popover\\"]::after{box-sizing:border-box;}[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"],[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"],[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"],[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]{box-sizing:border-box;}[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"]::before,[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"]::before,[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"]::before,[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]::before,[class^=\\"ant-popover\\"] [class^=\\"ant-popover\\"]::after,[class*=\\" ant-popover\\"] [class^=\\"ant-popover\\"]::after,[class^=\\"ant-popover\\"] [class*=\\" ant-popover\\"]::after,[class*=\\" ant-popover\\"] [class*=\\" ant-popover\\"]::after{box-sizing:border-box;}[class^=\\"ant-progress\\"],[class*=\\" ant-progress\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-progress\\"]::before,[class*=\\" ant-progress\\"]::before,[class^=\\"ant-progress\\"]::after,[class*=\\" ant-progress\\"]::after{box-sizing:border-box;}[class^=\\"ant-progress\\"] [class^=\\"ant-progress\\"],[class*=\\" ant-progress\\"] [class^=\\"ant-progress\\"],[class^=\\"ant-progress\\"] [class*=\\" ant-progress\\"],[class*=\\" ant-progress\\"] [class*=\\" ant-progress\\"]{box-sizing:border-box;}[class^=\\"ant-progress\\"] [class^=\\"ant-progress\\"]::before,[class*=\\" ant-progress\\"] [class^=\\"ant-progress\\"]::before,[class^=\\"ant-progress\\"] [class*=\\" ant-progress\\"]::before,[class*=\\" ant-progress\\"] [class*=\\" ant-progress\\"]::before,[class^=\\"ant-progress\\"] [class^=\\"ant-progress\\"]::after,[class*=\\" ant-progress\\"] [class^=\\"ant-progress\\"]::after,[class^=\\"ant-progress\\"] [class*=\\" ant-progress\\"]::after,[class*=\\" ant-progress\\"] [class*=\\" ant-progress\\"]::after{box-sizing:border-box;}.ant-progress{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-block;}.ant-progress-rtl{direction:rtl;}.ant-progress-line{position:relative;width:100%;font-size:14px;margin-inline-end:8px;margin-bottom:8px;}.ant-progress .ant-progress-outer{display:inline-block;width:100%;}.ant-progress.ant-progress-show-info .ant-progress-outer{margin-inline-end:calc(-2em - 8px);padding-inline-end:calc(2em + 8px);}.ant-progress .ant-progress-inner{position:relative;display:inline-block;width:100%;overflow:hidden;vertical-align:middle;background-color:rgba(255, 255, 255, 0.12);border-radius:100px;}.ant-progress .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#1668dc;}.ant-progress .ant-progress-success-bg,.ant-progress .ant-progress-bg{position:relative;background-color:#1668dc;border-radius:100px;transition:all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-progress .ant-progress-success-bg{position:absolute;inset-block-start:0;inset-inline-start:0;background-color:#49aa19;}.ant-progress .ant-progress-text{display:inline-block;width:2em;margin-inline-start:8px;color:rgba(255, 255, 255, 0.85);line-height:1;white-space:nowrap;text-align:start;vertical-align:middle;word-break:normal;}.ant-progress .ant-progress-text .anticon{font-size:14px;}.ant-progress.ant-progress-status-active .ant-progress-bg::before{position:absolute;inset:0;background-color:#141414;border-radius:100px;opacity:0;animation-name:antProgressActive;animation-duration:2.4s;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);animation-iteration-count:infinite;content:\\"\\";}.ant-progress.ant-progress-status-exception .ant-progress-bg{background-color:#dc4446;}.ant-progress.ant-progress-status-exception .ant-progress-text{color:#dc4446;}.ant-progress.ant-progress-status-exception .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#dc4446;}.ant-progress.ant-progress-status-success .ant-progress-bg{background-color:#49aa19;}.ant-progress.ant-progress-status-success .ant-progress-text{color:#49aa19;}.ant-progress.ant-progress-status-success .ant-progress-inner:not(.ant-progress-circle-gradient) .ant-progress-circle-path{stroke:#49aa19;}.ant-progress .ant-progress-circle-trail{stroke:rgba(255, 255, 255, 0.12);}.ant-progress.ant-progress-circle .ant-progress-inner{position:relative;line-height:1;background-color:transparent;}.ant-progress.ant-progress-circle .ant-progress-text{position:absolute;inset-block-start:50%;inset-inline-start:0;width:100%;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);line-height:1;white-space:normal;text-align:center;transform:translateY(-50%);}.ant-progress.ant-progress-circle .ant-progress-text .anticon{font-size:1.1666666666666667em;}.ant-progress-circle.ant-progress-status-exception .ant-progress-text{color:#dc4446;}.ant-progress-circle.ant-progress-status-success .ant-progress-text{color:#49aa19;}.ant-progress-inline-circle{line-height:1;}.ant-progress-inline-circle .ant-progress-inner{vertical-align:bottom;}.ant-progress .ant-progress-steps{display:inline-block;}.ant-progress .ant-progress-steps-outer{display:flex;flex-direction:row;align-items:center;}.ant-progress .ant-progress-steps-item{flex-shrink:0;min-width:2px;margin-inline-end:2px;background-color:rgba(255, 255, 255, 0.12);transition:all 0.3s;}.ant-progress .ant-progress-steps-item-active{background-color:#1668dc;}.ant-progress-small.ant-progress-line,.ant-progress-small.ant-progress-line .ant-progress-text .anticon{font-size:12px;}@keyframes antProgressActive{0%{transform:translateX(-100%) scaleX(0);opacity:0.1;}20%{transform:translateX(-100%) scaleX(0);opacity:0.5;}to{transform:translateX(0) scaleX(1);opacity:0;}}[class^=\\"ant-rate\\"],[class*=\\" ant-rate\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-rate\\"]::before,[class*=\\" ant-rate\\"]::before,[class^=\\"ant-rate\\"]::after,[class*=\\" ant-rate\\"]::after{box-sizing:border-box;}[class^=\\"ant-rate\\"] [class^=\\"ant-rate\\"],[class*=\\" ant-rate\\"] [class^=\\"ant-rate\\"],[class^=\\"ant-rate\\"] [class*=\\" ant-rate\\"],[class*=\\" ant-rate\\"] [class*=\\" ant-rate\\"]{box-sizing:border-box;}[class^=\\"ant-rate\\"] [class^=\\"ant-rate\\"]::before,[class*=\\" ant-rate\\"] [class^=\\"ant-rate\\"]::before,[class^=\\"ant-rate\\"] [class*=\\" ant-rate\\"]::before,[class*=\\" ant-rate\\"] [class*=\\" ant-rate\\"]::before,[class^=\\"ant-rate\\"] [class^=\\"ant-rate\\"]::after,[class*=\\" ant-rate\\"] [class^=\\"ant-rate\\"]::after,[class^=\\"ant-rate\\"] [class*=\\" ant-rate\\"]::after,[class*=\\" ant-rate\\"] [class*=\\" ant-rate\\"]::after{box-sizing:border-box;}.ant-rate{box-sizing:border-box;margin:0;padding:0;color:#d8bd14;font-size:20px;line-height:unset;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-block;outline:none;}.ant-rate-disabled.ant-rate .ant-rate-star{cursor:default;}.ant-rate-disabled.ant-rate .ant-rate-star:hover{transform:scale(1);}.ant-rate .ant-rate-star{position:relative;display:inline-block;color:inherit;cursor:pointer;}.ant-rate .ant-rate-star:not(:last-child){margin-inline-end:8px;}.ant-rate .ant-rate-star >div{transition:all 0.2s,outline 0s;}.ant-rate .ant-rate-star >div:hover{transform:scale(1.1);}.ant-rate .ant-rate-star >div:focus{outline:0;}.ant-rate .ant-rate-star >div:focus-visible{outline:1px dashed #d8bd14;transform:scale(1.1);}.ant-rate .ant-rate-star-first,.ant-rate .ant-rate-star-second{color:rgba(255, 255, 255, 0.12);transition:all 0.2s;user-select:none;}.ant-rate .ant-rate-star-first .anticon,.ant-rate .ant-rate-star-second .anticon{vertical-align:middle;}.ant-rate .ant-rate-star-first{position:absolute;top:0;inset-inline-start:0;width:50%;height:100%;overflow:hidden;opacity:0;}.ant-rate .ant-rate-star-half .ant-rate-star-first,.ant-rate .ant-rate-star-half .ant-rate-star-second{opacity:1;}.ant-rate .ant-rate-star-half .ant-rate-star-first,.ant-rate .ant-rate-star-full .ant-rate-star-second{color:inherit;}.ant-rate +.ant-rate-text{display:inline-block;margin-inline-start:8px;font-size:14px;}.ant-rate-rtl.ant-rate{direction:rtl;}[class^=\\"ant-result\\"],[class*=\\" ant-result\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-result\\"]::before,[class*=\\" ant-result\\"]::before,[class^=\\"ant-result\\"]::after,[class*=\\" ant-result\\"]::after{box-sizing:border-box;}[class^=\\"ant-result\\"] [class^=\\"ant-result\\"],[class*=\\" ant-result\\"] [class^=\\"ant-result\\"],[class^=\\"ant-result\\"] [class*=\\" ant-result\\"],[class*=\\" ant-result\\"] [class*=\\" ant-result\\"]{box-sizing:border-box;}[class^=\\"ant-result\\"] [class^=\\"ant-result\\"]::before,[class*=\\" ant-result\\"] [class^=\\"ant-result\\"]::before,[class^=\\"ant-result\\"] [class*=\\" ant-result\\"]::before,[class*=\\" ant-result\\"] [class*=\\" ant-result\\"]::before,[class^=\\"ant-result\\"] [class^=\\"ant-result\\"]::after,[class*=\\" ant-result\\"] [class^=\\"ant-result\\"]::after,[class^=\\"ant-result\\"] [class*=\\" ant-result\\"]::after,[class*=\\" ant-result\\"] [class*=\\" ant-result\\"]::after{box-sizing:border-box;}.ant-result{padding:48px 32px;}.ant-result-rtl{direction:rtl;}.ant-result .ant-result-image{width:250px;height:295px;margin:auto;}.ant-result .ant-result-icon{margin-bottom:24px;text-align:center;}.ant-result .ant-result-icon>.anticon{font-size:72px;}.ant-result .ant-result-title{color:rgba(255, 255, 255, 0.85);font-size:24px;line-height:1.3333333333333333;margin-block:8px;text-align:center;}.ant-result .ant-result-subtitle{color:rgba(255, 255, 255, 0.45);font-size:14px;line-height:1.5714285714285714;text-align:center;}.ant-result .ant-result-content{margin-top:24px;padding:24px 40px;background-color:rgba(255, 255, 255, 0.04);}.ant-result .ant-result-extra{margin:24px 0 0 0;text-align:center;}.ant-result .ant-result-extra>*{margin-inline-end:8px;}.ant-result .ant-result-extra>*:last-child{margin-inline-end:0;}.ant-result-success .ant-result-icon>.anticon{color:#49aa19;}.ant-result-error .ant-result-icon>.anticon{color:#dc4446;}.ant-result-info .ant-result-icon>.anticon{color:#1668dc;}.ant-result-warning .ant-result-icon>.anticon{color:#d89614;}[class^=\\"ant-slider\\"],[class*=\\" ant-slider\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-slider\\"]::before,[class*=\\" ant-slider\\"]::before,[class^=\\"ant-slider\\"]::after,[class*=\\" ant-slider\\"]::after{box-sizing:border-box;}[class^=\\"ant-slider\\"] [class^=\\"ant-slider\\"],[class*=\\" ant-slider\\"] [class^=\\"ant-slider\\"],[class^=\\"ant-slider\\"] [class*=\\" ant-slider\\"],[class*=\\" ant-slider\\"] [class*=\\" ant-slider\\"]{box-sizing:border-box;}[class^=\\"ant-slider\\"] [class^=\\"ant-slider\\"]::before,[class*=\\" ant-slider\\"] [class^=\\"ant-slider\\"]::before,[class^=\\"ant-slider\\"] [class*=\\" ant-slider\\"]::before,[class*=\\" ant-slider\\"] [class*=\\" ant-slider\\"]::before,[class^=\\"ant-slider\\"] [class^=\\"ant-slider\\"]::after,[class*=\\" ant-slider\\"] [class^=\\"ant-slider\\"]::after,[class^=\\"ant-slider\\"] [class*=\\" ant-slider\\"]::after,[class*=\\" ant-slider\\"] [class*=\\" ant-slider\\"]::after{box-sizing:border-box;}.ant-slider{box-sizing:border-box;margin:11px 5px;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;height:10px;cursor:pointer;touch-action:none;}.ant-slider-vertical{margin:5px 11px;}.ant-slider .ant-slider-rail{position:absolute;background-color:rgba(255, 255, 255, 0.08);border-radius:2px;transition:background-color 0.2s;}.ant-slider .ant-slider-track{position:absolute;background-color:#0e340e;border-radius:2px;transition:background-color 0.2s;}.ant-slider:hover .ant-slider-rail{background-color:rgba(255, 255, 255, 0.12);}.ant-slider:hover .ant-slider-track{background-color:#0b450b;}.ant-slider:hover .ant-slider-dot{border-color:rgba(255, 255, 255, 0.18);}.ant-slider:hover .ant-slider-handle::after{box-shadow:0 0 0 2px #0b450b;}.ant-slider:hover .ant-slider-dot-active{border-color:#037003;}.ant-slider .ant-slider-handle{position:absolute;width:10px;height:10px;outline:none;}.ant-slider .ant-slider-handle .ant-slider-dragging{z-index:1;}.ant-slider .ant-slider-handle::before{content:\\"\\";position:absolute;inset-inline-start:-2px;inset-block-start:-2px;width:14px;height:14px;background-color:transparent;}.ant-slider .ant-slider-handle::after{content:\\"\\";position:absolute;inset-block-start:0;inset-inline-start:0;width:10px;height:10px;background-color:#1f1f1f;box-shadow:0 0 0 2px #0e340e;border-radius:50%;cursor:pointer;transition:inset-inline-start 0.2s,inset-block-start 0.2s,width 0.2s,height 0.2s,box-shadow 0.2s;}.ant-slider .ant-slider-handle:hover::before,.ant-slider .ant-slider-handle:active::before,.ant-slider .ant-slider-handle:focus::before{inset-inline-start:-5px;inset-block-start:-5px;width:20px;height:20px;}.ant-slider .ant-slider-handle:hover::after,.ant-slider .ant-slider-handle:active::after,.ant-slider .ant-slider-handle:focus::after{box-shadow:0 0 0 4px #037003;width:12px;height:12px;inset-inline-start:-1px;inset-block-start:-1px;}.ant-slider .ant-slider-mark{position:absolute;font-size:14px;}.ant-slider .ant-slider-mark-text{position:absolute;display:inline-block;color:rgba(255, 255, 255, 0.45);text-align:center;word-break:keep-all;cursor:pointer;user-select:none;}.ant-slider .ant-slider-mark-text-active{color:rgba(255, 255, 255, 0.85);}.ant-slider .ant-slider-step{position:absolute;background:transparent;pointer-events:none;}.ant-slider .ant-slider-dot{position:absolute;width:8px;height:8px;background-color:#1f1f1f;border:2px solid #303030;border-radius:50%;cursor:pointer;transition:border-color 0.3s;}.ant-slider .ant-slider-dot-active{border-color:#0e340e;}.ant-slider.ant-slider-disabled{cursor:not-allowed;}.ant-slider.ant-slider-disabled .ant-slider-rail{background-color:rgba(255, 255, 255, 0.12)!important;}.ant-slider.ant-slider-disabled .ant-slider-track{background-color:rgba(255, 255, 255, 0.25)!important;}.ant-slider.ant-slider-disabled .ant-slider-dot{background-color:#1f1f1f;border-color:rgba(255, 255, 255, 0.25);box-shadow:none;cursor:not-allowed;}.ant-slider.ant-slider-disabled .ant-slider-handle::after{background-color:#1f1f1f;cursor:not-allowed;width:10px;height:10px;box-shadow:0 0 0 2px #4f4f4f;inset-inline-start:0;inset-block-start:0;}.ant-slider.ant-slider-disabled .ant-slider-mark-text,.ant-slider.ant-slider-disabled .ant-slider-dot{cursor:not-allowed!important;}.ant-slider-horizontal{padding-block:4px;height:12px;}.ant-slider-horizontal .ant-slider-rail{width:100%;height:4px;}.ant-slider-horizontal .ant-slider-track{height:4px;}.ant-slider-horizontal .ant-slider-handle{inset-block-start:1px;}.ant-slider-horizontal .ant-slider-mark{inset-inline-start:0;top:10px;width:100%;}.ant-slider-horizontal .ant-slider-step{inset-inline-start:0;top:4px;width:100%;height:4px;}.ant-slider-horizontal .ant-slider-dot{position:absolute;inset-block-start:-2px;}.ant-slider-horizontal.ant-slider-with-marks{margin-bottom:30px;}.ant-slider-vertical{padding-inline:4px;width:12px;height:100%;}.ant-slider-vertical .ant-slider-rail{height:100%;width:4px;}.ant-slider-vertical .ant-slider-track{width:4px;}.ant-slider-vertical .ant-slider-handle{inset-inline-start:1px;}.ant-slider-vertical .ant-slider-mark{inset-inline-start:10px;top:0;height:100%;}.ant-slider-vertical .ant-slider-step{inset-inline-start:4px;top:0;height:100%;width:4px;}.ant-slider-vertical .ant-slider-dot{position:absolute;inset-inline-start:-2px;}[class^=\\"ant-space\\"],[class*=\\" ant-space\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-space\\"]::before,[class*=\\" ant-space\\"]::before,[class^=\\"ant-space\\"]::after,[class*=\\" ant-space\\"]::after{box-sizing:border-box;}[class^=\\"ant-space\\"] [class^=\\"ant-space\\"],[class*=\\" ant-space\\"] [class^=\\"ant-space\\"],[class^=\\"ant-space\\"] [class*=\\" ant-space\\"],[class*=\\" ant-space\\"] [class*=\\" ant-space\\"]{box-sizing:border-box;}[class^=\\"ant-space\\"] [class^=\\"ant-space\\"]::before,[class*=\\" ant-space\\"] [class^=\\"ant-space\\"]::before,[class^=\\"ant-space\\"] [class*=\\" ant-space\\"]::before,[class*=\\" ant-space\\"] [class*=\\" ant-space\\"]::before,[class^=\\"ant-space\\"] [class^=\\"ant-space\\"]::after,[class*=\\" ant-space\\"] [class^=\\"ant-space\\"]::after,[class^=\\"ant-space\\"] [class*=\\" ant-space\\"]::after,[class*=\\" ant-space\\"] [class*=\\" ant-space\\"]::after{box-sizing:border-box;}.ant-space{display:inline-flex;}.ant-space-rtl{direction:rtl;}.ant-space-vertical{flex-direction:column;}.ant-space-align{flex-direction:column;}.ant-space-align-center{align-items:center;}.ant-space-align-start{align-items:flex-start;}.ant-space-align-end{align-items:flex-end;}.ant-space-align-baseline{align-items:baseline;}.ant-space .ant-space-space-item:empty{display:none;}.ant-space{display:inline-flex;}.ant-space-block{display:flex;width:100%;}.ant-space-vertical{flex-direction:column;}[class^=\\"ant-space-compact\\"],[class*=\\" ant-space-compact\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-space-compact\\"]::before,[class*=\\" ant-space-compact\\"]::before,[class^=\\"ant-space-compact\\"]::after,[class*=\\" ant-space-compact\\"]::after{box-sizing:border-box;}[class^=\\"ant-space-compact\\"] [class^=\\"ant-space-compact\\"],[class*=\\" ant-space-compact\\"] [class^=\\"ant-space-compact\\"],[class^=\\"ant-space-compact\\"] [class*=\\" ant-space-compact\\"],[class*=\\" ant-space-compact\\"] [class*=\\" ant-space-compact\\"]{box-sizing:border-box;}[class^=\\"ant-space-compact\\"] [class^=\\"ant-space-compact\\"]::before,[class*=\\" ant-space-compact\\"] [class^=\\"ant-space-compact\\"]::before,[class^=\\"ant-space-compact\\"] [class*=\\" ant-space-compact\\"]::before,[class*=\\" ant-space-compact\\"] [class*=\\" ant-space-compact\\"]::before,[class^=\\"ant-space-compact\\"] [class^=\\"ant-space-compact\\"]::after,[class*=\\" ant-space-compact\\"] [class^=\\"ant-space-compact\\"]::after,[class^=\\"ant-space-compact\\"] [class*=\\" ant-space-compact\\"]::after,[class*=\\" ant-space-compact\\"] [class*=\\" ant-space-compact\\"]::after{box-sizing:border-box;}.ant-space-compact{display:inline-flex;}.ant-space-compact-rtl{direction:rtl;}.ant-space-compact-vertical{flex-direction:column;}.ant-space-compact-align{flex-direction:column;}.ant-space-compact-align-center{align-items:center;}.ant-space-compact-align-start{align-items:flex-start;}.ant-space-compact-align-end{align-items:flex-end;}.ant-space-compact-align-baseline{align-items:baseline;}.ant-space-compact .ant-space-compact-space-item:empty{display:none;}.ant-space-compact{display:inline-flex;}.ant-space-compact-block{display:flex;width:100%;}.ant-space-compact-vertical{flex-direction:column;}[class^=\\"ant-steps\\"],[class*=\\" ant-steps\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-steps\\"]::before,[class*=\\" ant-steps\\"]::before,[class^=\\"ant-steps\\"]::after,[class*=\\" ant-steps\\"]::after{box-sizing:border-box;}[class^=\\"ant-steps\\"] [class^=\\"ant-steps\\"],[class*=\\" ant-steps\\"] [class^=\\"ant-steps\\"],[class^=\\"ant-steps\\"] [class*=\\" ant-steps\\"],[class*=\\" ant-steps\\"] [class*=\\" ant-steps\\"]{box-sizing:border-box;}[class^=\\"ant-steps\\"] [class^=\\"ant-steps\\"]::before,[class*=\\" ant-steps\\"] [class^=\\"ant-steps\\"]::before,[class^=\\"ant-steps\\"] [class*=\\" ant-steps\\"]::before,[class*=\\" ant-steps\\"] [class*=\\" ant-steps\\"]::before,[class^=\\"ant-steps\\"] [class^=\\"ant-steps\\"]::after,[class*=\\" ant-steps\\"] [class^=\\"ant-steps\\"]::after,[class^=\\"ant-steps\\"] [class*=\\" ant-steps\\"]::after,[class*=\\" ant-steps\\"] [class*=\\" ant-steps\\"]::after{box-sizing:border-box;}.ant-steps{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:0;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;width:100%;text-align:initial;}.ant-steps .ant-steps-item{position:relative;display:inline-block;flex:1;overflow:hidden;vertical-align:top;}.ant-steps .ant-steps-item:last-child{flex:none;}.ant-steps .ant-steps-item:last-child >.ant-steps-item-container>.ant-steps-item-tail,.ant-steps .ant-steps-item:last-child >.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{display:none;}.ant-steps .ant-steps-item-container{outline:none;}.ant-steps .ant-steps-item-icon,.ant-steps .ant-steps-item-content{display:inline-block;vertical-align:top;}.ant-steps .ant-steps-item-icon{width:32px;height:32px;margin-top:0;margin-bottom:0;margin-inline-start:0;margin-inline-end:8px;font-size:14px;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';line-height:32px;text-align:center;border-radius:32px;border:1px solid transparent;transition:background-color 0.3s,border-color 0.3s;}.ant-steps .ant-steps-item-icon .ant-steps-icon{position:relative;top:-0.5px;color:#037003;line-height:1;}.ant-steps .ant-steps-item-tail{position:absolute;top:12px;inset-inline-start:0;width:100%;}.ant-steps .ant-steps-item-tail::after{display:inline-block;width:100%;height:1px;background:rgba(253, 253, 253, 0.12);border-radius:1px;transition:background 0.3s;content:\\"\\";}.ant-steps .ant-steps-item-title{position:relative;display:inline-block;padding-inline-end:16px;color:rgba(255, 255, 255, 0.85);font-size:16px;line-height:32px;}.ant-steps .ant-steps-item-title::after{position:absolute;top:16px;inset-inline-start:100%;display:block;width:9999px;height:1px;background:rgba(253, 253, 253, 0.12);content:\\"\\";}.ant-steps .ant-steps-item-subtitle{display:inline;margin-inline-start:8px;color:rgba(255, 255, 255, 0.45);font-weight:normal;font-size:14px;}.ant-steps .ant-steps-item-description{color:rgba(255, 255, 255, 0.45);font-size:14px;}.ant-steps .ant-steps-item-wait .ant-steps-item-icon{background-color:rgba(255, 255, 255, 0.12);border-color:transparent;}.ant-steps .ant-steps-item-wait .ant-steps-item-icon >.ant-steps-icon{color:rgba(255, 255, 255, 0.65);}.ant-steps .ant-steps-item-wait .ant-steps-item-icon >.ant-steps-icon .ant-steps-icon-dot{background:rgba(255, 255, 255, 0.25);}.ant-steps .ant-steps-item-wait.ant-steps-item-custom .ant-steps-item-icon >.ant-steps-icon{color:rgba(255, 255, 255, 0.25);}.ant-steps .ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255, 255, 255, 0.45);}.ant-steps .ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(255, 255, 255, 0.45);}.ant-steps .ant-steps-item-wait>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item-process .ant-steps-item-icon{background-color:#037003;border-color:#037003;}.ant-steps .ant-steps-item-process .ant-steps-item-icon >.ant-steps-icon{color:#fff;}.ant-steps .ant-steps-item-process .ant-steps-item-icon >.ant-steps-icon .ant-steps-icon-dot{background:#037003;}.ant-steps .ant-steps-item-process.ant-steps-item-custom .ant-steps-item-icon >.ant-steps-icon{color:#037003;}.ant-steps .ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255, 255, 255, 0.85);}.ant-steps .ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(255, 255, 255, 0.85);}.ant-steps .ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item-process>.ant-steps-item-container>.ant-steps-item-title{font-weight:600;}.ant-steps .ant-steps-item-finish .ant-steps-item-icon{background-color:#111911;border-color:#111911;}.ant-steps .ant-steps-item-finish .ant-steps-item-icon >.ant-steps-icon{color:#037003;}.ant-steps .ant-steps-item-finish .ant-steps-item-icon >.ant-steps-icon .ant-steps-icon-dot{background:#037003;}.ant-steps .ant-steps-item-finish.ant-steps-item-custom .ant-steps-item-icon >.ant-steps-icon{color:#037003;}.ant-steps .ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:rgba(255, 255, 255, 0.85);}.ant-steps .ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{background-color:#037003;}.ant-steps .ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:rgba(255, 255, 255, 0.45);}.ant-steps .ant-steps-item-finish>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:#037003;}.ant-steps .ant-steps-item-error .ant-steps-item-icon{background-color:#dc4446;border-color:#dc4446;}.ant-steps .ant-steps-item-error .ant-steps-item-icon >.ant-steps-icon{color:#fff;}.ant-steps .ant-steps-item-error .ant-steps-item-icon >.ant-steps-icon .ant-steps-icon-dot{background:#dc4446;}.ant-steps .ant-steps-item-error.ant-steps-item-custom .ant-steps-item-icon >.ant-steps-icon{color:#dc4446;}.ant-steps .ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title{color:#dc4446;}.ant-steps .ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-description{color:#dc4446;}.ant-steps .ant-steps-item-error>.ant-steps-item-container>.ant-steps-item-tail::after{background-color:rgba(253, 253, 253, 0.12);}.ant-steps .ant-steps-item.ant-steps-next-error>.ant-steps-item-title::after{background:#dc4446;}.ant-steps .ant-steps-item-disabled{cursor:not-allowed;}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button']{cursor:pointer;}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button'] .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button'] .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button'] .ant-steps-item-description,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button'] .ant-steps-item-icon .ant-steps-icon{transition:color 0.3s;}.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button']:hover .ant-steps-item-title,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button']:hover .ant-steps-item-subtitle,.ant-steps .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button']:hover .ant-steps-item-description{color:#037003;}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role='button']:hover .ant-steps-item-icon{border-color:#037003;}.ant-steps .ant-steps-item:not(.ant-steps-item-active):not(.ant-steps-item-process)>.ant-steps-item-container[role='button']:hover .ant-steps-item-icon .ant-steps-icon{color:#037003;}.ant-steps.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-inline-start:16px;white-space:nowrap;}.ant-steps.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-inline-start:0;}.ant-steps.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:last-child .ant-steps-item-title{padding-inline-end:0;}.ant-steps.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-tail{display:none;}.ant-steps.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item-description{max-width:140px;white-space:normal;}.ant-steps .ant-steps-item-custom >.ant-steps-item-container>.ant-steps-item-icon{height:auto;background:none;border:0;}.ant-steps .ant-steps-item-custom >.ant-steps-item-container>.ant-steps-item-icon >.ant-steps-icon{top:0;width:32px;height:32px;font-size:20px;line-height:32px;}.ant-steps:not(.ant-steps-vertical) .ant-steps-item-custom .ant-steps-item-icon{width:auto;background:none;}.ant-steps.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item{padding-inline-start:12px;}.ant-steps.ant-steps-small.ant-steps-horizontal:not(.ant-steps-label-vertical) .ant-steps-item:first-child{padding-inline-start:0;}.ant-steps.ant-steps-small .ant-steps-item-icon{width:24px;height:24px;margin-top:0;margin-bottom:0;margin-inline:0 8px;font-size:12px;line-height:24px;text-align:center;border-radius:24px;}.ant-steps.ant-steps-small .ant-steps-item-title{padding-inline-end:12px;font-size:14px;line-height:24px;}.ant-steps.ant-steps-small .ant-steps-item-title::after{top:12px;}.ant-steps.ant-steps-small .ant-steps-item-description{color:rgba(255, 255, 255, 0.45);font-size:14px;}.ant-steps.ant-steps-small .ant-steps-item-tail{top:8px;}.ant-steps.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon{width:inherit;height:inherit;line-height:inherit;background:none;border:0;border-radius:0;}.ant-steps.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon >.ant-steps-icon{font-size:24px;line-height:24px;transform:none;}.ant-steps.ant-steps-vertical{display:flex;flex-direction:column;}.ant-steps.ant-steps-vertical >.ant-steps-item{display:block;flex:1 0 auto;padding-inline-start:0;overflow:visible;}.ant-steps.ant-steps-vertical >.ant-steps-item .ant-steps-item-icon{float:left;margin-inline-end:16px;}.ant-steps.ant-steps-vertical >.ant-steps-item .ant-steps-item-content{display:block;min-height:48px;overflow:hidden;}.ant-steps.ant-steps-vertical >.ant-steps-item .ant-steps-item-title{line-height:32px;}.ant-steps.ant-steps-vertical >.ant-steps-item .ant-steps-item-description{padding-bottom:12px;}.ant-steps.ant-steps-vertical >.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{position:absolute;top:0;inset-inline-start:15px;width:1px;height:100%;padding:38px 0 6px;}.ant-steps.ant-steps-vertical >.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail::after{width:1px;height:100%;}.ant-steps.ant-steps-vertical >.ant-steps-item:not(:last-child)>.ant-steps-item-container>.ant-steps-item-tail{display:block;}.ant-steps.ant-steps-vertical >.ant-steps-item>.ant-steps-item-container>.ant-steps-item-content>.ant-steps-item-title::after{display:none;}.ant-steps.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-tail{position:absolute;top:0;inset-inline-start:11px;padding:30px 0 6px;}.ant-steps.ant-steps-vertical.ant-steps-small .ant-steps-item-container .ant-steps-item-title{line-height:24px;}.ant-steps.ant-steps-label-vertical .ant-steps-item{overflow:visible;}.ant-steps.ant-steps-label-vertical .ant-steps-item-tail{margin-inline-start:56px;padding:4px 24px;}.ant-steps.ant-steps-label-vertical .ant-steps-item-content{display:block;width:112px;margin-top:12px;text-align:center;}.ant-steps.ant-steps-label-vertical .ant-steps-item-icon{display:inline-block;margin-inline-start:40px;}.ant-steps.ant-steps-label-vertical .ant-steps-item-title{padding-inline-end:0;padding-inline-start:0;}.ant-steps.ant-steps-label-vertical .ant-steps-item-title::after{display:none;}.ant-steps.ant-steps-label-vertical .ant-steps-item-subtitle{display:block;margin-bottom:4px;margin-inline-start:0;line-height:1.5714285714285714;}.ant-steps.ant-steps-label-vertical.ant-steps-small:not(.ant-steps-dot) .ant-steps-item-icon{margin-inline-start:44px;}.ant-steps.ant-steps-dot .ant-steps-item-title,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-title{line-height:1.5714285714285714;}.ant-steps.ant-steps-dot .ant-steps-item-tail,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-tail{top:2px;width:100%;margin-top:0;margin-bottom:0;margin-inline:70px 0;padding:0;}.ant-steps.ant-steps-dot .ant-steps-item-tail::after,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-tail::after{width:calc(100% - 24px);height:3px;margin-inline-start:12px;}.ant-steps.ant-steps-dot .ant-steps-item-icon,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-icon{width:8px;height:8px;margin-inline-start:66px;padding-inline-end:0;line-height:8px;background:transparent;border:0;}.ant-steps.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{position:relative;float:left;width:100%;height:100%;border-radius:100px;transition:all 0.3s;}.ant-steps.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot::after,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot::after{position:absolute;top:-12px;inset-inline-start:-26px;width:60px;height:32px;background:transparent;content:\\"\\";}.ant-steps.ant-steps-dot .ant-steps-item-content,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-content{width:140px;}.ant-steps.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{position:relative;top:-1px;width:10px;height:10px;line-height:10px;background:none;margin-inline-start:65px;}.ant-steps.ant-steps-dot .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot,.ant-steps.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-icon:first-child .ant-steps-icon-dot{inset-inline-start:0;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item-icon{margin-top:12px;margin-inline-start:0;background:none;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item-process .ant-steps-item-icon{margin-top:11px;top:0;inset-inline-start:-1px;margin-inline-start:0;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:12px;inset-inline-start:0;margin:0;padding:16px 0 8px;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail::after{margin-inline-start:3.5px;}.ant-steps.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item-icon{margin-top:8px;}.ant-steps.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item-process .ant-steps-item-icon{margin-top:7px;}.ant-steps.ant-steps-vertical.ant-steps-dot.ant-steps-small .ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{top:8px;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item:first-child .ant-steps-icon-dot{inset-inline-start:0;}.ant-steps.ant-steps-vertical.ant-steps-dot .ant-steps-item-content{width:inherit;}.ant-steps.ant-steps-navigation{padding-top:12px;}.ant-steps.ant-steps-navigation.ant-steps-small .ant-steps-item-container{margin-inline-start:-12px;}.ant-steps.ant-steps-navigation .ant-steps-item{overflow:visible;text-align:center;}.ant-steps.ant-steps-navigation .ant-steps-item-container{display:inline-block;height:100%;margin-inline-start:-16px;padding-bottom:12px;text-align:start;transition:opacity 0.3s;}.ant-steps.ant-steps-navigation .ant-steps-item-container .ant-steps-item-content{max-width:auto;}.ant-steps.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title{max-width:100%;padding-inline-end:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-steps.ant-steps-navigation .ant-steps-item-container .ant-steps-item-title::after{display:none;}.ant-steps.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button']{cursor:pointer;}.ant-steps.ant-steps-navigation .ant-steps-item:not(.ant-steps-item-active) .ant-steps-item-container[role='button']:hover{opacity:0.85;}.ant-steps.ant-steps-navigation .ant-steps-item:last-child{flex:1;}.ant-steps.ant-steps-navigation .ant-steps-item:last-child::after{display:none;}.ant-steps.ant-steps-navigation .ant-steps-item::after{position:absolute;top:calc(50% - 6px);inset-inline-start:100%;display:inline-block;width:12px;height:12px;border-top:1px solid rgba(255, 255, 255, 0.25);border-bottom:none;border-inline-start:none;border-inline-end:1px solid rgba(255, 255, 255, 0.25);transform:translateY(-50%) translateX(-50%) rotate(45deg);content:\\"\\";}.ant-steps.ant-steps-navigation .ant-steps-item::before{position:absolute;bottom:0;inset-inline-start:50%;display:inline-block;width:0;height:2px;background-color:#037003;transition:width 0.3s,inset-inline-start 0.3s;transition-timing-function:ease-out;content:\\"\\";}.ant-steps.ant-steps-navigation .ant-steps-item.ant-steps-item-active::before{inset-inline-start:0;width:100%;}.ant-steps.ant-steps-navigation.ant-steps-vertical >.ant-steps-item{margin-inline-end:0;}.ant-steps.ant-steps-navigation.ant-steps-vertical >.ant-steps-item::before{display:none;}.ant-steps.ant-steps-navigation.ant-steps-vertical >.ant-steps-item.ant-steps-item-active::before{top:0;inset-inline-end:0;inset-inline-start:unset;display:block;width:3px;height:calc(100% - 24px);}.ant-steps.ant-steps-navigation.ant-steps-vertical >.ant-steps-item::after{position:relative;inset-inline-start:50%;display:block;width:8px;height:8px;margin-bottom:8px;text-align:center;transform:translateY(-50%) translateX(-50%) rotate(135deg);}.ant-steps.ant-steps-navigation.ant-steps-vertical >.ant-steps-item >.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden;}.ant-steps.ant-steps-navigation.ant-steps-horizontal >.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{visibility:hidden;}.ant-steps.ant-steps-rtl{direction:rtl;}.ant-steps.ant-steps-rtl .ant-steps-item-subtitle{float:left;}.ant-steps.ant-steps-rtl.ant-steps-navigation .ant-steps-item::after{transform:rotate(-45deg);}.ant-steps.ant-steps-rtl.ant-steps-vertical >.ant-steps-item::after{transform:rotate(225deg);}.ant-steps.ant-steps-rtl.ant-steps-vertical >.ant-steps-item .ant-steps-item-icon{float:right;}.ant-steps.ant-steps-rtl.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot,.ant-steps.ant-steps-rtl.ant-steps-dot.ant-steps-small .ant-steps-item-icon .ant-steps-icon-dot{float:right;}.ant-steps.ant-steps-with-progress .ant-steps-item{padding-top:4px;}.ant-steps.ant-steps-with-progress .ant-steps-item-process .ant-steps-item-container .ant-steps-item-icon .ant-steps-icon{color:#fff;}.ant-steps.ant-steps-with-progress.ant-steps-vertical>.ant-steps-item{padding-inline-start:4px;}.ant-steps.ant-steps-with-progress.ant-steps-vertical>.ant-steps-item >.ant-steps-item-container>.ant-steps-item-tail{top:4px;inset-inline-start:19px;}.ant-steps.ant-steps-with-progress.ant-steps-horizontal .ant-steps-item:first-child,.ant-steps.ant-steps-with-progress.ant-steps-small.ant-steps-horizontal .ant-steps-item:first-child{padding-bottom:4px;padding-inline-start:4px;}.ant-steps.ant-steps-with-progress.ant-steps-small.ant-steps-vertical>.ant-steps-item>.ant-steps-item-container>.ant-steps-item-tail{inset-inline-start:15px;}.ant-steps.ant-steps-with-progress.ant-steps-label-vertical .ant-steps-item .ant-steps-item-tail{top:14px;}.ant-steps.ant-steps-with-progress .ant-steps-item-icon{position:relative;}.ant-steps.ant-steps-with-progress .ant-steps-item-icon .ant-progress{position:absolute;inset-block-start:-5px;inset-inline-start:-5px;}.ant-steps.ant-steps-inline{width:auto;display:inline-flex;}.ant-steps.ant-steps-inline .ant-steps-item{flex:none;}.ant-steps.ant-steps-inline .ant-steps-item-container{padding:9px 4px 0;margin:0 2px;border-radius:4px;cursor:pointer;transition:background-color 0.2s;}.ant-steps.ant-steps-inline .ant-steps-item-container:hover{background:rgba(255, 255, 255, 0.08);}.ant-steps.ant-steps-inline .ant-steps-item-container[role='button']:hover{opacity:1;}.ant-steps.ant-steps-inline .ant-steps-item-icon{width:6px;height:6px;margin-inline-start:calc(50% - 3px);}.ant-steps.ant-steps-inline .ant-steps-item-icon >.ant-steps-icon{top:0;}.ant-steps.ant-steps-inline .ant-steps-item-icon .ant-steps-icon-dot{border-radius:3px;}.ant-steps.ant-steps-inline .ant-steps-item-content{width:auto;margin-top:7px;}.ant-steps.ant-steps-inline .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);font-size:12px;line-height:1.6666666666666667;font-weight:normal;margin-bottom:2px;}.ant-steps.ant-steps-inline .ant-steps-item-description{display:none;}.ant-steps.ant-steps-inline .ant-steps-item-tail{margin-inline-start:0;top:12px;transform:translateY(-50%);}.ant-steps.ant-steps-inline .ant-steps-item-tail:after{width:100%;height:1px;border-radius:0;margin-inline-start:0;background:#303030;}.ant-steps.ant-steps-inline .ant-steps-item:first-child .ant-steps-item-tail{width:50%;margin-inline-start:50%;}.ant-steps.ant-steps-inline .ant-steps-item:last-child .ant-steps-item-tail{display:block;width:50%;}.ant-steps.ant-steps-inline .ant-steps-item-wait .ant-steps-item-icon .ant-steps-icon .ant-steps-icon-dot{background-color:#141414;border:1px solid #303030;}.ant-steps.ant-steps-inline .ant-steps-item-wait .ant-steps-item-container .ant-steps-item-content .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);}.ant-steps.ant-steps-inline .ant-steps-item-finish .ant-steps-item-tail::after{background-color:#303030;}.ant-steps.ant-steps-inline .ant-steps-item-finish .ant-steps-item-icon .ant-steps-icon .ant-steps-icon-dot{background-color:#303030;border:1px solid #303030;}.ant-steps.ant-steps-inline .ant-steps-item-finish .ant-steps-item-container .ant-steps-item-content .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);}.ant-steps.ant-steps-inline .ant-steps-item-error .ant-steps-item-container .ant-steps-item-content .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);}.ant-steps.ant-steps-inline .ant-steps-item-active .ant-steps-item-icon,.ant-steps.ant-steps-inline .ant-steps-item-process .ant-steps-item-icon{width:6px;height:6px;margin-inline-start:calc(50% - 3px);top:0;}.ant-steps.ant-steps-inline .ant-steps-item-active .ant-steps-item-container .ant-steps-item-content .ant-steps-item-title,.ant-steps.ant-steps-inline .ant-steps-item-process .ant-steps-item-container .ant-steps-item-content .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);}.ant-steps.ant-steps-inline .ant-steps-item:not(.ant-steps-item-active)>.ant-steps-item-container[role='button']:hover .ant-steps-item-title{color:rgba(255, 255, 255, 0.25);}[class^=\\"ant-switch\\"],[class*=\\" ant-switch\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-switch\\"]::before,[class*=\\" ant-switch\\"]::before,[class^=\\"ant-switch\\"]::after,[class*=\\" ant-switch\\"]::after{box-sizing:border-box;}[class^=\\"ant-switch\\"] [class^=\\"ant-switch\\"],[class*=\\" ant-switch\\"] [class^=\\"ant-switch\\"],[class^=\\"ant-switch\\"] [class*=\\" ant-switch\\"],[class*=\\" ant-switch\\"] [class*=\\" ant-switch\\"]{box-sizing:border-box;}[class^=\\"ant-switch\\"] [class^=\\"ant-switch\\"]::before,[class*=\\" ant-switch\\"] [class^=\\"ant-switch\\"]::before,[class^=\\"ant-switch\\"] [class*=\\" ant-switch\\"]::before,[class*=\\" ant-switch\\"] [class*=\\" ant-switch\\"]::before,[class^=\\"ant-switch\\"] [class^=\\"ant-switch\\"]::after,[class*=\\" ant-switch\\"] [class^=\\"ant-switch\\"]::after,[class^=\\"ant-switch\\"] [class*=\\" ant-switch\\"]::after,[class*=\\" ant-switch\\"] [class*=\\" ant-switch\\"]::after{box-sizing:border-box;}.ant-switch{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:22px;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:inline-block;min-width:44px;height:22px;vertical-align:middle;background:rgba(255, 255, 255, 0.25);border:0;border-radius:100px;cursor:pointer;transition:all 0.2s;user-select:none;}.ant-switch:hover:not(.ant-switch-disabled){background:rgba(255, 255, 255, 0.45);}.ant-switch:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-switch.ant-switch-checked{background:#037003;}.ant-switch.ant-switch-checked:hover:not(.ant-switch-disabled){background:#198016;}.ant-switch.ant-switch-loading,.ant-switch.ant-switch-disabled{cursor:not-allowed;opacity:0.65;}.ant-switch.ant-switch-loading *,.ant-switch.ant-switch-disabled *{box-shadow:none;cursor:not-allowed;}.ant-switch.ant-switch-rtl{direction:rtl;}.ant-switch .ant-switch-inner{display:block;overflow:hidden;border-radius:100px;height:100%;padding-inline-start:24px;padding-inline-end:9px;transition:padding-inline-start 0.2s ease-in-out,padding-inline-end 0.2s ease-in-out;}.ant-switch .ant-switch-inner .ant-switch-inner-checked,.ant-switch .ant-switch-inner .ant-switch-inner-unchecked{display:block;color:#fff;font-size:12px;transition:margin-inline-start 0.2s ease-in-out,margin-inline-end 0.2s ease-in-out;pointer-events:none;}.ant-switch .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:calc(-100% + 22px - 48px);margin-inline-end:calc(100% - 22px + 48px);}.ant-switch .ant-switch-inner .ant-switch-inner-unchecked{margin-top:-22px;margin-inline-start:0;margin-inline-end:0;}.ant-switch.ant-switch-checked .ant-switch-inner{padding-inline-start:9px;padding-inline-end:24px;}.ant-switch.ant-switch-checked .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:0;margin-inline-end:0;}.ant-switch.ant-switch-checked .ant-switch-inner .ant-switch-inner-unchecked{margin-inline-start:calc(100% - 22px + 48px);margin-inline-end:calc(-100% + 22px - 48px);}.ant-switch:not(.ant-switch-disabled):active:not(.ant-switch-checked) .ant-switch-inner .ant-switch-inner-unchecked{margin-inline-start:4px;margin-inline-end:-4px;}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:-4px;margin-inline-end:4px;}.ant-switch .ant-switch-handle{position:absolute;top:2px;inset-inline-start:2px;width:18px;height:18px;transition:all 0.2s ease-in-out;}.ant-switch .ant-switch-handle::before{position:absolute;top:0;inset-inline-end:0;bottom:0;inset-inline-start:0;background-color:#fff;border-radius:9px;box-shadow:0 2px 4px 0 rgba(0, 35, 11, 0.2);transition:all 0.2s ease-in-out;content:\\"\\";}.ant-switch.ant-switch-checked .ant-switch-handle{inset-inline-start:calc(100% - 20px);}.ant-switch:not(.ant-switch-disabled):active .ant-switch-handle::before{inset-inline-end:-30%;inset-inline-start:0;}.ant-switch:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-handle::before{inset-inline-end:0;inset-inline-start:-30%;}.ant-switch .ant-switch-loading-icon.anticon{position:relative;top:2px;color:rgba(0, 0, 0, 0.65);vertical-align:top;}.ant-switch.ant-switch-checked .ant-switch-loading-icon{color:#037003;}.ant-switch.ant-switch-small{min-width:28px;height:16px;line-height:16px;}.ant-switch.ant-switch-small .ant-switch-inner{padding-inline-start:18px;padding-inline-end:6px;}.ant-switch.ant-switch-small .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:calc(-100% + 16px - 36px);margin-inline-end:calc(100% - 16px + 36px);}.ant-switch.ant-switch-small .ant-switch-inner .ant-switch-inner-unchecked{margin-top:-16px;margin-inline-start:0;margin-inline-end:0;}.ant-switch.ant-switch-small .ant-switch-handle{width:12px;height:12px;}.ant-switch.ant-switch-small .ant-switch-loading-icon{top:1.5px;font-size:9px;}.ant-switch.ant-switch-small.ant-switch-checked .ant-switch-inner{padding-inline-start:6px;padding-inline-end:18px;}.ant-switch.ant-switch-small.ant-switch-checked .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:0;margin-inline-end:0;}.ant-switch.ant-switch-small.ant-switch-checked .ant-switch-inner .ant-switch-inner-unchecked{margin-inline-start:calc(100% - 16px + 36px);margin-inline-end:calc(-100% + 16px - 36px);}.ant-switch.ant-switch-small.ant-switch-checked .ant-switch-handle{inset-inline-start:calc(100% - 14px);}.ant-switch.ant-switch-small:not(.ant-switch-disabled):active:not(.ant-switch-checked) .ant-switch-inner .ant-switch-inner-unchecked{margin-inline-start:2px;margin-inline-end:-2px;}.ant-switch.ant-switch-small:not(.ant-switch-disabled):active.ant-switch-checked .ant-switch-inner .ant-switch-inner-checked{margin-inline-start:-2px;margin-inline-end:2px;}[class^=\\"ant-table\\"],[class*=\\" ant-table\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-table\\"]::before,[class*=\\" ant-table\\"]::before,[class^=\\"ant-table\\"]::after,[class*=\\" ant-table\\"]::after{box-sizing:border-box;}[class^=\\"ant-table\\"] [class^=\\"ant-table\\"],[class*=\\" ant-table\\"] [class^=\\"ant-table\\"],[class^=\\"ant-table\\"] [class*=\\" ant-table\\"],[class*=\\" ant-table\\"] [class*=\\" ant-table\\"]{box-sizing:border-box;}[class^=\\"ant-table\\"] [class^=\\"ant-table\\"]::before,[class*=\\" ant-table\\"] [class^=\\"ant-table\\"]::before,[class^=\\"ant-table\\"] [class*=\\" ant-table\\"]::before,[class*=\\" ant-table\\"] [class*=\\" ant-table\\"]::before,[class^=\\"ant-table\\"] [class^=\\"ant-table\\"]::after,[class*=\\" ant-table\\"] [class^=\\"ant-table\\"]::after,[class^=\\"ant-table\\"] [class*=\\" ant-table\\"]::after,[class*=\\" ant-table\\"] [class*=\\" ant-table\\"]::after{box-sizing:border-box;}.ant-table-wrapper{clear:both;max-width:100%;}.ant-table-wrapper::before{display:table;content:\\"\\";}.ant-table-wrapper::after{display:table;clear:both;content:\\"\\";}.ant-table-wrapper .ant-table{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';background:#141414;border-radius:8px 8px 0 0;}.ant-table-wrapper table{width:100%;text-align:start;border-radius:8px 8px 0 0;border-collapse:separate;border-spacing:0;}.ant-table-wrapper .ant-table-thead>tr>th,.ant-table-wrapper .ant-table-tbody>tr>td,.ant-table-wrapper tfoot>tr>th,.ant-table-wrapper tfoot>tr>td{position:relative;padding:16px 16px;overflow-wrap:break-word;}.ant-table-wrapper .ant-table-title{padding:16px 16px;}.ant-table-wrapper .ant-table-thead >tr>th,.ant-table-wrapper .ant-table-thead >tr>td{position:relative;color:rgba(255, 255, 255, 0.85);font-weight:600;text-align:start;background:#1d1d1d;border-bottom:1px solid #303030;transition:background 0.2s ease;}.ant-table-wrapper .ant-table-thead >tr>th[colspan]:not([colspan='1']),.ant-table-wrapper .ant-table-thead >tr>td[colspan]:not([colspan='1']){text-align:center;}.ant-table-wrapper .ant-table-thead >tr>th:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before,.ant-table-wrapper .ant-table-thead >tr>td:not(:last-child):not(.ant-table-selection-column):not(.ant-table-row-expand-icon-cell):not([colspan])::before{position:absolute;top:50%;inset-inline-end:0;width:1px;height:1.6em;background-color:#303030;transform:translateY(-50%);transition:background-color 0.2s;content:\\"\\";}.ant-table-wrapper .ant-table-thead >tr:not(:last-child)>th[colspan]{border-bottom:0;}.ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr >td{border-top:1px solid #303030;border-bottom:transparent;}.ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr:last-child>td{border-bottom:1px solid #303030;}.ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr:first-child>td,.ant-table-wrapper .ant-table:not(.ant-table-bordered) .ant-table-tbody >tr.ant-table-measure-row+tr>td{border-top:none;border-top-color:transparent;}.ant-table-wrapper .ant-table.ant-table-bordered .ant-table-tbody >tr >td{border-bottom:1px solid #303030;}.ant-table-wrapper .ant-table-tbody >tr >td{transition:background 0.2s,border-color 0.2s;}.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-wrapper:only-child .ant-table,.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table{margin-block:-16px;margin-inline:32px -16px;}.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td,.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td{border-bottom:0;}.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td:first-child,.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td:first-child,.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td:last-child,.ant-table-wrapper .ant-table-tbody >tr >td >.ant-table-expanded-row-fixed>.ant-table-wrapper:only-child .ant-table .ant-table-tbody>tr:last-child>td:last-child{border-radius:0;}.ant-table-wrapper .ant-table-tbody >tr.ant-table-row:hover>td,.ant-table-wrapper .ant-table-tbody >tr >td.ant-table-cell-row-hover{background:#1d1d1d;}.ant-table-wrapper .ant-table-tbody >tr.ant-table-row-selected >td{background:#111911;}.ant-table-wrapper .ant-table-tbody >tr.ant-table-row-selected:hover>td{background:#0f2510;}.ant-table-wrapper .ant-table-footer{padding:16px 16px;color:rgba(255, 255, 255, 0.85);background:#1d1d1d;}.ant-table-wrapper .ant-table-pagination.ant-pagination{margin:16px 0;}.ant-table-wrapper .ant-table-pagination{display:flex;flex-wrap:wrap;row-gap:8px;}.ant-table-wrapper .ant-table-pagination >*{flex:none;}.ant-table-wrapper .ant-table-pagination-left{justify-content:flex-start;}.ant-table-wrapper .ant-table-pagination-center{justify-content:center;}.ant-table-wrapper .ant-table-pagination-right{justify-content:flex-end;}.ant-table-wrapper .ant-table-summary{position:relative;z-index:2;background:#141414;}.ant-table-wrapper .ant-table-summary >tr >th,.ant-table-wrapper .ant-table-summary >tr >td{border-bottom:1px solid #303030;}.ant-table-wrapper div.ant-table-summary{box-shadow:0 -1px 0 #303030;}.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters{outline:none;cursor:pointer;transition:all 0.3s;}.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters:hover{background:#303030;}.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters:hover::before{background-color:transparent!important;}.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters:focus-visible{color:#037003;}.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-left:hover,.ant-table-wrapper .ant-table-thead th.ant-table-column-has-sorters.ant-table-cell-fix-right:hover{background:#303030;}.ant-table-wrapper .ant-table-thead th.ant-table-column-sort{background:#303030;}.ant-table-wrapper .ant-table-thead th.ant-table-column-sort::before{background-color:transparent!important;}.ant-table-wrapper td.ant-table-column-sort{background:#1d1d1d;}.ant-table-wrapper .ant-table-column-title{position:relative;z-index:1;flex:1;}.ant-table-wrapper .ant-table-column-sorters{display:flex;flex:auto;align-items:center;justify-content:space-between;}.ant-table-wrapper .ant-table-column-sorters::after{position:absolute;inset:0;width:100%;height:100%;content:\\"\\";}.ant-table-wrapper .ant-table-column-sorter{margin-inline-start:4px;color:rgba(255, 255, 255, 0.29);font-size:0;transition:color 0.3s;}.ant-table-wrapper .ant-table-column-sorter-inner{display:inline-flex;flex-direction:column;align-items:center;}.ant-table-wrapper .ant-table-column-sorter-up,.ant-table-wrapper .ant-table-column-sorter-down{font-size:12px;}.ant-table-wrapper .ant-table-column-sorter-up.active,.ant-table-wrapper .ant-table-column-sorter-down.active{color:#037003;}.ant-table-wrapper .ant-table-column-sorter .ant-table-column-sorter-up+.ant-table-column-sorter-down{margin-top:-0.3em;}.ant-table-wrapper .ant-table-column-sorters:hover .ant-table-column-sorter{color:rgba(255, 255, 255, 0.55);}.ant-table-wrapper .ant-table-filter-column{display:flex;justify-content:space-between;}.ant-table-wrapper .ant-table-filter-trigger{position:relative;display:flex;align-items:center;margin-block:-4px;margin-inline:4px -8px;padding:0 4px;color:rgba(255, 255, 255, 0.29);font-size:12px;border-radius:6px;cursor:pointer;transition:all 0.3s;}.ant-table-wrapper .ant-table-filter-trigger:hover{color:rgba(255, 255, 255, 0.45);background:rgba(255, 255, 255, 0.12);}.ant-table-wrapper .ant-table-filter-trigger.active{color:#037003;}.ant-dropdown .ant-table-filter-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';min-width:120px;background-color:#141414;border-radius:6px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-dropdown .ant-table-filter-dropdown .ant-dropdown-menu{max-height:264px;overflow-x:hidden;border:0;box-shadow:none;}.ant-dropdown .ant-table-filter-dropdown .ant-dropdown-menu:empty::after{display:block;padding:8px 0;color:rgba(255, 255, 255, 0.25);font-size:12px;text-align:center;content:\\"Not Found\\";}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-tree{padding-block:8px 0;padding-inline:8px;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-tree .ant-tree{padding:0;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-tree .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background-color:rgba(255, 255, 255, 0.08);}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper,.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-tree .ant-tree-treenode-checkbox-checked .ant-tree-node-content-wrapper:hover{background-color:#111911;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-search{padding:8px;border-bottom:1px solid #303030;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-search-input input{min-width:140px;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-search-input .anticon{color:rgba(255, 255, 255, 0.25);}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-checkall{width:100%;margin-bottom:4px;margin-inline-start:4px;}.ant-dropdown .ant-table-filter-dropdown .ant-table-filter-dropdown-btns{display:flex;justify-content:space-between;padding:7px 8px;overflow:hidden;background-color:inherit;border-top:1px solid #303030;}.ant-dropdown .ant-table-filter-dropdown .ant-checkbox-wrapper+span,.ant-table-filter-dropdown-submenu .ant-checkbox-wrapper+span{padding-inline-start:8px;color:rgba(255, 255, 255, 0.85);}.ant-dropdown .ant-table-filter-dropdown >ul,.ant-table-filter-dropdown-submenu >ul{max-height:calc(100vh - 130px);overflow-x:hidden;overflow-y:auto;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-title{border:1px solid #303030;border-bottom:0;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container{border-inline-start:1px solid #303030;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >thead>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >thead>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >thead>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >thead>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tfoot>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tfoot>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tfoot>tr>td,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tfoot>tr>td{border-inline-end:1px solid #303030;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >thead >tr:not(:last-child)>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >thead >tr:not(:last-child)>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >thead >tr:not(:last-child)>th,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >thead >tr:not(:last-child)>th{border-bottom:1px solid #303030;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >thead >tr>th::before,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >thead >tr>th::before,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >thead >tr>th::before,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >thead >tr>th::before{background-color:transparent!important;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >thead>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >thead>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >thead>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >thead>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tbody>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tbody>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tbody>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tbody>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tfoot>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tfoot>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tfoot>tr >.ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tfoot>tr >.ant-table-cell-fix-right-first::after{border-inline-end:1px solid #303030;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tbody>tr>td >.ant-table-expanded-row-fixed,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tbody>tr>td >.ant-table-expanded-row-fixed,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tbody>tr>td >.ant-table-expanded-row-fixed,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tbody>tr>td >.ant-table-expanded-row-fixed{margin:-16px -17px;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table >tbody>tr>td >.ant-table-expanded-row-fixed::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table >tbody>tr>td >.ant-table-expanded-row-fixed::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-body >table >tbody>tr>td >.ant-table-expanded-row-fixed::after,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-summary >table >tbody>tr>td >.ant-table-expanded-row-fixed::after{position:absolute;top:0;inset-inline-end:1px;bottom:0;border-inline-end:1px solid #303030;content:\\"\\";}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-content >table,.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-container >.ant-table-header >table{border-top:1px solid #303030;}.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-scroll-horizontal >.ant-table-container>.ant-table-body >table>tbody >tr.ant-table-expanded-row >td,.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-scroll-horizontal >.ant-table-container>.ant-table-body >table>tbody >tr.ant-table-placeholder >td{border-inline-end:0;}.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-middle >.ant-table-container >.ant-table-content >table>tbody>tr>td >.ant-table-expanded-row-fixed,.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-middle >.ant-table-container >.ant-table-body >table>tbody>tr>td >.ant-table-expanded-row-fixed{margin:-12px -9px;}.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-small >.ant-table-container >.ant-table-content >table>tbody>tr>td >.ant-table-expanded-row-fixed,.ant-table-wrapper .ant-table.ant-table-bordered.ant-table-small >.ant-table-container >.ant-table-body >table>tbody>tr>td >.ant-table-expanded-row-fixed{margin:-8px -9px;}.ant-table-wrapper .ant-table.ant-table-bordered >.ant-table-footer{border:1px solid #303030;border-top:0;}.ant-table-wrapper .ant-table-cell .ant-table-container:first-child{border-top:0;}.ant-table-wrapper .ant-table-cell-scrollbar:not([rowspan]){box-shadow:0 1px 0 1px #1d1d1d;}.ant-table-wrapper .ant-table .ant-table-title,.ant-table-wrapper .ant-table .ant-table-header{border-radius:8px 8px 0 0;}.ant-table-wrapper .ant-table .ant-table-title+.ant-table-container{border-start-start-radius:0;border-start-end-radius:0;}.ant-table-wrapper .ant-table .ant-table-title+.ant-table-container table{border-radius:0;}.ant-table-wrapper .ant-table .ant-table-title+.ant-table-container table >thead>tr:first-child th:first-child{border-radius:0;}.ant-table-wrapper .ant-table .ant-table-title+.ant-table-container table >thead>tr:first-child th:last-child{border-radius:0;}.ant-table-wrapper .ant-table-container{border-start-start-radius:8px;border-start-end-radius:8px;}.ant-table-wrapper .ant-table-container table>thead>tr:first-child >*:first-child{border-start-start-radius:8px;}.ant-table-wrapper .ant-table-container table>thead>tr:first-child >*:last-child{border-start-end-radius:8px;}.ant-table-wrapper .ant-table-footer{border-radius:0 0 8px 8px;}.ant-table-wrapper .ant-table-expand-icon-col{width:48px;}.ant-table-wrapper .ant-table-row-expand-icon-cell{text-align:center;}.ant-table-wrapper .ant-table-row-expand-icon-cell .ant-table-row-expand-icon{display:inline-flex;float:none;vertical-align:sub;}.ant-table-wrapper .ant-table-row-indent{height:1px;float:left;}.ant-table-wrapper .ant-table-row-expand-icon{color:inherit;text-decoration:none;outline:none;cursor:pointer;transition:all 0.3s;position:relative;float:left;box-sizing:border-box;width:17px;height:17px;padding:0;line-height:17px;background:#141414;border:1px solid #303030;border-radius:6px;transform:scale(0.9411764705882353);user-select:none;}.ant-table-wrapper .ant-table-row-expand-icon:focus,.ant-table-wrapper .ant-table-row-expand-icon:hover{color:#15417e;}.ant-table-wrapper .ant-table-row-expand-icon:active{color:#1554ad;}.ant-table-wrapper .ant-table-row-expand-icon:focus,.ant-table-wrapper .ant-table-row-expand-icon:hover,.ant-table-wrapper .ant-table-row-expand-icon:active{border-color:currentcolor;}.ant-table-wrapper .ant-table-row-expand-icon::before,.ant-table-wrapper .ant-table-row-expand-icon::after{position:absolute;background:currentcolor;transition:transform 0.3s ease-out;content:\\"\\";}.ant-table-wrapper .ant-table-row-expand-icon::before{top:7px;inset-inline-end:3px;inset-inline-start:3px;height:1px;}.ant-table-wrapper .ant-table-row-expand-icon::after{top:3px;bottom:3px;inset-inline-start:7px;width:1px;transform:rotate(90deg);}.ant-table-wrapper .ant-table-row-expand-icon-collapsed::before{transform:rotate(-180deg);}.ant-table-wrapper .ant-table-row-expand-icon-collapsed::after{transform:rotate(0deg);}.ant-table-wrapper .ant-table-row-expand-icon-spaced{background:transparent;border:0;visibility:hidden;}.ant-table-wrapper .ant-table-row-expand-icon-spaced::before,.ant-table-wrapper .ant-table-row-expand-icon-spaced::after{display:none;content:none;}.ant-table-wrapper .ant-table-row-indent+.ant-table-row-expand-icon{margin-top:2.5px;margin-inline-end:8px;}.ant-table-wrapper tr.ant-table-expanded-row >td,.ant-table-wrapper tr.ant-table-expanded-row:hover >td{background:rgba(255, 255, 255, 0.04);}.ant-table-wrapper tr.ant-table-expanded-row .ant-descriptions-view{display:flex;}.ant-table-wrapper tr.ant-table-expanded-row .ant-descriptions-view table{flex:auto;width:auto;}.ant-table-wrapper .ant-table-expanded-row-fixed{position:relative;margin:-16px -16px;padding:16px 16px;}.ant-table-wrapper .ant-table-summary{position:relative;z-index:2;background:#141414;}.ant-table-wrapper .ant-table-summary >tr >th,.ant-table-wrapper .ant-table-summary >tr >td{border-bottom:1px solid #303030;}.ant-table-wrapper div.ant-table-summary{box-shadow:0 -1px 0 #303030;}.ant-table-wrapper .ant-table-tbody>tr.ant-table-placeholder{text-align:center;color:rgba(255, 255, 255, 0.25);}.ant-table-wrapper .ant-table-tbody>tr.ant-table-placeholder:hover>td{background:#141414;}.ant-table-wrapper .ant-table-selection-col{width:32px;}.ant-table-wrapper .ant-table-bordered .ant-table-selection-col{width:48px;}.ant-table-wrapper table tr th.ant-table-selection-column,.ant-table-wrapper table tr td.ant-table-selection-column{padding-inline-end:8px;padding-inline-start:8px;text-align:center;}.ant-table-wrapper table tr th.ant-table-selection-column .ant-radio-wrapper,.ant-table-wrapper table tr td.ant-table-selection-column .ant-radio-wrapper{margin-inline-end:0;}.ant-table-wrapper table tr th.ant-table-selection-column.ant-table-cell-fix-left{z-index:3;}.ant-table-wrapper table tr th.ant-table-selection-column::after{background-color:transparent!important;}.ant-table-wrapper .ant-table-selection{position:relative;display:inline-flex;flex-direction:column;}.ant-table-wrapper .ant-table-selection-extra{position:absolute;top:0;z-index:1;cursor:pointer;transition:all 0.3s;margin-inline-start:100%;padding-inline-start:4px;}.ant-table-wrapper .ant-table-selection-extra .anticon{color:rgba(255, 255, 255, 0.29);font-size:12px;vertical-align:baseline;}.ant-table-wrapper .ant-table-selection-extra .anticon:hover{color:rgba(255, 255, 255, 0.55);}.ant-table-wrapper .ant-table-cell-fix-left,.ant-table-wrapper .ant-table-cell-fix-right{position:sticky!important;z-index:2;background:#141414;}.ant-table-wrapper .ant-table-cell-fix-left-first::after,.ant-table-wrapper .ant-table-cell-fix-left-last::after{position:absolute;top:0;right:0;bottom:-1px;width:30px;transform:translateX(100%);transition:box-shadow 0.3s;content:\\"\\";pointer-events:none;}.ant-table-wrapper .ant-table-cell-fix-left-all::after{display:none;}.ant-table-wrapper .ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table-cell-fix-right-last::after{position:absolute;top:0;bottom:-1px;left:0;width:30px;transform:translateX(-100%);transition:box-shadow 0.3s;content:\\"\\";pointer-events:none;}.ant-table-wrapper .ant-table-container::before,.ant-table-wrapper .ant-table-container::after{position:absolute;top:0;bottom:0;z-index:4;width:30px;transition:box-shadow 0.3s;content:\\"\\";pointer-events:none;}.ant-table-wrapper .ant-table-container::before{inset-inline-start:0;}.ant-table-wrapper .ant-table-container::after{inset-inline-end:0;}.ant-table-wrapper .ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container{position:relative;}.ant-table-wrapper .ant-table-ping-left:not(.ant-table-has-fix-left) .ant-table-container::before{box-shadow:inset 10px 0 8px -8px rgba(253, 253, 253, 0.12);}.ant-table-wrapper .ant-table-ping-left .ant-table-cell-fix-left-first::after,.ant-table-wrapper .ant-table-ping-left .ant-table-cell-fix-left-last::after{box-shadow:inset 10px 0 8px -8px rgba(253, 253, 253, 0.12);}.ant-table-wrapper .ant-table-ping-left .ant-table-cell-fix-left-last::before{background-color:transparent!important;}.ant-table-wrapper .ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container{position:relative;}.ant-table-wrapper .ant-table-ping-right:not(.ant-table-has-fix-right) .ant-table-container::after{box-shadow:inset -10px 0 8px -8px rgba(253, 253, 253, 0.12);}.ant-table-wrapper .ant-table-ping-right .ant-table-cell-fix-right-first::after,.ant-table-wrapper .ant-table-ping-right .ant-table-cell-fix-right-last::after{box-shadow:inset -10px 0 8px -8px rgba(253, 253, 253, 0.12);}.ant-table-wrapper .ant-table-sticky-holder{position:sticky;z-index:3;background:#141414;}.ant-table-wrapper .ant-table-sticky-scroll{position:sticky;bottom:0;height:8px!important;z-index:3;display:flex;align-items:center;background:rgba(253, 253, 253, 0.12);border-top:1px solid #303030;opacity:0.65;}.ant-table-wrapper .ant-table-sticky-scroll:hover{transform-origin:center bottom;}.ant-table-wrapper .ant-table-sticky-scroll-bar{height:8px;background-color:rgba(255, 255, 255, 0.25);border-radius:100px;transition:all 0.3s,transform none;position:absolute;bottom:0;}.ant-table-wrapper .ant-table-sticky-scroll-bar:hover,.ant-table-wrapper .ant-table-sticky-scroll-bar-active{background-color:rgba(255, 255, 255, 0.85);}.ant-table-wrapper .ant-table-cell-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;word-break:keep-all;}.ant-table-wrapper .ant-table-cell-ellipsis.ant-table-cell-fix-left-last,.ant-table-wrapper .ant-table-cell-ellipsis.ant-table-cell-fix-right-first{overflow:visible;}.ant-table-wrapper .ant-table-cell-ellipsis.ant-table-cell-fix-left-last .ant-table-cell-content,.ant-table-wrapper .ant-table-cell-ellipsis.ant-table-cell-fix-right-first .ant-table-cell-content{display:block;overflow:hidden;text-overflow:ellipsis;}.ant-table-wrapper .ant-table-cell-ellipsis .ant-table-column-title{overflow:hidden;text-overflow:ellipsis;word-break:keep-all;}.ant-table-wrapper .ant-table.ant-table-middle{font-size:14px;}.ant-table-wrapper .ant-table.ant-table-middle .ant-table-title,.ant-table-wrapper .ant-table.ant-table-middle .ant-table-footer,.ant-table-wrapper .ant-table.ant-table-middle .ant-table-thead>tr>th,.ant-table-wrapper .ant-table.ant-table-middle .ant-table-tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-middle tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-middle tfoot>tr>td{padding:12px 8px;}.ant-table-wrapper .ant-table.ant-table-middle .ant-table-filter-trigger{margin-inline-end:-4px;}.ant-table-wrapper .ant-table.ant-table-middle .ant-table-expanded-row-fixed{margin:-12px -8px;}.ant-table-wrapper .ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin-block:-12px;margin-inline:40px -8px;}.ant-table-wrapper .ant-table.ant-table-middle .ant-table-selection-column{padding-inline-start:2px;}.ant-table-wrapper .ant-table.ant-table-small{font-size:14px;}.ant-table-wrapper .ant-table.ant-table-small .ant-table-title,.ant-table-wrapper .ant-table.ant-table-small .ant-table-footer,.ant-table-wrapper .ant-table.ant-table-small .ant-table-thead>tr>th,.ant-table-wrapper .ant-table.ant-table-small .ant-table-tbody>tr>td,.ant-table-wrapper .ant-table.ant-table-small tfoot>tr>th,.ant-table-wrapper .ant-table.ant-table-small tfoot>tr>td{padding:8px 8px;}.ant-table-wrapper .ant-table.ant-table-small .ant-table-filter-trigger{margin-inline-end:-4px;}.ant-table-wrapper .ant-table.ant-table-small .ant-table-expanded-row-fixed{margin:-8px -8px;}.ant-table-wrapper .ant-table.ant-table-small .ant-table-tbody .ant-table-wrapper:only-child .ant-table{margin-block:-8px;margin-inline:40px -8px;}.ant-table-wrapper .ant-table.ant-table-small .ant-table-selection-column{padding-inline-start:2px;}.ant-table-wrapper .ant-table-resize-handle{position:absolute;top:0;height:100%!important;bottom:0;left:auto!important;right:-8px;cursor:col-resize;touch-action:none;user-select:auto;width:16px;z-index:1;}.ant-table-wrapper .ant-table-resize-handle-line{display:block;width:1px;margin-left:7px;height:100%!important;background-color:#037003;opacity:0;}.ant-table-wrapper .ant-table-resize-handle:hover .ant-table-wrapper .ant-table-resize-handle-line{opacity:1;}.ant-table-wrapper .ant-table-resize-handle.dragging{overflow:hidden;}.ant-table-wrapper .ant-table-resize-handle.dragging .ant-table-resize-handle-line{opacity:1;}.ant-table-wrapper .ant-table-resize-handle.dragging:before{position:absolute;top:0;bottom:0;content:\\" \\";width:200vw;transform:translateX(-50%);opacity:0;}.ant-table-wrapper-rtl{direction:rtl;}.ant-table-wrapper-rtl table{direction:rtl;}.ant-table-wrapper-rtl .ant-table-pagination-left{justify-content:flex-end;}.ant-table-wrapper-rtl .ant-table-pagination-right{justify-content:flex-start;}.ant-table-wrapper-rtl .ant-table-row-expand-icon::after{transform:rotate(-90deg);}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::before{transform:rotate(180deg);}.ant-table-wrapper-rtl .ant-table-row-expand-icon-collapsed::after{transform:rotate(0deg);}[class^=\\"ant-transfer\\"],[class*=\\" ant-transfer\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-transfer\\"]::before,[class*=\\" ant-transfer\\"]::before,[class^=\\"ant-transfer\\"]::after,[class*=\\" ant-transfer\\"]::after{box-sizing:border-box;}[class^=\\"ant-transfer\\"] [class^=\\"ant-transfer\\"],[class*=\\" ant-transfer\\"] [class^=\\"ant-transfer\\"],[class^=\\"ant-transfer\\"] [class*=\\" ant-transfer\\"],[class*=\\" ant-transfer\\"] [class*=\\" ant-transfer\\"]{box-sizing:border-box;}[class^=\\"ant-transfer\\"] [class^=\\"ant-transfer\\"]::before,[class*=\\" ant-transfer\\"] [class^=\\"ant-transfer\\"]::before,[class^=\\"ant-transfer\\"] [class*=\\" ant-transfer\\"]::before,[class*=\\" ant-transfer\\"] [class*=\\" ant-transfer\\"]::before,[class^=\\"ant-transfer\\"] [class^=\\"ant-transfer\\"]::after,[class*=\\" ant-transfer\\"] [class^=\\"ant-transfer\\"]::after,[class^=\\"ant-transfer\\"] [class*=\\" ant-transfer\\"]::after,[class*=\\" ant-transfer\\"] [class*=\\" ant-transfer\\"]::after{box-sizing:border-box;}.ant-transfer{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;display:flex;align-items:stretch;}.ant-transfer .ant-transfer-disabled .ant-transfer-list{background:rgba(255, 255, 255, 0.08);}.ant-transfer .ant-transfer-list{display:flex;flex-direction:column;width:180px;height:200px;border:1px solid #424242;border-radius:8px;}.ant-transfer .ant-transfer-list-with-pagination{width:250px;height:auto;}.ant-transfer .ant-transfer-list-search .anticon-search{color:rgba(255, 255, 255, 0.25);}.ant-transfer .ant-transfer-list-header{display:flex;flex:none;align-items:center;height:40px;padding:8px 12px 9px;color:rgba(255, 255, 255, 0.85);background:#141414;border-bottom:1px solid rgba(253, 253, 253, 0.12);border-radius:8px 8px 0 0;}.ant-transfer .ant-transfer-list-header >*:not(:last-child){margin-inline-end:4px;}.ant-transfer .ant-transfer-list-header >*{flex:none;}.ant-transfer .ant-transfer-list-header-title{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:auto;text-align:end;}.ant-transfer .ant-transfer-list-header-dropdown{display:inline-flex;align-items:center;color:inherit;font-style:normal;line-height:0;text-align:center;text-transform:none;vertical-align:-0.125em;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:12px;transform:translateY(10%);cursor:pointer;}.ant-transfer .ant-transfer-list-header-dropdown >*{line-height:1;}.ant-transfer .ant-transfer-list-header-dropdown svg{display:inline-block;}.ant-transfer .ant-transfer-list-header-dropdown[disabled]{cursor:not-allowed;}.ant-transfer .ant-transfer-list-body{display:flex;flex:auto;flex-direction:column;overflow:hidden;font-size:14px;}.ant-transfer .ant-transfer-list-body-search-wrapper{position:relative;flex:none;padding:12px;}.ant-transfer .ant-transfer-list-content{flex:auto;margin:0;padding:0;overflow:auto;list-style:none;}.ant-transfer .ant-transfer-list-content-item{display:flex;align-items:center;min-height:32px;padding:5px 12px;transition:all 0.3s;}.ant-transfer .ant-transfer-list-content-item >*:not(:last-child){margin-inline-end:8px;}.ant-transfer .ant-transfer-list-content-item >*{flex:none;}.ant-transfer .ant-transfer-list-content-item-text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;flex:auto;}.ant-transfer .ant-transfer-list-content-item-remove{position:relative;color:#424242;cursor:pointer;transition:all 0.3s;}.ant-transfer .ant-transfer-list-content-item-remove:hover{color:#15417e;}.ant-transfer .ant-transfer-list-content-item-remove::after{position:absolute;insert:-5px -50%;content:\\"\\";}.ant-transfer .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background-color:rgba(255, 255, 255, 0.08);cursor:pointer;}.ant-transfer .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled).ant-transfer-list-content-item-checked:hover{background-color:#0f2510;}.ant-transfer .ant-transfer-list-content-item-checked{background-color:#111911;}.ant-transfer .ant-transfer-list-content-item-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-transfer .ant-transfer-list-content-show-remove .ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover{background:transparent;cursor:default;}.ant-transfer .ant-transfer-list-pagination{padding:8px 0;text-align:end;border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-transfer .ant-transfer-list-body-not-found{flex:none;width:100%;margin:auto 0;color:rgba(255, 255, 255, 0.25);text-align:center;}.ant-transfer .ant-transfer-list-footer{border-top:1px solid rgba(253, 253, 253, 0.12);}.ant-transfer .ant-transfer-list-checkbox{line-height:1;}.ant-transfer .ant-transfer-operation{display:flex;flex:none;flex-direction:column;align-self:center;margin:0 8px;vertical-align:middle;}.ant-transfer .ant-transfer-operation .ant-btn{display:block;}.ant-transfer .ant-transfer-operation .ant-btn:first-child{margin-bottom:4px;}.ant-transfer .ant-transfer-operation .ant-btn .anticon{font-size:12px;}.ant-transfer .ant-empty-image{max-height:-2px;}.ant-transfer-customize-list .ant-transfer-list{flex:1 1 50%;width:auto;height:auto;min-height:200px;}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small{border:0;border-radius:0;}.ant-transfer-customize-list .ant-table-wrapper .ant-table-small .ant-table-selection-column{width:40px;min-width:40px;}.ant-transfer-customize-list .ant-table-wrapper .ant-table-pagination.ant-table-pagination{margin:16px 0 4px;}.ant-transfer-customize-list .ant-input[disabled]{background-color:transparent;}.ant-transfer-status-error .ant-transfer-list{border-color:#dc4446;}.ant-transfer-status-error .ant-transfer-list-search:not([disabled]){border-color:#424242;}.ant-transfer-status-warning .ant-transfer-list{border-color:#d89614;}.ant-transfer-status-warning .ant-transfer-list-search:not([disabled]){border-color:#424242;}.ant-transfer-rtl{direction:rtl;}[class^=\\"ant-tree\\"],[class*=\\" ant-tree\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-tree\\"]::before,[class*=\\" ant-tree\\"]::before,[class^=\\"ant-tree\\"]::after,[class*=\\" ant-tree\\"]::after{box-sizing:border-box;}[class^=\\"ant-tree\\"] [class^=\\"ant-tree\\"],[class*=\\" ant-tree\\"] [class^=\\"ant-tree\\"],[class^=\\"ant-tree\\"] [class*=\\" ant-tree\\"],[class*=\\" ant-tree\\"] [class*=\\" ant-tree\\"]{box-sizing:border-box;}[class^=\\"ant-tree\\"] [class^=\\"ant-tree\\"]::before,[class*=\\" ant-tree\\"] [class^=\\"ant-tree\\"]::before,[class^=\\"ant-tree\\"] [class*=\\" ant-tree\\"]::before,[class*=\\" ant-tree\\"] [class*=\\" ant-tree\\"]::before,[class^=\\"ant-tree\\"] [class^=\\"ant-tree\\"]::after,[class*=\\" ant-tree\\"] [class^=\\"ant-tree\\"]::after,[class^=\\"ant-tree\\"] [class*=\\" ant-tree\\"]::after,[class*=\\" ant-tree\\"] [class*=\\" ant-tree\\"]::after{box-sizing:border-box;}.ant-tree .ant-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;flex-wrap:wrap;column-gap:8px;}.ant-tree .ant-tree-checkbox-group >.ant-row{flex:1;}.ant-tree .ant-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;align-items:baseline;cursor:pointer;}.ant-tree .ant-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:'\\\\a0';}.ant-tree .ant-tree-checkbox-wrapper+.ant-tree-checkbox-wrapper{margin-inline-start:0;}.ant-tree .ant-tree-checkbox-wrapper.ant-tree-checkbox-wrapper-in-form-item input[type=\\"checkbox\\"]{width:14px;height:14px;}.ant-tree .ant-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;white-space:nowrap;cursor:pointer;align-self:center;}.ant-tree .ant-tree-checkbox .ant-tree-checkbox-input{position:absolute;inset:0;z-index:1;cursor:pointer;opacity:0;margin:0;}.ant-tree .ant-tree-checkbox .ant-tree-checkbox-input:focus-visible+.ant-tree-checkbox-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree .ant-tree-checkbox .ant-tree-checkbox-inner{box-sizing:border-box;position:relative;top:0;inset-inline-start:0;display:block;width:16px;height:16px;direction:ltr;background-color:#141414;border:1px solid #424242;border-radius:4px;border-collapse:separate;transition:all 0.3s;}.ant-tree .ant-tree-checkbox .ant-tree-checkbox-inner:after{box-sizing:border-box;position:absolute;top:50%;inset-inline-start:21.5%;display:table;width:5.7142857142857135px;height:9.142857142857142px;border:2px solid #fff;border-top:0;border-inline-start:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;content:\\"\\";transition:all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6),opacity 0.1s;}.ant-tree .ant-tree-checkbox+span{padding-inline-start:8px;padding-inline-end:8px;}.ant-tree .ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after{top:50%;inset-inline-start:50%;width:8px;height:8px;background-color:#037003;border:0;transform:translate(-50%, -50%) scale(1);opacity:1;content:\\"\\";}.ant-tree .ant-tree-checkbox-wrapper:hover .ant-tree-checkbox:after{visibility:visible;}.ant-tree .ant-tree-checkbox-wrapper:not(.ant-tree-checkbox-wrapper-disabled):hover .ant-tree-checkbox-inner,.ant-tree .ant-tree-checkbox:not(.ant-tree-checkbox-disabled):hover .ant-tree-checkbox-inner{border-color:#037003;}.ant-tree .ant-tree-checkbox-wrapper:not(.ant-tree-checkbox-wrapper-disabled):hover .ant-tree-checkbox-checked:not(.ant-tree-checkbox-disabled) .ant-tree-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-tree .ant-tree-checkbox-wrapper:not(.ant-tree-checkbox-wrapper-disabled):hover .ant-tree-checkbox-checked:not(.ant-tree-checkbox-disabled):after{border-color:#198016;}.ant-tree .ant-tree-checkbox-checked .ant-tree-checkbox-inner{background-color:#037003;border-color:#037003;}.ant-tree .ant-tree-checkbox-checked .ant-tree-checkbox-inner:after{opacity:1;transform:rotate(45deg) scale(1) translate(-50%,-50%);transition:all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;}.ant-tree .ant-tree-checkbox-checked:after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-radius:4px;visibility:hidden;border:2px solid #037003;animation-name:antCheckboxEffect;animation-duration:0.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards;content:\\"\\";transition:all 0.3s;}.ant-tree .ant-tree-checkbox-wrapper-checked:not(.ant-tree-checkbox-wrapper-disabled):hover .ant-tree-checkbox-inner,.ant-tree .ant-tree-checkbox-checked:not(.ant-tree-checkbox-disabled):hover .ant-tree-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-tree .ant-tree-checkbox-wrapper-checked:not(.ant-tree-checkbox-wrapper-disabled):hover .ant-tree-checkbox:after,.ant-tree .ant-tree-checkbox-checked:not(.ant-tree-checkbox-disabled):hover .ant-tree-checkbox:after{border-color:#198016;}.ant-tree .ant-tree-checkbox-wrapper-disabled{cursor:not-allowed;}.ant-tree .ant-tree-checkbox-disabled,.ant-tree .ant-tree-checkbox-disabled .ant-tree-checkbox-input{cursor:not-allowed;pointer-events:none;}.ant-tree .ant-tree-checkbox-disabled .ant-tree-checkbox-inner{background:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-tree .ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after{border-color:rgba(255, 255, 255, 0.25);}.ant-tree .ant-tree-checkbox-disabled:after{display:none;}.ant-tree .ant-tree-checkbox-disabled+span{color:rgba(255, 255, 255, 0.25);}.ant-tree .ant-tree-checkbox-disabled.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner::after{background:rgba(255, 255, 255, 0.25);}.ant-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';background:#141414;border-radius:6px;transition:background-color 0.3s;}.ant-tree.ant-tree-rtl .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(90deg);}.ant-tree-focused:not(:hover):not(.ant-tree-active-focused){outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree .ant-tree-list-holder-inner{align-items:flex-start;}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner{align-items:stretch;}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-node-content-wrapper{flex:auto;}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging{position:relative;}.ant-tree.ant-tree-block-node .ant-tree-list-holder-inner .ant-tree-treenode.dragging:after{position:absolute;top:0;inset-inline-end:0;bottom:4px;inset-inline-start:0;border:1px solid #037003;opacity:0;animation-name:ant-tree-node-fx-do-not-use;animation-duration:0.3s;animation-play-state:running;animation-fill-mode:forwards;content:\\"\\";pointer-events:none;}.ant-tree .ant-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px 0;outline:none;}.ant-tree .ant-tree-treenode-rtl{direction:rtl;}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-tree .ant-tree-treenode-disabled .ant-tree-node-content-wrapper:hover{background:transparent;}.ant-tree .ant-tree-treenode-active .ant-tree-node-content-wrapper{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree .ant-tree-treenode:not(.ant-tree-treenode-disabled).filter-node .ant-tree-title{color:inherit;font-weight:500;}.ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon{width:24px;line-height:24px;text-align:center;visibility:visible;opacity:0.2;transition:opacity 0.3s;}.ant-tree-treenode:hover .ant-tree .ant-tree-treenode-draggable .ant-tree-draggable-icon{opacity:0.45;}.ant-tree .ant-tree-treenode-draggable.ant-tree-treenode-disabled .ant-tree-draggable-icon{visibility:hidden;}.ant-tree .ant-tree-indent{align-self:stretch;white-space:nowrap;user-select:none;}.ant-tree .ant-tree-indent-unit{display:inline-block;width:24px;}.ant-tree .ant-tree-draggable-icon{visibility:hidden;}.ant-tree .ant-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;user-select:none;}.ant-tree .ant-tree-switcher .ant-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline;}.ant-tree .ant-tree-switcher .ant-tree-switcher-icon svg{transition:transform 0.3s;}.ant-tree .ant-tree-switcher-noop{cursor:default;}.ant-tree .ant-tree-switcher_close .ant-tree-switcher-icon svg{transform:rotate(-90deg);}.ant-tree .ant-tree-switcher-loading-icon{color:#037003;}.ant-tree .ant-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%;}.ant-tree .ant-tree-switcher-leaf-line:before{position:absolute;top:0;inset-inline-end:12px;bottom:-4px;margin-inline-start:-1px;border-inline-end:1px solid #424242;content:\\"\\";}.ant-tree .ant-tree-switcher-leaf-line:after{position:absolute;width:9.600000000000001px;height:12px;border-bottom:1px solid #424242;content:\\"\\";}.ant-tree .ant-tree-checkbox{top:initial;margin-inline-end:8px;margin-block-start:4px;}.ant-tree .ant-tree-node-content-wrapper,.ant-tree .ant-tree-checkbox+span{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:6px;cursor:pointer;transition:all 0.2s,border 0s,line-height 0s,box-shadow 0s;}.ant-tree .ant-tree-node-content-wrapper:hover,.ant-tree .ant-tree-checkbox+span:hover{background-color:rgba(255, 255, 255, 0.08);}.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected,.ant-tree .ant-tree-checkbox+span.ant-tree-node-selected{background-color:#111911;}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle,.ant-tree .ant-tree-checkbox+span .ant-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top;}.ant-tree .ant-tree-node-content-wrapper .ant-tree-iconEle:empty,.ant-tree .ant-tree-checkbox+span .ant-tree-iconEle:empty{display:none;}.ant-tree .ant-tree-unselectable .ant-tree-node-content-wrapper:hover{background-color:transparent;}.ant-tree .ant-tree-node-content-wrapper{line-height:24px;user-select:none;}.ant-tree .ant-tree-node-content-wrapper .ant-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#037003;border-radius:1px;pointer-events:none;}.ant-tree .ant-tree-node-content-wrapper .ant-tree-drop-indicator:after{position:absolute;top:-3px;inset-inline-start:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #037003;border-radius:50%;content:\\"\\";}.ant-tree .ant-tree-treenode.drop-container >[draggable]{box-shadow:0 0 0 2px #037003;}.ant-tree-show-line .ant-tree-indent-unit{position:relative;height:100%;}.ant-tree-show-line .ant-tree-indent-unit:before{position:absolute;top:0;inset-inline-end:12px;bottom:-4px;border-inline-end:1px solid #424242;content:\\"\\";}.ant-tree-show-line .ant-tree-indent-unit-end:before{display:none;}.ant-tree-show-line .ant-tree-switcher{background:transparent;}.ant-tree-show-line .ant-tree-switcher-line-icon{vertical-align:-0.15em;}.ant-tree .ant-tree-treenode-leaf-last .ant-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:12px!important;}.ant-tree.ant-tree-directory .ant-tree-treenode{position:relative;}.ant-tree.ant-tree-directory .ant-tree-treenode:before{position:absolute;top:0;inset-inline-end:0;bottom:4px;inset-inline-start:0;transition:background-color 0.2s;content:\\"\\";pointer-events:none;}.ant-tree.ant-tree-directory .ant-tree-treenode:hover:before{background:rgba(255, 255, 255, 0.08);}.ant-tree.ant-tree-directory .ant-tree-treenode >*{z-index:1;}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-switcher{transition:color 0.2s;}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper{border-radius:0;user-select:none;}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper:hover{background:transparent;}.ant-tree.ant-tree-directory .ant-tree-treenode .ant-tree-node-content-wrapper.ant-tree-node-selected{color:#fff;background:transparent;}.ant-tree.ant-tree-directory .ant-tree-treenode-selected:hover::before,.ant-tree.ant-tree-directory .ant-tree-treenode-selected::before{background:#037003;}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-switcher{color:#fff;}.ant-tree.ant-tree-directory .ant-tree-treenode-selected .ant-tree-node-content-wrapper{color:#fff;background:transparent;}.ant-tree .ant-motion-collapse-legacy{overflow:hidden;}.ant-tree .ant-motion-collapse-legacy-active{transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-tree .ant-motion-collapse{overflow:hidden;transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}@keyframes ant-tree-node-fx-do-not-use{0%{opacity:0;}100%{opacity:1;}}[class^=\\"ant-tree-select\\"],[class*=\\" ant-tree-select\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-tree-select\\"]::before,[class*=\\" ant-tree-select\\"]::before,[class^=\\"ant-tree-select\\"]::after,[class*=\\" ant-tree-select\\"]::after{box-sizing:border-box;}[class^=\\"ant-tree-select\\"] [class^=\\"ant-tree-select\\"],[class*=\\" ant-tree-select\\"] [class^=\\"ant-tree-select\\"],[class^=\\"ant-tree-select\\"] [class*=\\" ant-tree-select\\"],[class*=\\" ant-tree-select\\"] [class*=\\" ant-tree-select\\"]{box-sizing:border-box;}[class^=\\"ant-tree-select\\"] [class^=\\"ant-tree-select\\"]::before,[class*=\\" ant-tree-select\\"] [class^=\\"ant-tree-select\\"]::before,[class^=\\"ant-tree-select\\"] [class*=\\" ant-tree-select\\"]::before,[class*=\\" ant-tree-select\\"] [class*=\\" ant-tree-select\\"]::before,[class^=\\"ant-tree-select\\"] [class^=\\"ant-tree-select\\"]::after,[class*=\\" ant-tree-select\\"] [class^=\\"ant-tree-select\\"]::after,[class^=\\"ant-tree-select\\"] [class*=\\" ant-tree-select\\"]::after,[class*=\\" ant-tree-select\\"] [class*=\\" ant-tree-select\\"]::after{box-sizing:border-box;}.ant-tree-select-dropdown{padding:8px 4px;}.ant-tree-select-dropdown .ant-select-tree{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';background:#1f1f1f;border-radius:6px;transition:background-color 0.3s;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-rtl .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg);}.ant-tree-select-dropdown .ant-select-tree-focused:not(:hover):not(.ant-select-tree-active-focused){outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-list-holder-inner{align-items:flex-start;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner{align-items:stretch;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-node-content-wrapper{flex:auto;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging{position:relative;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-block-node .ant-select-tree-list-holder-inner .ant-select-tree-treenode.dragging:after{position:absolute;top:0;inset-inline-end:0;bottom:4px;inset-inline-start:0;border:1px solid #037003;opacity:0;animation-name:ant-tree-node-fx-do-not-use;animation-duration:0.3s;animation-play-state:running;animation-fill-mode:forwards;content:\\"\\";pointer-events:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode{display:flex;align-items:flex-start;padding:0 0 4px 0;outline:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-rtl{direction:rtl;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-disabled .ant-select-tree-node-content-wrapper:hover{background:transparent;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-active .ant-select-tree-node-content-wrapper{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode:not(.ant-select-tree-treenode-disabled).filter-node .ant-select-tree-title{color:inherit;font-weight:500;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon{width:24px;line-height:24px;text-align:center;visibility:visible;opacity:0.2;transition:opacity 0.3s;}.ant-select-tree-treenode:hover .ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-draggable .ant-select-tree-draggable-icon{opacity:0.45;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-draggable.ant-select-tree-treenode-disabled .ant-select-tree-draggable-icon{visibility:hidden;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-indent{align-self:stretch;white-space:nowrap;user-select:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-indent-unit{display:inline-block;width:24px;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-draggable-icon{visibility:hidden;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher{position:relative;flex:none;align-self:stretch;width:24px;margin:0;line-height:24px;text-align:center;cursor:pointer;user-select:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon{display:inline-block;font-size:10px;vertical-align:baseline;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher .ant-select-tree-switcher-icon svg{transition:transform 0.3s;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher-noop{cursor:default;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(-90deg);}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher-loading-icon{color:#037003;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher-leaf-line{position:relative;z-index:1;display:inline-block;width:100%;height:100%;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher-leaf-line:before{position:absolute;top:0;inset-inline-end:12px;bottom:-4px;margin-inline-start:-1px;border-inline-end:1px solid #424242;content:\\"\\";}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-switcher-leaf-line:after{position:absolute;width:9.600000000000001px;height:12px;border-bottom:1px solid #424242;content:\\"\\";}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox{top:initial;margin-inline-end:8px;margin-block-start:4px;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper,.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox+span{position:relative;z-index:auto;min-height:24px;margin:0;padding:0 4px;color:inherit;line-height:24px;background:transparent;border-radius:6px;cursor:pointer;transition:all 0.2s,border 0s,line-height 0s,box-shadow 0s;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper:hover,.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox+span:hover{background-color:rgba(255, 255, 255, 0.08);}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected,.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox+span.ant-select-tree-node-selected{background-color:#111911;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle,.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox+span .ant-select-tree-iconEle{display:inline-block;width:24px;height:24px;line-height:24px;text-align:center;vertical-align:top;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-iconEle:empty,.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-checkbox+span .ant-select-tree-iconEle:empty{display:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-unselectable .ant-select-tree-node-content-wrapper:hover{background-color:transparent;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper{line-height:24px;user-select:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-drop-indicator{position:absolute;z-index:1;height:2px;background-color:#037003;border-radius:1px;pointer-events:none;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-node-content-wrapper .ant-select-tree-drop-indicator:after{position:absolute;top:-3px;inset-inline-start:-6px;width:8px;height:8px;background-color:transparent;border:2px solid #037003;border-radius:50%;content:\\"\\";}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode.drop-container >[draggable]{box-shadow:0 0 0 2px #037003;}.ant-tree-select-dropdown .ant-select-tree-show-line .ant-select-tree-indent-unit{position:relative;height:100%;}.ant-tree-select-dropdown .ant-select-tree-show-line .ant-select-tree-indent-unit:before{position:absolute;top:0;inset-inline-end:12px;bottom:-4px;border-inline-end:1px solid #424242;content:\\"\\";}.ant-tree-select-dropdown .ant-select-tree-show-line .ant-select-tree-indent-unit-end:before{display:none;}.ant-tree-select-dropdown .ant-select-tree-show-line .ant-select-tree-switcher{background:transparent;}.ant-tree-select-dropdown .ant-select-tree-show-line .ant-select-tree-switcher-line-icon{vertical-align:-0.15em;}.ant-tree-select-dropdown .ant-select-tree .ant-select-tree-treenode-leaf-last .ant-select-tree-switcher-leaf-line:before{top:auto!important;bottom:auto!important;height:12px!important;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode{position:relative;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode:before{position:absolute;top:0;inset-inline-end:0;bottom:4px;inset-inline-start:0;transition:background-color 0.2s;content:\\"\\";pointer-events:none;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode:hover:before{background:rgba(255, 255, 255, 0.08);}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode >*{z-index:1;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode .ant-select-tree-switcher{transition:color 0.2s;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{border-radius:0;user-select:none;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode .ant-select-tree-node-content-wrapper:hover{background:transparent;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected{color:#fff;background:transparent;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode-selected:hover::before,.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode-selected::before{background:#037003;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode-selected .ant-select-tree-switcher{color:#fff;}.ant-tree-select-dropdown .ant-select-tree.ant-select-tree-directory .ant-select-tree-treenode-selected .ant-select-tree-node-content-wrapper{color:#fff;background:transparent;}.ant-tree-select-dropdown .ant-select-tree{border-radius:0;}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner{align-items:stretch;}.ant-tree-select-dropdown .ant-select-tree-list-holder-inner .ant-select-tree-treenode .ant-select-tree-node-content-wrapper{flex:auto;}.ant-tree-select-dropdown .ant-select-tree-checkbox-group{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;flex-wrap:wrap;column-gap:8px;}.ant-tree-select-dropdown .ant-select-tree-checkbox-group >.ant-row{flex:1;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-flex;align-items:baseline;cursor:pointer;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper:after{display:inline-block;width:0;overflow:hidden;content:'\\\\a0';}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper+.ant-select-tree-checkbox-wrapper{margin-inline-start:0;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper.ant-select-tree-checkbox-wrapper-in-form-item input[type=\\"checkbox\\"]{width:14px;height:14px;}.ant-tree-select-dropdown .ant-select-tree-checkbox{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:relative;white-space:nowrap;cursor:pointer;align-self:center;}.ant-tree-select-dropdown .ant-select-tree-checkbox .ant-select-tree-checkbox-input{position:absolute;inset:0;z-index:1;cursor:pointer;opacity:0;margin:0;}.ant-tree-select-dropdown .ant-select-tree-checkbox .ant-select-tree-checkbox-input:focus-visible+.ant-select-tree-checkbox-inner{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tree-select-dropdown .ant-select-tree-checkbox .ant-select-tree-checkbox-inner{box-sizing:border-box;position:relative;top:0;inset-inline-start:0;display:block;width:16px;height:16px;direction:ltr;background-color:#141414;border:1px solid #424242;border-radius:4px;border-collapse:separate;transition:all 0.3s;}.ant-tree-select-dropdown .ant-select-tree-checkbox .ant-select-tree-checkbox-inner:after{box-sizing:border-box;position:absolute;top:50%;inset-inline-start:21.5%;display:table;width:5.7142857142857135px;height:9.142857142857142px;border:2px solid #fff;border-top:0;border-inline-start:0;transform:rotate(45deg) scale(0) translate(-50%,-50%);opacity:0;content:\\"\\";transition:all 0.1s cubic-bezier(0.71, -0.46, 0.88, 0.6),opacity 0.1s;}.ant-tree-select-dropdown .ant-select-tree-checkbox+span{padding-inline-start:8px;padding-inline-end:8px;}.ant-tree-select-dropdown .ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after{top:50%;inset-inline-start:50%;width:8px;height:8px;background-color:#037003;border:0;transform:translate(-50%, -50%) scale(1);opacity:1;content:\\"\\";}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox:after{visibility:visible;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper:not(.ant-select-tree-checkbox-wrapper-disabled):hover .ant-select-tree-checkbox-inner,.ant-tree-select-dropdown .ant-select-tree-checkbox:not(.ant-select-tree-checkbox-disabled):hover .ant-select-tree-checkbox-inner{border-color:#037003;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper:not(.ant-select-tree-checkbox-wrapper-disabled):hover .ant-select-tree-checkbox-checked:not(.ant-select-tree-checkbox-disabled) .ant-select-tree-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper:not(.ant-select-tree-checkbox-wrapper-disabled):hover .ant-select-tree-checkbox-checked:not(.ant-select-tree-checkbox-disabled):after{border-color:#198016;}.ant-tree-select-dropdown .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner{background-color:#037003;border-color:#037003;}.ant-tree-select-dropdown .ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after{opacity:1;transform:rotate(45deg) scale(1) translate(-50%,-50%);transition:all 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46) 0.1s;}.ant-tree-select-dropdown .ant-select-tree-checkbox-checked:after{position:absolute;top:0;inset-inline-start:0;width:100%;height:100%;border-radius:4px;visibility:hidden;border:2px solid #037003;animation-name:antCheckboxEffect;animation-duration:0.3s;animation-timing-function:ease-in-out;animation-fill-mode:backwards;content:\\"\\";transition:all 0.3s;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper-checked:not(.ant-select-tree-checkbox-wrapper-disabled):hover .ant-select-tree-checkbox-inner,.ant-tree-select-dropdown .ant-select-tree-checkbox-checked:not(.ant-select-tree-checkbox-disabled):hover .ant-select-tree-checkbox-inner{background-color:#198016;border-color:transparent;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper-checked:not(.ant-select-tree-checkbox-wrapper-disabled):hover .ant-select-tree-checkbox:after,.ant-tree-select-dropdown .ant-select-tree-checkbox-checked:not(.ant-select-tree-checkbox-disabled):hover .ant-select-tree-checkbox:after{border-color:#198016;}.ant-tree-select-dropdown .ant-select-tree-checkbox-wrapper-disabled{cursor:not-allowed;}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled,.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-input{cursor:not-allowed;pointer-events:none;}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner{background:rgba(255, 255, 255, 0.08);border-color:#424242;}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after{border-color:rgba(255, 255, 255, 0.25);}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled:after{display:none;}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled+span{color:rgba(255, 255, 255, 0.25);}.ant-tree-select-dropdown .ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner::after{background:rgba(255, 255, 255, 0.25);}.ant-tree-select-dropdown-rtl{direction:rtl;}.ant-tree-select-dropdown-rtl .ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-tree-switcher-icon svg{transform:rotate(90deg);}[class^=\\"ant-tabs\\"],[class*=\\" ant-tabs\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-tabs\\"]::before,[class*=\\" ant-tabs\\"]::before,[class^=\\"ant-tabs\\"]::after,[class*=\\" ant-tabs\\"]::after{box-sizing:border-box;}[class^=\\"ant-tabs\\"] [class^=\\"ant-tabs\\"],[class*=\\" ant-tabs\\"] [class^=\\"ant-tabs\\"],[class^=\\"ant-tabs\\"] [class*=\\" ant-tabs\\"],[class*=\\" ant-tabs\\"] [class*=\\" ant-tabs\\"]{box-sizing:border-box;}[class^=\\"ant-tabs\\"] [class^=\\"ant-tabs\\"]::before,[class*=\\" ant-tabs\\"] [class^=\\"ant-tabs\\"]::before,[class^=\\"ant-tabs\\"] [class*=\\" ant-tabs\\"]::before,[class*=\\" ant-tabs\\"] [class*=\\" ant-tabs\\"]::before,[class^=\\"ant-tabs\\"] [class^=\\"ant-tabs\\"]::after,[class*=\\" ant-tabs\\"] [class^=\\"ant-tabs\\"]::after,[class^=\\"ant-tabs\\"] [class*=\\" ant-tabs\\"]::after,[class*=\\" ant-tabs\\"] [class*=\\" ant-tabs\\"]::after{box-sizing:border-box;}.ant-tabs-small >.ant-tabs-nav .ant-tabs-tab{padding:8px 0;font-size:14px;}.ant-tabs-large >.ant-tabs-nav .ant-tabs-tab{padding:16px 0;font-size:16px;}.ant-tabs-card.ant-tabs-small >.ant-tabs-nav .ant-tabs-tab{padding:6px 16px;}.ant-tabs-card.ant-tabs-small.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 6px 6px;}.ant-tabs-card.ant-tabs-small.ant-tabs-top >.ant-tabs-nav .ant-tabs-tab{border-radius:6px 6px 0 0;}.ant-tabs-card.ant-tabs-small.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab{border-radius:0 6px 6px 0;}.ant-tabs-card.ant-tabs-small.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab{border-radius:6px 0 0 6px;}.ant-tabs-card.ant-tabs-large >.ant-tabs-nav .ant-tabs-tab{padding:8px 16px 6px;}.ant-tabs-rtl{direction:rtl;}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab{margin:0 0 0 32px;}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab:last-of-type{margin-left:0;}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .anticon{margin-right:0;margin-left:12px;}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove{margin-right:8px;margin-left:-4px;}.ant-tabs-rtl .ant-tabs-nav .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0;}.ant-tabs-rtl.ant-tabs-left >.ant-tabs-nav{order:1;}.ant-tabs-rtl.ant-tabs-left >.ant-tabs-content-holder{order:0;}.ant-tabs-rtl.ant-tabs-right >.ant-tabs-nav{order:0;}.ant-tabs-rtl.ant-tabs-right >.ant-tabs-content-holder{order:1;}.ant-tabs-rtl.ant-tabs-card.ant-tabs-top >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-rtl.ant-tabs-card.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-right:2px;margin-left:0;}.ant-tabs-dropdown-rtl{direction:rtl;}.ant-tabs-menu-item .ant-tabs-dropdown-rtl{text-align:right;}.ant-tabs-top,.ant-tabs-bottom{flex-direction:column;}.ant-tabs-top >.ant-tabs-nav,.ant-tabs-bottom >.ant-tabs-nav,.ant-tabs-top >div>.ant-tabs-nav,.ant-tabs-bottom >div>.ant-tabs-nav{margin:0 0 16px 0;}.ant-tabs-top >.ant-tabs-nav::before,.ant-tabs-bottom >.ant-tabs-nav::before,.ant-tabs-top >div>.ant-tabs-nav::before,.ant-tabs-bottom >div>.ant-tabs-nav::before{position:absolute;right:0;left:0;border-bottom:1px solid rgba(253, 253, 253, 0.12);content:'';}.ant-tabs-top >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-ink-bar{height:2px;}.ant-tabs-top >.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:width 0.3s,left 0.3s,right 0.3s;}.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap::after{top:0;bottom:0;width:32px;}.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap::before{left:0;box-shadow:inset 10px 0 8px -8px rgba(0, 0, 0, 0.08);}.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap::after{right:0;box-shadow:inset -10px 0 8px -8px rgba(0, 0, 0, 0.08);}.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-left::before{opacity:1;}.ant-tabs-top >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-right::after{opacity:1;}.ant-tabs-top >.ant-tabs-nav::before,.ant-tabs-top >div>.ant-tabs-nav::before{bottom:0;}.ant-tabs-top >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-ink-bar{bottom:0;}.ant-tabs-bottom >.ant-tabs-nav,.ant-tabs-bottom >div>.ant-tabs-nav{order:1;margin-top:16px;margin-bottom:0;}.ant-tabs-bottom >.ant-tabs-nav::before,.ant-tabs-bottom >div>.ant-tabs-nav::before{top:0;}.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-ink-bar{top:0;}.ant-tabs-bottom >.ant-tabs-content-holder,.ant-tabs-bottom >div>.ant-tabs-content-holder{order:0;}.ant-tabs-left >.ant-tabs-nav,.ant-tabs-right >.ant-tabs-nav,.ant-tabs-left >div>.ant-tabs-nav,.ant-tabs-right >div>.ant-tabs-nav{flex-direction:column;min-width:40px;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-tab,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-tab{padding:8px 24px;text-align:center;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin:16px 0 0 0;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap{flex-direction:column;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap::after{right:0;left:0;height:32px;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap::before{top:0;box-shadow:inset 0 10px 8px -8px rgba(0, 0, 0, 0.08);}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap::after{bottom:0;box-shadow:inset 0 -10px 8px -8px rgba(0, 0, 0, 0.08);}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-top::before{opacity:1;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-wrap.ant-tabs-nav-wrap-ping-bottom::after{opacity:1;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-ink-bar{width:2px;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right >.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-ink-bar-animated,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-ink-bar-animated{transition:height 0.3s,top 0.3s;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs-left >.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right >.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-nav-operations{flex:1 0 auto;flex-direction:column;}.ant-tabs-left >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-ink-bar{right:0;}.ant-tabs-left >.ant-tabs-content-holder,.ant-tabs-left >div>.ant-tabs-content-holder{margin-left:-1px;border-left:1px solid #424242;}.ant-tabs-left >.ant-tabs-content-holder >.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-left >div>.ant-tabs-content-holder >.ant-tabs-content>.ant-tabs-tabpane{padding-left:24px;}.ant-tabs-right >.ant-tabs-nav,.ant-tabs-right >div>.ant-tabs-nav{order:1;}.ant-tabs-right >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-ink-bar{left:0;}.ant-tabs-right >.ant-tabs-content-holder,.ant-tabs-right >div>.ant-tabs-content-holder{order:0;margin-right:-1px;border-right:1px solid #424242;}.ant-tabs-right >.ant-tabs-content-holder >.ant-tabs-content>.ant-tabs-tabpane,.ant-tabs-right >div>.ant-tabs-content-holder >.ant-tabs-content>.ant-tabs-tabpane{padding-right:24px;}.ant-tabs-dropdown{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:absolute;top:-9999px;left:-9999px;z-index:1050;display:block;}.ant-tabs-dropdown-hidden{display:none;}.ant-tabs-dropdown .ant-tabs-dropdown-menu{max-height:200px;margin:0;padding:4px 0;overflow-x:hidden;overflow-y:auto;text-align:left;list-style-type:none;background-color:#141414;background-clip:padding-box;border-radius:8px;outline:none;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;display:flex;align-items:center;min-width:120px;margin:0;padding:4px 12px;color:rgba(255, 255, 255, 0.85);font-weight:normal;font-size:14px;line-height:1.5714285714285714;cursor:pointer;transition:all 0.3s;}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item >span{flex:1;white-space:nowrap;}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item-remove{flex:none;margin-left:12px;color:rgba(255, 255, 255, 0.45);font-size:12px;background:transparent;border:0;cursor:pointer;}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item-remove:hover{color:#198016;}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item:hover{background:rgba(255, 255, 255, 0.08);}.ant-tabs-dropdown .ant-tabs-dropdown-menu-item-disabled,.ant-tabs-dropdown .ant-tabs-dropdown-menu-item-disabled:hover{color:rgba(255, 255, 255, 0.25);background:transparent;cursor:not-allowed;}.ant-tabs-card >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card >div>.ant-tabs-nav .ant-tabs-tab{margin:0;padding:8px 16px;background:rgba(255, 255, 255, 0.04);border:1px solid rgba(253, 253, 253, 0.12);transition:all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-tabs-card >.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card >div>.ant-tabs-nav .ant-tabs-tab-active{color:#037003;background:#141414;}.ant-tabs-card >.ant-tabs-nav .ant-tabs-ink-bar,.ant-tabs-card >div>.ant-tabs-nav .ant-tabs-ink-bar{visibility:hidden;}.ant-tabs-card.ant-tabs-top >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-left:2px;}.ant-tabs-card.ant-tabs-top >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-tab{border-radius:8px 8px 0 0;}.ant-tabs-card.ant-tabs-top >.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-top >div>.ant-tabs-nav .ant-tabs-tab-active{border-bottom-color:#141414;}.ant-tabs-card.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 0 8px 8px;}.ant-tabs-card.ant-tabs-bottom >.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-bottom >div>.ant-tabs-nav .ant-tabs-tab-active{border-top-color:#141414;}.ant-tabs-card.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab,.ant-tabs-card.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-tab+.ant-tabs-tab{margin-top:2px;}.ant-tabs-card.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-tab{border-radius:8px 0 0 8px;}.ant-tabs-card.ant-tabs-left >.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-left >div>.ant-tabs-nav .ant-tabs-tab-active{border-right-color:#141414;}.ant-tabs-card.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab,.ant-tabs-card.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-tab{border-radius:0 8px 8px 0;}.ant-tabs-card.ant-tabs-right >.ant-tabs-nav .ant-tabs-tab-active,.ant-tabs-card.ant-tabs-right >div>.ant-tabs-nav .ant-tabs-tab-active{border-left-color:#141414;}.ant-tabs{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;}.ant-tabs >.ant-tabs-nav,.ant-tabs >div>.ant-tabs-nav{position:relative;display:flex;flex:none;align-items:center;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-wrap,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-wrap{position:relative;display:flex;flex:auto;align-self:stretch;overflow:hidden;white-space:nowrap;transform:translate(0);}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-wrap::before,.ant-tabs >.ant-tabs-nav .ant-tabs-nav-wrap::after,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-wrap::after{position:absolute;z-index:1;opacity:0;transition:opacity 0.3s;content:'';pointer-events:none;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-list,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-list{position:relative;display:flex;transition:opacity 0.3s;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-operations,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-operations{display:flex;align-self:stretch;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-operations-hidden,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-operations-hidden{position:absolute;visibility:hidden;pointer-events:none;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-more,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-more{position:relative;padding:8px 16px;background:transparent;border:0;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-more::after,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-more::after{position:absolute;right:0;bottom:0;left:0;height:5px;transform:translateY(100%);content:'';}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-add,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-add{min-width:40px;margin-left:2px;padding:0 8px;background:transparent;border:1px solid rgba(253, 253, 253, 0.12);border-radius:8px 8px 0 0;outline:none;cursor:pointer;color:rgba(255, 255, 255, 0.85);transition:all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-add:hover,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-add:hover{color:#198016;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-add:active,.ant-tabs >.ant-tabs-nav .ant-tabs-nav-add:focus:not(:focus-visible),.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-add:focus:not(:focus-visible){color:#075a07;}.ant-tabs >.ant-tabs-nav .ant-tabs-nav-add:focus-visible,.ant-tabs >div>.ant-tabs-nav .ant-tabs-nav-add:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tabs .ant-tabs-extra-content{flex:none;}.ant-tabs .ant-tabs-ink-bar{position:absolute;background:#037003;pointer-events:none;}.ant-tabs .ant-tabs-tab{position:relative;display:inline-flex;align-items:center;padding:12px 0;font-size:14px;background:transparent;border:0;outline:none;cursor:pointer;}.ant-tabs .ant-tabs-tab-btn:focus:not(:focus-visible),.ant-tabs .ant-tabs-tab-remove:focus:not(:focus-visible),.ant-tabs .ant-tabs-tab-btn:active,.ant-tabs .ant-tabs-tab-remove:active{color:#075a07;}.ant-tabs .ant-tabs-tab-btn:focus-visible,.ant-tabs .ant-tabs-tab-remove:focus-visible{outline:2px solid #0e340e;outline-offset:1px;transition:outline-offset 0s,outline 0s;}.ant-tabs .ant-tabs-tab-btn{outline:none;transition:all 0.3s;}.ant-tabs .ant-tabs-tab-remove{flex:none;margin-right:-4px;margin-left:8px;color:rgba(255, 255, 255, 0.45);font-size:12px;background:transparent;border:none;outline:none;cursor:pointer;transition:all 0.3s;}.ant-tabs .ant-tabs-tab-remove:hover{color:rgba(255, 255, 255, 0.85);}.ant-tabs .ant-tabs-tab:hover{color:#198016;}.ant-tabs .ant-tabs-tab.ant-tabs-tab-active .ant-tabs-tab-btn{color:#037003;text-shadow:0 0 0.25px currentcolor;}.ant-tabs .ant-tabs-tab.ant-tabs-tab-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-tabs .ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:focus,.ant-tabs .ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-remove:focus,.ant-tabs .ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-tab-btn:active,.ant-tabs .ant-tabs-tab.ant-tabs-tab-disabled .ant-tabs-remove:active{color:rgba(255, 255, 255, 0.25);}.ant-tabs .ant-tabs-tab .ant-tabs-tab-remove .anticon{margin:0;}.ant-tabs .ant-tabs-tab .anticon{margin-right:12px;}.ant-tabs .ant-tabs-tab+.ant-tabs-tab{margin:0 0 0 32px;}.ant-tabs .ant-tabs-content{position:relative;display:flex;width:100%;}.ant-tabs .ant-tabs-content-animated{transition:margin 0.3s;}.ant-tabs .ant-tabs-content-holder{flex:auto;min-width:0;min-height:0;}.ant-tabs .ant-tabs-tabpane{outline:none;flex:none;width:100%;}.ant-tabs-centered >.ant-tabs-nav .ant-tabs-nav-wrap:not([class*='.ant-tabs-nav-wrap-ping']),.ant-tabs-centered >div>.ant-tabs-nav .ant-tabs-nav-wrap:not([class*='.ant-tabs-nav-wrap-ping']){justify-content:center;}.ant-tabs .ant-tabs-switch-appear,.ant-tabs .ant-tabs-switch-enter{transition:none;}.ant-tabs .ant-tabs-switch-appear-start,.ant-tabs .ant-tabs-switch-enter-start{opacity:0;}.ant-tabs .ant-tabs-switch-appear-active,.ant-tabs .ant-tabs-switch-enter-active{opacity:1;transition:opacity 0.3s;}.ant-tabs .ant-tabs-switch-leave{position:absolute;transition:none;inset:0;}.ant-tabs .ant-tabs-switch-leave-start{opacity:1;}.ant-tabs .ant-tabs-switch-leave-active{opacity:0;transition:opacity 0.3s;}.ant-slide-up-enter,.ant-slide-up-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-up-enter.ant-slide-up-enter-active,.ant-slide-up-appear.ant-slide-up-appear-active{animation-name:antSlideUpIn;animation-play-state:running;}.ant-slide-up-leave.ant-slide-up-leave-active{animation-name:antSlideUpOut;animation-play-state:running;pointer-events:none;}.ant-slide-up-enter,.ant-slide-up-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-up-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}.ant-slide-down-enter,.ant-slide-down-appear{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-leave{animation-duration:0.2s;animation-fill-mode:both;animation-play-state:paused;}.ant-slide-down-enter.ant-slide-down-enter-active,.ant-slide-down-appear.ant-slide-down-appear-active{animation-name:antSlideDownIn;animation-play-state:running;}.ant-slide-down-leave.ant-slide-down-leave-active{animation-name:antSlideDownOut;animation-play-state:running;pointer-events:none;}.ant-slide-down-enter,.ant-slide-down-appear{transform:scale(0);transform-origin:0% 0%;opacity:0;animation-timing-function:cubic-bezier(0.23, 1, 0.32, 1);}.ant-slide-down-leave{animation-timing-function:cubic-bezier(0.755, 0.05, 0.855, 0.06);}[class^=\\"ant-tag\\"],[class*=\\" ant-tag\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-tag\\"]::before,[class*=\\" ant-tag\\"]::before,[class^=\\"ant-tag\\"]::after,[class*=\\" ant-tag\\"]::after{box-sizing:border-box;}[class^=\\"ant-tag\\"] [class^=\\"ant-tag\\"],[class*=\\" ant-tag\\"] [class^=\\"ant-tag\\"],[class^=\\"ant-tag\\"] [class*=\\" ant-tag\\"],[class*=\\" ant-tag\\"] [class*=\\" ant-tag\\"]{box-sizing:border-box;}[class^=\\"ant-tag\\"] [class^=\\"ant-tag\\"]::before,[class*=\\" ant-tag\\"] [class^=\\"ant-tag\\"]::before,[class^=\\"ant-tag\\"] [class*=\\" ant-tag\\"]::before,[class*=\\" ant-tag\\"] [class*=\\" ant-tag\\"]::before,[class^=\\"ant-tag\\"] [class^=\\"ant-tag\\"]::after,[class*=\\" ant-tag\\"] [class^=\\"ant-tag\\"]::after,[class^=\\"ant-tag\\"] [class*=\\" ant-tag\\"]::after,[class*=\\" ant-tag\\"] [class*=\\" ant-tag\\"]::after{box-sizing:border-box;}.ant-tag{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:12px;line-height:20px;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-block;height:auto;margin-inline-end:8px;padding-inline:7px;white-space:nowrap;background:rgba(255, 255, 255, 0.04);border:1px solid #424242;border-radius:4px;opacity:1;transition:all 0.2s;text-align:start;}.ant-tag.ant-tag-rtl{direction:rtl;}.ant-tag,.ant-tag a,.ant-tag a:hover{color:rgba(255, 255, 255, 0.85);}.ant-tag .ant-tag-close-icon{margin-inline-start:3px;color:rgba(255, 255, 255, 0.45);font-size:10px;cursor:pointer;transition:all 0.2s;}.ant-tag .ant-tag-close-icon:hover{color:rgba(255, 255, 255, 0.85);}.ant-tag.ant-tag-has-color{border-color:transparent;}.ant-tag.ant-tag-has-color,.ant-tag.ant-tag-has-color a,.ant-tag.ant-tag-has-color a:hover,.ant-tag.ant-tag-has-color .anticon-close,.ant-tag.ant-tag-has-color .anticon-close:hover{color:#fff;}.ant-tag-checkable{background-color:transparent;border-color:transparent;cursor:pointer;}.ant-tag-checkable:not(.ant-tag-checkable-checked):hover{color:#037003;background-color:rgba(255, 255, 255, 0.12);}.ant-tag-checkable:active,.ant-tag-checkable-checked{color:#fff;}.ant-tag-checkable-checked{background-color:#037003;}.ant-tag-checkable-checked:hover{background-color:#198016;}.ant-tag-checkable:active{background-color:#075a07;}.ant-tag-hidden{display:none;}.ant-tag >.anticon+span,.ant-tag >span+.anticon{margin-inline-start:7px;}.ant-tag-borderless{border-color:transparent;background:rgba(255, 255, 255, 0.08);}.ant-tag-blue{color:#3c89e8;background:#111a2c;border-color:#15325b;}.ant-tag-blue-inverse{color:#fff;background:#1668dc;border-color:#1668dc;}.ant-tag-blue.ant-tag-borderless{border-color:transparent;}.ant-tag-purple{color:#854eca;background:#1a1325;border-color:#301c4d;}.ant-tag-purple-inverse{color:#fff;background:#642ab5;border-color:#642ab5;}.ant-tag-purple.ant-tag-borderless{border-color:transparent;}.ant-tag-cyan{color:#33bcb7;background:#112123;border-color:#144848;}.ant-tag-cyan-inverse{color:#fff;background:#13a8a8;border-color:#13a8a8;}.ant-tag-cyan.ant-tag-borderless{border-color:transparent;}.ant-tag-green{color:#6abe39;background:#162312;border-color:#274916;}.ant-tag-green-inverse{color:#fff;background:#49aa19;border-color:#49aa19;}.ant-tag-green.ant-tag-borderless{border-color:transparent;}.ant-tag-magenta{color:#e0529c;background:#291321;border-color:#551c3b;}.ant-tag-magenta-inverse{color:#fff;background:#cb2b83;border-color:#cb2b83;}.ant-tag-magenta.ant-tag-borderless{border-color:transparent;}.ant-tag-pink{color:#e0529c;background:#291321;border-color:#551c3b;}.ant-tag-pink-inverse{color:#fff;background:#cb2b83;border-color:#cb2b83;}.ant-tag-pink.ant-tag-borderless{border-color:transparent;}.ant-tag-red{color:#e84749;background:#2a1215;border-color:#58181c;}.ant-tag-red-inverse{color:#fff;background:#d32029;border-color:#d32029;}.ant-tag-red.ant-tag-borderless{border-color:transparent;}.ant-tag-orange{color:#e89a3c;background:#2b1d11;border-color:#593815;}.ant-tag-orange-inverse{color:#fff;background:#d87a16;border-color:#d87a16;}.ant-tag-orange.ant-tag-borderless{border-color:transparent;}.ant-tag-yellow{color:#e8d639;background:#2b2611;border-color:#595014;}.ant-tag-yellow-inverse{color:#fff;background:#d8bd14;border-color:#d8bd14;}.ant-tag-yellow.ant-tag-borderless{border-color:transparent;}.ant-tag-volcano{color:#e87040;background:#2b1611;border-color:#592716;}.ant-tag-volcano-inverse{color:#fff;background:#d84a1b;border-color:#d84a1b;}.ant-tag-volcano.ant-tag-borderless{border-color:transparent;}.ant-tag-geekblue{color:#5273e0;background:#131629;border-color:#1c2755;}.ant-tag-geekblue-inverse{color:#fff;background:#2b4acb;border-color:#2b4acb;}.ant-tag-geekblue.ant-tag-borderless{border-color:transparent;}.ant-tag-lime{color:#a9d134;background:#1f2611;border-color:#3e4f13;}.ant-tag-lime-inverse{color:#fff;background:#8bbb11;border-color:#8bbb11;}.ant-tag-lime.ant-tag-borderless{border-color:transparent;}.ant-tag-gold{color:#e8b339;background:#2b2111;border-color:#594214;}.ant-tag-gold-inverse{color:#fff;background:#d89614;border-color:#d89614;}.ant-tag-gold.ant-tag-borderless{border-color:transparent;}.ant-tag-success{color:#49aa19;background:#162312;border-color:#274916;}.ant-tag-success.ant-tag-borderless{border-color:transparent;}.ant-tag-processing{color:#1668dc;background:#111a2c;border-color:#15325b;}.ant-tag-processing.ant-tag-borderless{border-color:transparent;}.ant-tag-error{color:#dc4446;background:#2c1618;border-color:#5b2526;}.ant-tag-error.ant-tag-borderless{border-color:transparent;}.ant-tag-warning{color:#d89614;background:#2b2111;border-color:#594214;}.ant-tag-warning.ant-tag-borderless{border-color:transparent;}[class^=\\"ant-timeline\\"],[class*=\\" ant-timeline\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-timeline\\"]::before,[class*=\\" ant-timeline\\"]::before,[class^=\\"ant-timeline\\"]::after,[class*=\\" ant-timeline\\"]::after{box-sizing:border-box;}[class^=\\"ant-timeline\\"] [class^=\\"ant-timeline\\"],[class*=\\" ant-timeline\\"] [class^=\\"ant-timeline\\"],[class^=\\"ant-timeline\\"] [class*=\\" ant-timeline\\"],[class*=\\" ant-timeline\\"] [class*=\\" ant-timeline\\"]{box-sizing:border-box;}[class^=\\"ant-timeline\\"] [class^=\\"ant-timeline\\"]::before,[class*=\\" ant-timeline\\"] [class^=\\"ant-timeline\\"]::before,[class^=\\"ant-timeline\\"] [class*=\\" ant-timeline\\"]::before,[class*=\\" ant-timeline\\"] [class*=\\" ant-timeline\\"]::before,[class^=\\"ant-timeline\\"] [class^=\\"ant-timeline\\"]::after,[class*=\\" ant-timeline\\"] [class^=\\"ant-timeline\\"]::after,[class^=\\"ant-timeline\\"] [class*=\\" ant-timeline\\"]::after,[class*=\\" ant-timeline\\"] [class*=\\" ant-timeline\\"]::after{box-sizing:border-box;}.ant-timeline{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-timeline .ant-timeline-item{position:relative;margin:0;padding-bottom:20px;font-size:14px;list-style:none;}.ant-timeline .ant-timeline-item-tail{position:absolute;inset-block-start:10px;inset-inline-start:4px;height:calc(100% - 10px);border-inline-start:2px solid rgba(253, 253, 253, 0.12);}.ant-timeline .ant-timeline-item-pending .ant-timeline-item-head{font-size:12px;background-color:transparent;}.ant-timeline .ant-timeline-item-pending .ant-timeline-item-tail{display:none;}.ant-timeline .ant-timeline-item-head{position:absolute;width:10px;height:10px;background-color:#141414;border:3px solid transparent;border-radius:50%;}.ant-timeline .ant-timeline-item-head-blue{color:#037003;border-color:#037003;}.ant-timeline .ant-timeline-item-head-red{color:#dc4446;border-color:#dc4446;}.ant-timeline .ant-timeline-item-head-green{color:#49aa19;border-color:#49aa19;}.ant-timeline .ant-timeline-item-head-gray{color:rgba(255, 255, 255, 0.25);border-color:rgba(255, 255, 255, 0.25);}.ant-timeline .ant-timeline-item-head-custom{position:absolute;inset-block-start:5px;inset-inline-start:5px;width:auto;height:auto;margin-block-start:0;padding-block:4px;line-height:1;text-align:center;border:0;border-radius:0;transform:translate(-50%, -50%);}.ant-timeline .ant-timeline-item-content{position:relative;inset-block-start:-7px;margin-inline-start:26px;margin-inline-end:0;margin-block-start:0;margin-block-end:0;word-break:break-word;}.ant-timeline .ant-timeline-item-last >.ant-timeline-item-tail{display:none;}.ant-timeline .ant-timeline-item-last >.ant-timeline-item-content{min-height:48px;}.ant-timeline.ant-timeline-alternate .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-label .ant-timeline-item-tail,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head,.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{inset-inline-start:50%;}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-head,.ant-timeline.ant-timeline-label .ant-timeline-item-head{margin-inline-start:-4px;}.ant-timeline.ant-timeline-alternate .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-right .ant-timeline-item-head-custom,.ant-timeline.ant-timeline-label .ant-timeline-item-head-custom{margin-inline-start:1px;}.ant-timeline.ant-timeline-alternate .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-left .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-left .ant-timeline-item-content{inset-inline-start:calc(50% - 4px);width:calc(50% - 12px);text-align:start;}.ant-timeline.ant-timeline-alternate .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content,.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-content{width:calc(50% - 12px);margin:0;text-align:end;}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-tail,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head,.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-head-custom{inset-inline-start:calc(100% - 6px);}.ant-timeline.ant-timeline-right .ant-timeline-item-right .ant-timeline-item-content{width:calc(100% - 18px);}.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail{display:block;height:calc(100% - 16px);border-inline-start:2px dotted rgba(253, 253, 253, 0.12);}.ant-timeline.ant-timeline-reverse .ant-timeline-item-last .ant-timeline-item-tail{display:none;}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail{inset-block-start:16px;display:block;height:calc(100% - 16px);border-inline-start:2px dotted rgba(253, 253, 253, 0.12);}.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-content{min-height:48px;}.ant-timeline.ant-timeline-label .ant-timeline-item-label{position:absolute;inset-block-start:-6px;width:calc(50% - 12px);text-align:end;}.ant-timeline.ant-timeline-label .ant-timeline-item-right .ant-timeline-item-label{inset-inline-start:calc(50% + 12px);width:calc(50% - 12px);text-align:start;}.ant-timeline-rtl{direction:rtl;}.ant-timeline-rtl .ant-timeline-item-head-custom{transform:translate(50%, -50%);}[class^=\\"ant-typography\\"],[class*=\\" ant-typography\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-typography\\"]::before,[class*=\\" ant-typography\\"]::before,[class^=\\"ant-typography\\"]::after,[class*=\\" ant-typography\\"]::after{box-sizing:border-box;}[class^=\\"ant-typography\\"] [class^=\\"ant-typography\\"],[class*=\\" ant-typography\\"] [class^=\\"ant-typography\\"],[class^=\\"ant-typography\\"] [class*=\\" ant-typography\\"],[class*=\\" ant-typography\\"] [class*=\\" ant-typography\\"]{box-sizing:border-box;}[class^=\\"ant-typography\\"] [class^=\\"ant-typography\\"]::before,[class*=\\" ant-typography\\"] [class^=\\"ant-typography\\"]::before,[class^=\\"ant-typography\\"] [class*=\\" ant-typography\\"]::before,[class*=\\" ant-typography\\"] [class*=\\" ant-typography\\"]::before,[class^=\\"ant-typography\\"] [class^=\\"ant-typography\\"]::after,[class*=\\" ant-typography\\"] [class^=\\"ant-typography\\"]::after,[class^=\\"ant-typography\\"] [class*=\\" ant-typography\\"]::after,[class*=\\" ant-typography\\"] [class*=\\" ant-typography\\"]::after{box-sizing:border-box;}.ant-typography{color:rgba(255, 255, 255, 0.85);word-break:break-word;line-height:1.5714285714285714;}.ant-typography.ant-typography-secondary{color:rgba(255, 255, 255, 0.45);}.ant-typography.ant-typography-success{color:#49aa19;}.ant-typography.ant-typography-warning{color:#d89614;}.ant-typography.ant-typography-danger{color:#dc4446;}a.ant-typography.ant-typography-danger:active,a.ant-typography.ant-typography-danger:focus{color:#ad393a;}a.ant-typography.ant-typography-danger:hover{color:#e86e6b;}.ant-typography.ant-typography-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;user-select:none;}div.ant-typography,.ant-typography p{margin-bottom:1em;}h1.ant-typography,div.ant-typography-h1,div.ant-typography-h1>textarea,.ant-typography h1{margin-bottom:0.5em;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:38px;line-height:1.2105263157894737;}h2.ant-typography,div.ant-typography-h2,div.ant-typography-h2>textarea,.ant-typography h2{margin-bottom:0.5em;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:30px;line-height:1.2666666666666666;}h3.ant-typography,div.ant-typography-h3,div.ant-typography-h3>textarea,.ant-typography h3{margin-bottom:0.5em;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:24px;line-height:1.3333333333333333;}h4.ant-typography,div.ant-typography-h4,div.ant-typography-h4>textarea,.ant-typography h4{margin-bottom:0.5em;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:20px;line-height:1.4;}h5.ant-typography,div.ant-typography-h5,div.ant-typography-h5>textarea,.ant-typography h5{margin-bottom:0.5em;color:rgba(255, 255, 255, 0.85);font-weight:600;font-size:16px;line-height:1.5;}.ant-typography+h1.ant-typography,.ant-typography+h2.ant-typography,.ant-typography+h3.ant-typography,.ant-typography+h4.ant-typography,.ant-typography+h5.ant-typography{margin-top:1.2em;}.ant-typography div +h1,.ant-typography ul +h1,.ant-typography li +h1,.ant-typography p +h1,.ant-typography h1 +h1,.ant-typography h2 +h1,.ant-typography h3 +h1,.ant-typography h4 +h1,.ant-typography h5 +h1,.ant-typography div +h2,.ant-typography ul +h2,.ant-typography li +h2,.ant-typography p +h2,.ant-typography h1 +h2,.ant-typography h2 +h2,.ant-typography h3 +h2,.ant-typography h4 +h2,.ant-typography h5 +h2,.ant-typography div +h3,.ant-typography ul +h3,.ant-typography li +h3,.ant-typography p +h3,.ant-typography h1 +h3,.ant-typography h2 +h3,.ant-typography h3 +h3,.ant-typography h4 +h3,.ant-typography h5 +h3,.ant-typography div +h4,.ant-typography ul +h4,.ant-typography li +h4,.ant-typography p +h4,.ant-typography h1 +h4,.ant-typography h2 +h4,.ant-typography h3 +h4,.ant-typography h4 +h4,.ant-typography h5 +h4,.ant-typography div +h5,.ant-typography ul +h5,.ant-typography li +h5,.ant-typography p +h5,.ant-typography h1 +h5,.ant-typography h2 +h5,.ant-typography h3 +h5,.ant-typography h4 +h5,.ant-typography h5 +h5{margin-top:1.2em;}.ant-typography code{margin:0 0.2em;padding-inline:0.4em;padding-block:0.2em 0.1em;font-size:85%;background:rgba(150, 150, 150, 0.1);border:1px solid rgba(100, 100, 100, 0.2);border-radius:3px;}.ant-typography kbd{margin:0 0.2em;padding-inline:0.4em;padding-block:0.15em 0.1em;font-size:90%;background:rgba(150, 150, 150, 0.06);border:1px solid rgba(100, 100, 100, 0.2);border-bottom-width:2px;border-radius:3px;}.ant-typography mark{padding:0;background-color:#ffe58f;}.ant-typography u,.ant-typography ins{text-decoration:underline;text-decoration-skip-ink:auto;}.ant-typography s,.ant-typography del{text-decoration:line-through;}.ant-typography strong{font-weight:600;}.ant-typography ul,.ant-typography ol{margin-inline:0;margin-block:0 1em;padding:0;}.ant-typography ul li,.ant-typography ol li{margin-inline:20px 0;margin-block:0;padding-inline:4px 0;padding-block:0;}.ant-typography ul{list-style-type:circle;}.ant-typography ul ul{list-style-type:disc;}.ant-typography ol{list-style-type:decimal;}.ant-typography pre,.ant-typography blockquote{margin:1em 0;}.ant-typography pre{padding:0.4em 0.6em;white-space:pre-wrap;word-wrap:break-word;background:rgba(150, 150, 150, 0.1);border:1px solid rgba(100, 100, 100, 0.2);border-radius:3px;}.ant-typography pre code{display:inline;margin:0;padding:0;font-size:inherit;font-family:inherit;background:transparent;border:0;}.ant-typography blockquote{padding-inline:0.6em 0;padding-block:0;border-inline-start:4px solid rgba(100, 100, 100, 0.2);opacity:0.85;}a.ant-typography,.ant-typography a{color:#1668dc;text-decoration:none;outline:none;cursor:pointer;transition:color 0.3s;}a.ant-typography:focus,.ant-typography a:focus,a.ant-typography:hover,.ant-typography a:hover{color:#15417e;}a.ant-typography:active,.ant-typography a:active{color:#1554ad;}a.ant-typography:active,.ant-typography a:active,a.ant-typography:hover,.ant-typography a:hover{text-decoration:none;}a.ant-typography[disabled],.ant-typography a[disabled],a.ant-typography.ant-typography-disabled,.ant-typography a.ant-typography-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active,a.ant-typography[disabled]:hover,.ant-typography a[disabled]:hover,a.ant-typography.ant-typography-disabled:hover,.ant-typography a.ant-typography-disabled:hover{color:rgba(255, 255, 255, 0.25);}a.ant-typography[disabled]:active,.ant-typography a[disabled]:active,a.ant-typography.ant-typography-disabled:active,.ant-typography a.ant-typography-disabled:active{pointer-events:none;}.ant-typography .ant-typography-expand,.ant-typography .ant-typography-edit,.ant-typography .ant-typography-copy{color:#1668dc;text-decoration:none;outline:none;cursor:pointer;transition:color 0.3s;margin-inline-start:4px;}.ant-typography .ant-typography-expand:focus,.ant-typography .ant-typography-edit:focus,.ant-typography .ant-typography-copy:focus,.ant-typography .ant-typography-expand:hover,.ant-typography .ant-typography-edit:hover,.ant-typography .ant-typography-copy:hover{color:#15417e;}.ant-typography .ant-typography-expand:active,.ant-typography .ant-typography-edit:active,.ant-typography .ant-typography-copy:active{color:#1554ad;}.ant-typography-edit-content{position:relative;}div.ant-typography-edit-content{inset-inline-start:-12px;margin-top:-5px;margin-bottom:calc(1em - 5px);}.ant-typography-edit-content .ant-typography-edit-content-confirm{position:absolute;inset-inline-end:10px;inset-block-end:8px;color:rgba(255, 255, 255, 0.45);font-weight:normal;font-size:14px;font-style:normal;pointer-events:none;}.ant-typography-edit-content textarea{margin:0!important;-moz-transition:none;height:1em;}.ant-typography-copy-success,.ant-typography-copy-success:hover,.ant-typography-copy-success:focus{color:#49aa19;}a.ant-typography-ellipsis,span.ant-typography-ellipsis{display:inline-block;max-width:100%;}.ant-typography-single-line{white-space:nowrap;}.ant-typography-ellipsis-single-line{overflow:hidden;text-overflow:ellipsis;}a.ant-typography-ellipsis-single-line,span.ant-typography-ellipsis-single-line{vertical-align:bottom;}.ant-typography-ellipsis-multiple-line{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical;}.ant-typography-rtl{direction:rtl;}[class^=\\"ant-upload\\"],[class*=\\" ant-upload\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-upload\\"]::before,[class*=\\" ant-upload\\"]::before,[class^=\\"ant-upload\\"]::after,[class*=\\" ant-upload\\"]::after{box-sizing:border-box;}[class^=\\"ant-upload\\"] [class^=\\"ant-upload\\"],[class*=\\" ant-upload\\"] [class^=\\"ant-upload\\"],[class^=\\"ant-upload\\"] [class*=\\" ant-upload\\"],[class*=\\" ant-upload\\"] [class*=\\" ant-upload\\"]{box-sizing:border-box;}[class^=\\"ant-upload\\"] [class^=\\"ant-upload\\"]::before,[class*=\\" ant-upload\\"] [class^=\\"ant-upload\\"]::before,[class^=\\"ant-upload\\"] [class*=\\" ant-upload\\"]::before,[class*=\\" ant-upload\\"] [class*=\\" ant-upload\\"]::before,[class^=\\"ant-upload\\"] [class^=\\"ant-upload\\"]::after,[class*=\\" ant-upload\\"] [class^=\\"ant-upload\\"]::after,[class^=\\"ant-upload\\"] [class*=\\" ant-upload\\"]::after,[class*=\\" ant-upload\\"] [class*=\\" ant-upload\\"]::after{box-sizing:border-box;}.ant-upload-wrapper{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}.ant-upload-wrapper .ant-upload{outline:0;}.ant-upload-wrapper .ant-upload input[type='file']{cursor:pointer;}.ant-upload-wrapper .ant-upload-select{display:inline-block;}.ant-upload-wrapper .ant-upload-disabled{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-upload-wrapper .ant-upload-drag{position:relative;width:100%;height:100%;text-align:center;background:rgba(255, 255, 255, 0.04);border:1px dashed #424242;border-radius:8px;cursor:pointer;transition:border-color 0.3s;}.ant-upload-wrapper .ant-upload-drag .ant-upload{padding:16px 0;}.ant-upload-wrapper .ant-upload-drag .ant-upload-btn{display:table;width:100%;height:100%;outline:none;}.ant-upload-wrapper .ant-upload-drag .ant-upload-drag-container{display:table-cell;vertical-align:middle;}.ant-upload-wrapper .ant-upload-drag:not(.ant-upload-disabled):hover{border-color:#198016;}.ant-upload-wrapper .ant-upload-drag p.ant-upload-drag-icon{margin-bottom:16px;}.ant-upload-wrapper .ant-upload-drag p.ant-upload-drag-icon .anticon{color:#037003;font-size:48px;}.ant-upload-wrapper .ant-upload-drag p.ant-upload-text{margin:0 0 4px;color:rgba(255, 255, 255, 0.85);font-size:16px;}.ant-upload-wrapper .ant-upload-drag p.ant-upload-hint{color:rgba(255, 255, 255, 0.45);font-size:14px;}.ant-upload-wrapper .ant-upload-drag.ant-upload-disabled{cursor:not-allowed;}.ant-upload-wrapper .ant-upload-drag.ant-upload-disabled p.ant-upload-drag-icon .anticon,.ant-upload-wrapper .ant-upload-drag.ant-upload-disabled p.ant-upload-text,.ant-upload-wrapper .ant-upload-drag.ant-upload-disabled p.ant-upload-hint{color:rgba(255, 255, 255, 0.25);}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item{position:relative;height:66px;padding:8px;border:1px solid #424242;border-radius:8px;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item:hover,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item:hover{background:transparent;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item .ant-upload-list-item-thumbnail,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item .ant-upload-list-item-thumbnail{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:48px;height:48px;line-height:60px;text-align:center;flex:none;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item .ant-upload-list-item-thumbnail .anticon,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item .ant-upload-list-item-thumbnail .anticon{font-size:30px;color:#037003;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item .ant-upload-list-item-thumbnail img,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item .ant-upload-list-item-thumbnail img{display:block;width:100%;height:100%;overflow:hidden;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item .ant-upload-list-item-progress,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item .ant-upload-list-item-progress{bottom:12px;width:calc(100% - 24px);margin-top:0;padding-inline-start:56px;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item-error,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-error{border-color:#dc4446;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff'],.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#e6f7ff']{fill:#2c1618;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff'],.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-error .ant-upload-list-item-thumbnail .anticon svg path[fill='#1890ff']{fill:#dc4446;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item-uploading,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading{border-style:dashed;}.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture .ant-upload-list-item-uploading .ant-upload-list-item-name,.ant-upload-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading .ant-upload-list-item-name{margin-bottom:12px;}.ant-upload-wrapper.ant-upload-picture-card-wrapper{display:inline-block;width:100%;}.ant-upload-wrapper.ant-upload-picture-card-wrapper::before{display:table;content:\\"\\";}.ant-upload-wrapper.ant-upload-picture-card-wrapper::after{display:table;clear:both;content:\\"\\";}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload.ant-upload-select{width:102px;height:102px;margin-inline-end:8px;margin-bottom:8px;text-align:center;vertical-align:top;background-color:rgba(255, 255, 255, 0.04);border:1px dashed #424242;border-radius:8px;cursor:pointer;transition:border-color 0.3s;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload.ant-upload-select >.ant-upload{display:flex;align-items:center;justify-content:center;height:100%;text-align:center;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload.ant-upload-select:not(.ant-upload-disabled):hover{border-color:#037003;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-container{display:inline-block;width:102px;height:102px;margin-block:0 8px;margin-inline:0 8px;vertical-align:top;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card::after{display:none;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item{height:100%;margin:0;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item::before{position:absolute;z-index:1;width:calc(100% - 16px);height:calc(100% - 16px);background-color:rgba(0, 0, 0, 0.45);opacity:0;transition:all 0.3s;content:\\" \\";}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item:hover::before,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-actions{opacity:1;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions{position:absolute;inset-inline-start:0;z-index:10;width:100%;white-space:nowrap;text-align:center;opacity:0;transition:all 0.3s;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete{z-index:10;width:16px;margin:0 4px;font-size:16px;cursor:pointer;transition:all 0.3s;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-eye,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-download,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-delete{color:rgba(255, 255, 255, 0.65);}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye:hover,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-eye:hover,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-download:hover,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-download:hover,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-actions:hover .anticon-delete:hover{color:#fff;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-thumbnail,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-thumbnail img{position:static;display:block;width:100%;height:100%;object-fit:contain;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-name{display:none;text-align:center;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-file+.ant-upload-list-item-name{position:absolute;bottom:16px;display:block;width:calc(100% - 16px);}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item{background-color:rgba(255, 255, 255, 0.04);}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading::before,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading .anticon-eye,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading .anticon-download,.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-uploading .anticon-delete{display:none;}.ant-upload-wrapper.ant-upload-picture-card-wrapper .ant-upload-list.ant-upload-list-picture-card .ant-upload-list-item-progress{bottom:32px;width:calc(100% - 16px);padding-inline-start:0;}.ant-upload-wrapper .ant-upload-list{line-height:1.5714285714285714;}.ant-upload-wrapper .ant-upload-list::before{display:table;content:\\"\\";}.ant-upload-wrapper .ant-upload-list::after{display:table;clear:both;content:\\"\\";}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item{position:relative;height:22px;margin-top:8px;font-size:14px;display:flex;align-items:center;transition:background-color 0.3s;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item:hover{background-color:rgba(255, 255, 255, 0.08);}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;padding:0 8px;line-height:1.5714285714285714;flex:auto;transition:all 0.3s;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions .ant-upload-list-item-action{opacity:0;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions .ant-upload-list-item-action.ant-btn-sm{height:22px;border:0;line-height:1;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions .ant-upload-list-item-action.ant-btn-sm >span{transform:scale(1);}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions .ant-upload-list-item-action:focus,.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions.picture .ant-upload-list-item-action{opacity:1;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions .anticon{color:rgba(255, 255, 255, 0.45);transition:all 0.3s;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-actions:hover .anticon{color:rgba(255, 255, 255, 0.85);}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-icon .anticon{color:rgba(255, 255, 255, 0.45);font-size:14px;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-progress{position:absolute;bottom:-12px;width:100%;padding-inline-start:22px;font-size:14px;line-height:0;pointer-events:none;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item .ant-upload-list-item-progress >div{margin:0;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item:hover .ant-upload-list-item-action{opacity:1;color:rgba(255, 255, 255, 0.85);}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error{color:#dc4446;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error .ant-upload-list-item-name,.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error .ant-upload-icon .anticon{color:#dc4446;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error .ant-upload-list-item-actions .anticon,.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error .ant-upload-list-item-actions .anticon:hover{color:#dc4446;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-error .ant-upload-list-item-actions .ant-upload-list-item-action{opacity:1;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-container{transition:opacity 0.3s,height 0.3s;}.ant-upload-wrapper .ant-upload-list .ant-upload-list-item-container::before{display:table;width:0;height:0;content:\\"\\";}.ant-upload-wrapper .ant-upload-animate-inline-appear,.ant-upload-wrapper .ant-upload-animate-inline-enter,.ant-upload-wrapper .ant-upload-animate-inline-leave{animation-duration:0.3s;animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);animation-fill-mode:forwards;}.ant-upload-wrapper .ant-upload-animate-inline-appear,.ant-upload-wrapper .ant-upload-animate-inline-enter{animation-name:uploadAnimateInlineIn;}.ant-upload-wrapper .ant-upload-animate-inline-leave{animation-name:uploadAnimateInlineOut;}.ant-upload-rtl{direction:rtl;}.ant-upload .ant-motion-collapse-legacy{overflow:hidden;}.ant-upload .ant-motion-collapse-legacy-active{transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}.ant-upload .ant-motion-collapse{overflow:hidden;transition:height 0.2s cubic-bezier(0.645, 0.045, 0.355, 1),opacity 0.2s cubic-bezier(0.645, 0.045, 0.355, 1)!important;}@keyframes uploadAnimateInlineIn{from{width:0;height:0;margin:0;padding:0;opacity:0;}}@keyframes uploadAnimateInlineOut{to{width:0;height:0;margin:0;padding:0;opacity:0;}}[class^=\\"ant-segmented\\"],[class*=\\" ant-segmented\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-segmented\\"]::before,[class*=\\" ant-segmented\\"]::before,[class^=\\"ant-segmented\\"]::after,[class*=\\" ant-segmented\\"]::after{box-sizing:border-box;}[class^=\\"ant-segmented\\"] [class^=\\"ant-segmented\\"],[class*=\\" ant-segmented\\"] [class^=\\"ant-segmented\\"],[class^=\\"ant-segmented\\"] [class*=\\" ant-segmented\\"],[class*=\\" ant-segmented\\"] [class*=\\" ant-segmented\\"]{box-sizing:border-box;}[class^=\\"ant-segmented\\"] [class^=\\"ant-segmented\\"]::before,[class*=\\" ant-segmented\\"] [class^=\\"ant-segmented\\"]::before,[class^=\\"ant-segmented\\"] [class*=\\" ant-segmented\\"]::before,[class*=\\" ant-segmented\\"] [class*=\\" ant-segmented\\"]::before,[class^=\\"ant-segmented\\"] [class^=\\"ant-segmented\\"]::after,[class*=\\" ant-segmented\\"] [class^=\\"ant-segmented\\"]::after,[class^=\\"ant-segmented\\"] [class*=\\" ant-segmented\\"]::after,[class*=\\" ant-segmented\\"] [class*=\\" ant-segmented\\"]::after{box-sizing:border-box;}.ant-segmented{box-sizing:border-box;margin:0;padding:2px;color:rgba(255, 255, 255, 0.65);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:inline-block;background-color:#000000;border-radius:6px;transition:all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);}.ant-segmented .ant-segmented-group{position:relative;display:flex;align-items:stretch;justify-items:flex-start;width:100%;}.ant-segmented.ant-segmented-rtl{direction:rtl;}.ant-segmented.ant-segmented-block{display:flex;}.ant-segmented.ant-segmented-block .ant-segmented-item{flex:1;min-width:0;}.ant-segmented .ant-segmented-item{position:relative;text-align:center;cursor:pointer;transition:color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);border-radius:4px;}.ant-segmented .ant-segmented-item-selected{background-color:#1f1f1f;box-shadow:0 1px 2px 0 rgba(0, 0, 0, 0.03),0 1px 6px -1px rgba(0, 0, 0, 0.02),0 2px 4px 0 rgba(0, 0, 0, 0.02);color:rgba(255, 255, 255, 0.85);}.ant-segmented .ant-segmented-item::after{content:\\"\\";position:absolute;width:100%;height:100%;top:0;inset-inline-start:0;border-radius:inherit;transition:background-color 0.2s;}.ant-segmented .ant-segmented-item:hover:not(.ant-segmented-item-selected):not(.ant-segmented-item-disabled){color:rgba(255, 255, 255, 0.85);}.ant-segmented .ant-segmented-item:hover:not(.ant-segmented-item-selected):not(.ant-segmented-item-disabled)::after{background-color:rgba(255, 255, 255, 0.12);}.ant-segmented .ant-segmented-item-label{min-height:28px;line-height:28px;padding:0 11px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.ant-segmented .ant-segmented-item-icon+*{margin-inline-start:6px;}.ant-segmented .ant-segmented-item-input{position:absolute;inset-block-start:0;inset-inline-start:0;width:0;height:0;opacity:0;pointer-events:none;}.ant-segmented .ant-segmented-thumb{background-color:#1f1f1f;box-shadow:0 1px 2px 0 rgba(0, 0, 0, 0.03),0 1px 6px -1px rgba(0, 0, 0, 0.02),0 2px 4px 0 rgba(0, 0, 0, 0.02);position:absolute;inset-block-start:0;inset-inline-start:0;width:0;height:100%;padding:4px 0;border-radius:4px;}.ant-segmented .ant-segmented-thumb~.ant-segmented-item:not(.ant-segmented-item-selected):not(.ant-segmented-item-disabled)::after{background-color:transparent;}.ant-segmented.ant-segmented-lg{border-radius:8px;}.ant-segmented.ant-segmented-lg .ant-segmented-item-label{min-height:36px;line-height:36px;padding:0 11px;font-size:16px;}.ant-segmented.ant-segmented-lg .ant-segmented-item,.ant-segmented.ant-segmented-lg .ant-segmented-thumb{border-radius:6px;}.ant-segmented.ant-segmented-sm{border-radius:4px;}.ant-segmented.ant-segmented-sm .ant-segmented-item-label{min-height:20px;line-height:20px;padding:0 7px;}.ant-segmented.ant-segmented-sm .ant-segmented-item,.ant-segmented.ant-segmented-sm .ant-segmented-thumb{border-radius:2px;}.ant-segmented-disabled .ant-segmented-item,.ant-segmented-disabled .ant-segmented-item:hover,.ant-segmented-disabled .ant-segmented-item:focus{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-segmented .ant-segmented-item-disabled,.ant-segmented .ant-segmented-item-disabled:hover,.ant-segmented .ant-segmented-item-disabled:focus{color:rgba(255, 255, 255, 0.25);cursor:not-allowed;}.ant-segmented .ant-segmented-thumb-motion-appear-active{transition:transform 0.3s cubic-bezier(0.645, 0.045, 0.355, 1),width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);will-change:transform,width;}[class^=\\"ant-qrcode\\"],[class*=\\" ant-qrcode\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-qrcode\\"]::before,[class*=\\" ant-qrcode\\"]::before,[class^=\\"ant-qrcode\\"]::after,[class*=\\" ant-qrcode\\"]::after{box-sizing:border-box;}[class^=\\"ant-qrcode\\"] [class^=\\"ant-qrcode\\"],[class*=\\" ant-qrcode\\"] [class^=\\"ant-qrcode\\"],[class^=\\"ant-qrcode\\"] [class*=\\" ant-qrcode\\"],[class*=\\" ant-qrcode\\"] [class*=\\" ant-qrcode\\"]{box-sizing:border-box;}[class^=\\"ant-qrcode\\"] [class^=\\"ant-qrcode\\"]::before,[class*=\\" ant-qrcode\\"] [class^=\\"ant-qrcode\\"]::before,[class^=\\"ant-qrcode\\"] [class*=\\" ant-qrcode\\"]::before,[class*=\\" ant-qrcode\\"] [class*=\\" ant-qrcode\\"]::before,[class^=\\"ant-qrcode\\"] [class^=\\"ant-qrcode\\"]::after,[class*=\\" ant-qrcode\\"] [class^=\\"ant-qrcode\\"]::after,[class^=\\"ant-qrcode\\"] [class*=\\" ant-qrcode\\"]::after,[class*=\\" ant-qrcode\\"] [class*=\\" ant-qrcode\\"]::after{box-sizing:border-box;}.ant-qrcode{box-sizing:border-box;margin:0;padding:12px;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';display:flex;justify-content:center;align-items:center;background-color:#fff;border-radius:8px;border:1px solid rgba(253, 253, 253, 0.12);position:relative;width:100%;height:100%;overflow:hidden;}.ant-qrcode>.ant-qrcode-mask{position:absolute;inset-block-start:0;inset-inline-start:0;z-index:10;display:flex;flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;color:rgba(255, 255, 255, 0.85);line-height:1.5714285714285714;background:rgba(255, 255, 255, 0.96);text-align:center;}.ant-qrcode>.ant-qrcode-mask>.ant-qrcode-expired{color:rgba(0, 0, 0, 0.88);}.ant-qrcode-icon{margin-block-end:8px;font-size:32px;}.ant-qrcode-borderless{border-color:transparent;}[class^=\\"ant-app\\"],[class*=\\" ant-app\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-app\\"]::before,[class*=\\" ant-app\\"]::before,[class^=\\"ant-app\\"]::after,[class*=\\" ant-app\\"]::after{box-sizing:border-box;}[class^=\\"ant-app\\"] [class^=\\"ant-app\\"],[class*=\\" ant-app\\"] [class^=\\"ant-app\\"],[class^=\\"ant-app\\"] [class*=\\" ant-app\\"],[class*=\\" ant-app\\"] [class*=\\" ant-app\\"]{box-sizing:border-box;}[class^=\\"ant-app\\"] [class^=\\"ant-app\\"]::before,[class*=\\" ant-app\\"] [class^=\\"ant-app\\"]::before,[class^=\\"ant-app\\"] [class*=\\" ant-app\\"]::before,[class*=\\" ant-app\\"] [class*=\\" ant-app\\"]::before,[class^=\\"ant-app\\"] [class^=\\"ant-app\\"]::after,[class*=\\" ant-app\\"] [class^=\\"ant-app\\"]::after,[class^=\\"ant-app\\"] [class*=\\" ant-app\\"]::after,[class*=\\" ant-app\\"] [class*=\\" ant-app\\"]::after{box-sizing:border-box;}.ant-app{color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';}[class^=\\"ant-message\\"],[class*=\\" ant-message\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-message\\"]::before,[class*=\\" ant-message\\"]::before,[class^=\\"ant-message\\"]::after,[class*=\\" ant-message\\"]::after{box-sizing:border-box;}[class^=\\"ant-message\\"] [class^=\\"ant-message\\"],[class*=\\" ant-message\\"] [class^=\\"ant-message\\"],[class^=\\"ant-message\\"] [class*=\\" ant-message\\"],[class*=\\" ant-message\\"] [class*=\\" ant-message\\"]{box-sizing:border-box;}[class^=\\"ant-message\\"] [class^=\\"ant-message\\"]::before,[class*=\\" ant-message\\"] [class^=\\"ant-message\\"]::before,[class^=\\"ant-message\\"] [class*=\\" ant-message\\"]::before,[class*=\\" ant-message\\"] [class*=\\" ant-message\\"]::before,[class^=\\"ant-message\\"] [class^=\\"ant-message\\"]::after,[class*=\\" ant-message\\"] [class^=\\"ant-message\\"]::after,[class^=\\"ant-message\\"] [class*=\\" ant-message\\"]::after,[class*=\\" ant-message\\"] [class*=\\" ant-message\\"]::after{box-sizing:border-box;}.ant-message{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:fixed;top:8px;width:100%;pointer-events:none;z-index:1010;}.ant-message .ant-message-move-up{animation-fill-mode:forwards;}.ant-message .ant-message-move-up-appear,.ant-message .ant-message-move-up-enter{animation-name:MessageMoveIn;animation-duration:0.3s;animation-play-state:paused;animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-message .ant-message-move-up-appear.ant-message-move-up-appear-active,.ant-message .ant-message-move-up-enter.ant-message-move-up-enter-active{animation-play-state:running;}.ant-message .ant-message-move-up-leave{animation-name:MessageMoveOut;animation-duration:0.3s;animation-play-state:paused;animation-timing-function:cubic-bezier(0.78, 0.14, 0.15, 0.86);}.ant-message .ant-message-move-up-leave.ant-message-move-up-leave-active{animation-play-state:running;}.ant-message-rtl{direction:rtl;}.ant-message-rtl span{direction:rtl;}.ant-message-notice{padding:8px;text-align:center;}.ant-message-notice .anticon{vertical-align:text-bottom;margin-inline-end:8px;font-size:16px;}.ant-message-notice .ant-message-notice-content{display:inline-block;padding:9px 12px;background:#1f1f1f;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);pointer-events:all;}.ant-message-notice .ant-message-success .anticon{color:#49aa19;}.ant-message-notice .ant-message-error .anticon{color:#dc4446;}.ant-message-notice .ant-message-warning .anticon{color:#d89614;}.ant-message-notice .ant-message-info .anticon,.ant-message-notice .ant-message-loading .anticon{color:#1668dc;}.ant-message-notice-pure-panel{padding:0;text-align:start;}@keyframes MessageMoveIn{0%{padding:0;transform:translateY(-100%);opacity:0;}100%{padding:8px;transform:translateY(0);opacity:1;}}@keyframes MessageMoveOut{0%{max-height:150px;padding:8px;opacity:1;}100%{max-height:0;padding:0;opacity:0;}}[class^=\\"ant-notification\\"],[class*=\\" ant-notification\\"]{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;box-sizing:border-box;}[class^=\\"ant-notification\\"]::before,[class*=\\" ant-notification\\"]::before,[class^=\\"ant-notification\\"]::after,[class*=\\" ant-notification\\"]::after{box-sizing:border-box;}[class^=\\"ant-notification\\"] [class^=\\"ant-notification\\"],[class*=\\" ant-notification\\"] [class^=\\"ant-notification\\"],[class^=\\"ant-notification\\"] [class*=\\" ant-notification\\"],[class*=\\" ant-notification\\"] [class*=\\" ant-notification\\"]{box-sizing:border-box;}[class^=\\"ant-notification\\"] [class^=\\"ant-notification\\"]::before,[class*=\\" ant-notification\\"] [class^=\\"ant-notification\\"]::before,[class^=\\"ant-notification\\"] [class*=\\" ant-notification\\"]::before,[class*=\\" ant-notification\\"] [class*=\\" ant-notification\\"]::before,[class^=\\"ant-notification\\"] [class^=\\"ant-notification\\"]::after,[class*=\\" ant-notification\\"] [class^=\\"ant-notification\\"]::after,[class^=\\"ant-notification\\"] [class*=\\" ant-notification\\"]::after,[class*=\\" ant-notification\\"] [class*=\\" ant-notification\\"]::after{box-sizing:border-box;}.ant-notification{box-sizing:border-box;margin:0;padding:0;color:rgba(255, 255, 255, 0.85);font-size:14px;line-height:1.5714285714285714;list-style:none;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';position:fixed;z-index:1050;margin-inline-end:24px;}.ant-notification .ant-notification-hook-holder{position:relative;}.ant-notification.ant-notification-top,.ant-notification.ant-notification-bottom{margin-inline:0;}.ant-notification.ant-notification-topLeft,.ant-notification.ant-notification-bottomLeft{margin-inline-end:0;margin-inline-start:24px;}.ant-notification.ant-notification-topLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification.ant-notification-bottomLeft .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification.ant-notification-topLeft .ant-notification-fade-appear.ant-notification-fade-appear-active,.ant-notification.ant-notification-bottomLeft .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:antNotificationLeftFadeIn;}.ant-notification .ant-notification-fade-enter,.ant-notification .ant-notification-fade-appear{animation-duration:0.2s;animation-timing-function:cubic-bezier(0.645, 0.045, 0.355, 1);animation-fill-mode:both;opacity:0;animation-play-state:paused;}.ant-notification .ant-notification-fade-leave{animation-timing-function:cubic-bezier(0.645, 0.045, 0.355, 1);animation-fill-mode:both;animation-duration:0.2s;animation-play-state:paused;}.ant-notification .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:antNotificationFadeIn;animation-play-state:running;}.ant-notification .ant-notification-fade-leave.ant-notification-fade-leave-active{animation-name:antNotificationFadeOut;animation-play-state:running;}.ant-notification.ant-notification-top .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification.ant-notification-top .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:antNotificationTopFadeIn;}.ant-notification.ant-notification-bottom .ant-notification-fade-enter.ant-notification-fade-enter-active,.ant-notification.ant-notification-bottom .ant-notification-fade-appear.ant-notification-fade-appear-active{animation-name:antNotificationBottomFadeIn;}.ant-notification-rtl{direction:rtl;}.ant-notification-rtl .ant-notification-notice-btn{float:left;}.ant-notification-notice{position:relative;width:384px;max-width:calc(100vw - 48px);margin-bottom:16px;margin-inline-start:auto;padding:20px 24px;overflow:hidden;line-height:1.5714285714285714;word-wrap:break-word;background:#1f1f1f;border-radius:8px;box-shadow:0 6px 16px 0 rgba(0, 0, 0, 0.08),0 3px 6px -4px rgba(0, 0, 0, 0.12),0 9px 28px 8px rgba(0, 0, 0, 0.05);}.ant-notification-notice .ant-notification-close-icon{font-size:14px;cursor:pointer;}.ant-notification-notice .ant-notification-notice-message{margin-bottom:8px;color:rgba(255, 255, 255, 0.85);font-size:16px;line-height:1.5;}.ant-notification-notice .ant-notification-notice-description{font-size:14px;}.ant-notification-notice.ant-notification-notice-closable .ant-notification-notice-message{padding-inline-end:24px;}.ant-notification-notice .ant-notification-notice-with-icon .ant-notification-notice-message{margin-bottom:8px;margin-inline-start:36px;font-size:16px;}.ant-notification-notice .ant-notification-notice-with-icon .ant-notification-notice-description{margin-inline-start:36px;font-size:14px;}.ant-notification-notice .ant-notification-notice-icon{position:absolute;font-size:24px;line-height:0;}.ant-notification-notice .ant-notification-notice-icon-success.anticon{color:#49aa19;}.ant-notification-notice .ant-notification-notice-icon-info.anticon{color:#1668dc;}.ant-notification-notice .ant-notification-notice-icon-warning.anticon{color:#d89614;}.ant-notification-notice .ant-notification-notice-icon-error.anticon{color:#dc4446;}.ant-notification-notice .ant-notification-notice-close{position:absolute;top:20px;inset-inline-end:24px;color:rgba(255, 255, 255, 0.45);outline:none;width:22px;height:22px;border-radius:4px;transition:background-color 0.2s,color 0.2s;display:flex;align-items:center;justify-content:center;}.ant-notification-notice .ant-notification-notice-close:hover{color:rgba(255, 255, 255, 0.85);background-color:rgba(255, 255, 255, 0.12);}.ant-notification-notice .ant-notification-notice-btn{float:right;margin-top:12px;}.ant-notification-notice-pure-panel{margin:0;}@keyframes antNotificationLeftFadeIn{0%{right:384px;opacity:0;}100%{right:0;opacity:1;}}@keyframes antNotificationFadeIn{0%{left:384px;opacity:0;}100%{left:0;opacity:1;}}@keyframes antNotificationFadeOut{0%{max-height:150px;margin-bottom:16px;opacity:1;}100%{max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;opacity:0;}}@keyframes antNotificationTopFadeIn{0%{margin-top:-100%;opacity:0;}100%{margin-top:0;opacity:1;}}@keyframes antNotificationBottomFadeIn{0%{margin-bottom:-100%;opacity:0;}100%{margin-bottom:0;opacity:1;}}.data-ant-cssinjs-cache-path{content:\\"m3f0rh|ant-design-icons|anticon:ijrcqw;z6uaad|Shared|ant:c6s4t9;z6uaad|Affix|ant-affix|anticon:2zzvr5;z6uaad|Anchor|ant-anchor|anticon:13hrez8;z6uaad|Select|ant-select|anticon:f698cf;z6uaad|Alert|ant-alert|anticon:1es04j3;z6uaad|Avatar|ant-avatar|anticon:19qdqs6;z6uaad|Badge|ant-badge|anticon:11brd8k;z6uaad|Badge|ant-ribbon|anticon:42dxfk;z6uaad|Breadcrumb|ant-breadcrumb|anticon:1j0g5z6;z6uaad|Button|ant-btn|anticon:1rl4the;z6uaad|Wave|ant-wave|anticon:pkgtju;z6uaad|Calendar|ant-picker|anticon:mesz65;z6uaad|Radio|ant-radio|anticon:1rexxqj;z6uaad|Card|ant-card|anticon:pisf11;z6uaad|Collapse|ant-collapse|anticon:1mx93m;z6uaad|Carousel|ant-carousel|anticon:1rz7wcs;z6uaad|Cascader|ant-cascader|anticon:e8gwep;z6uaad|Checkbox|ant-checkbox|anticon:16cn1kz;z6uaad|Checkbox|ant-checkbox-group|anticon:dmylcw;z6uaad|Grid|ant-col|anticon:1b4gqad;z6uaad|Comment|ant-comment|anticon:1bgsssj;z6uaad|DatePicker|ant-picker|anticon:m4frye;z6uaad|Descriptions|ant-descriptions|anticon:6r2ueu;z6uaad|Divider|ant-divider|anticon:p1u0jv;z6uaad|Dropdown|ant-dropdown|anticon:t4fvdt;z6uaad|Drawer|ant-drawer|anticon:yej9xm;z6uaad|Empty|ant-empty|anticon:xi52lg;z6uaad|FloatButton|ant-float-btn|anticon:ri8ruk;z6uaad|Tooltip|ant-tooltip|anticon:1d6z8n1;z6uaad|Form|ant-form|anticon:1tct32d;z6uaad|Grid|ant-row|anticon:xfnjxw;z6uaad|Input|ant-input|anticon:bybrgq;z6uaad|Image|ant-image|anticon:1bvp3xn;z6uaad|InputNumber|ant-input-number|anticon:jtkpcs;z6uaad|Layout|ant-layout|anticon:1idg3qk;z6uaad|List|ant-list|anticon:5p7k62;z6uaad|Spin|ant-spin|anticon:1g1ryjx;z6uaad|Menu|ant-menu|anticon:wo2qbe;z6uaad|Mentions|ant-mentions|anticon:cwasus;z6uaad|Modal|ant-modal|anticon:1pabgrn;z6uaad|Statistic|ant-statistic|anticon:q73svq;z6uaad|Skeleton|ant-skeleton|anticon:10w76qa;z6uaad|PageHeader|ant-page-header|anticon:1a4nm7u;z6uaad|Pagination|ant-pagination|anticon:13nh3ua;z6uaad|Popconfirm|ant-popconfirm|anticon:nmwlv6;z6uaad|Popover|ant-popover|anticon:hwmhax;z6uaad|Tooltip|ant-popover|anticon:17hb4y9;z6uaad|Progress|ant-progress|anticon:1svsnks;z6uaad|Rate|ant-rate|anticon:x3tu0l;z6uaad|Result|ant-result|anticon:9bvn6n;z6uaad|Slider|ant-slider|anticon:haw8s9;z6uaad|Space|ant-space|anticon:10yzkeb;z6uaad|Space|ant-space-compact|anticon:ac2k07;z6uaad|Steps|ant-steps|anticon:h0jjl7;z6uaad|Switch|ant-switch|anticon:18cao7h;z6uaad|Table|ant-table|anticon:pfy5id;z6uaad|Transfer|ant-transfer|anticon:1y4rk2;z6uaad|Tree|ant-tree|anticon:1hk4izj;z6uaad|TreeSelect|ant-tree-select|anticon:dk50w9;z6uaad|Tabs|ant-tabs|anticon:1m3gz2f;z6uaad|Tag|ant-tag|anticon:mtm9nh;z6uaad|Timeline|ant-timeline|anticon:171edtc;z6uaad|Typography|ant-typography|anticon:1gsekci;z6uaad|Upload|ant-upload|anticon:9gg6kc;z6uaad|Segmented|ant-segmented|anticon:zywlxk;z6uaad|QRCode|ant-qrcode|anticon:1aglmhf;z6uaad|App|ant-app|anticon:vhxvxu;z6uaad|Message|ant-message|anticon:175ruci;z6uaad|Notification|ant-notification|anticon:czzwwj\\";}"`; ================================================ FILE: components/_util/static-style-extract/__tests__/index.test.js ================================================ // import { StyleProvider } from '../../cssinjs'; import { extractStyle } from '../index'; import { ConfigProvider } from '../../../components'; import { theme } from '../../../index'; const testGreenColor = '#008000'; describe('Static-Style-Extract', () => { it('should extract static styles', () => { const cssText = extractStyle(); expect(cssText).not.toContain(testGreenColor); expect(cssText).toMatchSnapshot(); }); it('should extract static styles with customTheme', () => { const cssText = extractStyle(node => { return ( {node} ); }); expect(cssText).toContain(testGreenColor); expect(cssText).toMatchSnapshot(); }); it('should extract static styles with customTheme and customStyle', () => { const cssText = extractStyle(node => { return ( {node} ); }); expect(cssText).toContain('#037003'); expect(cssText).toMatchSnapshot(); }); // it('with custom hashPriority', () => { // const cssText = extractStyle( // (node) => ( // // // {node} // // // ), // ); // expect(cssText).toContain(testGreenColor); // expect(cssText).not.toContain(':where'); // expect(cssText).toMatchSnapshot(); // // const cssText2 = extractStyle((node) => ( // // {node} // // )); // expect(cssText2).toContain(':where'); // }); }); ================================================ FILE: components/_util/static-style-extract/index.tsx ================================================ import { createCache, extractStyle as extStyle, StyleProvider } from '../cssinjs'; import * as antd from '../../components'; import { renderToString } from 'vue/server-renderer'; import type { CustomRender } from './interface'; const blackList: string[] = [ 'ConfigProvider', 'Grid', 'Tour', 'SelectOptGroup', 'SelectOption', 'MentionsOption', 'TreeNode', 'TreeSelectNode', 'LocaleProvider', ]; const pickerMap = { MonthPicker: 'month', WeekPicker: 'week', QuarterPicker: 'quarter', }; const compChildNameMap = { MenuDivider: 'Menu', MenuItem: 'Menu', MenuItemGroup: 'Menu', SubMenu: 'Menu', TableColumn: 'Table', TableColumnGroup: 'Table', TableSummary: 'Table', TableSummaryRow: 'Table', TableSummaryCell: 'Table', TabPane: 'Tabs', TimelineItem: 'Timeline', }; const defaultNode = () => ( <> {Object.keys(antd) .filter(name => !blackList.includes(name) && name[0] === name[0].toUpperCase()) .map(compName => { const Comp = antd[compName]; if (compName === 'Dropdown') { return (
); } if (compName === 'Anchor') { return ; } if (compName in pickerMap) { const Comp = antd['DatePicker']; const type = pickerMap[compName]; return ; } if (compName in compChildNameMap) { const ParentComp = antd[compChildNameMap[compName]]; return ( ); } if (compName === 'QRCode' || compName === 'Segmented') { return (
); } return ; })} ); export function extractStyle(customTheme?: CustomRender): string { const cache = createCache(); renderToString( {customTheme ? customTheme(defaultNode()) : defaultNode()} , ); // Grab style from cache const styleText = extStyle(cache, true); return styleText; } ================================================ FILE: components/_util/static-style-extract/interface.ts ================================================ import type { VueNode } from '../type'; export type CustomRender = (node: VueNode) => VueNode; ================================================ FILE: components/_util/statusUtils.tsx ================================================ import type { ValidateStatus } from '../form/FormItem'; import classNames from './classNames'; const InputStatuses = ['warning', 'error', ''] as const; export type InputStatus = (typeof InputStatuses)[number]; export function getStatusClassNames( prefixCls: string, status?: ValidateStatus, hasFeedback?: boolean, ) { return classNames({ [`${prefixCls}-status-success`]: status === 'success', [`${prefixCls}-status-warning`]: status === 'warning', [`${prefixCls}-status-error`]: status === 'error', [`${prefixCls}-status-validating`]: status === 'validating', [`${prefixCls}-has-feedback`]: hasFeedback, }); } export const getMergedStatus = (contextStatus?: ValidateStatus, customStatus?: InputStatus) => customStatus || contextStatus; ================================================ FILE: components/_util/styleChecker.ts ================================================ import canUseDom from './canUseDom'; export const canUseDocElement = () => canUseDom() && window.document.documentElement; const isStyleNameSupport = (styleName: string | string[]): boolean => { if (canUseDom() && window.document.documentElement) { const styleNameList = Array.isArray(styleName) ? styleName : [styleName]; const { documentElement } = window.document; return styleNameList.some(name => name in documentElement.style); } return false; }; const isStyleValueSupport = (styleName: string, value: any) => { if (!isStyleNameSupport(styleName)) { return false; } const ele = document.createElement('div'); const origin = ele.style[styleName]; ele.style[styleName] = value; return ele.style[styleName] !== origin; }; export function isStyleSupport(styleName: string | string[], styleValue?: any) { if (!Array.isArray(styleName) && styleValue !== undefined) { return isStyleValueSupport(styleName, styleValue); } return isStyleNameSupport(styleName); } let flexGapSupported: boolean | undefined; export const detectFlexGapSupported = () => { if (!canUseDocElement()) { return false; } if (flexGapSupported !== undefined) { return flexGapSupported; } // create flex container with row-gap set const flex = document.createElement('div'); flex.style.display = 'flex'; flex.style.flexDirection = 'column'; flex.style.rowGap = '1px'; // create two, elements inside it flex.appendChild(document.createElement('div')); flex.appendChild(document.createElement('div')); // append to the DOM (needed to obtain scrollHeight) document.body.appendChild(flex); flexGapSupported = flex.scrollHeight === 1; // flex container should be 1px high from the row-gap document.body.removeChild(flex); return flexGapSupported; }; export default isStyleSupport; ================================================ FILE: components/_util/supportsPassive.js ================================================ // Test via a getter in the options object to see if the passive property is accessed let supportsPassive = false; try { const opts = Object.defineProperty({}, 'passive', { get() { supportsPassive = true; }, }); window.addEventListener('testPassive', null, opts); window.removeEventListener('testPassive', null, opts); } catch (e) {} export default supportsPassive; ================================================ FILE: components/_util/throttleByAnimationFrame.ts ================================================ import raf from './raf'; type throttledFn = (...args: any[]) => void; type throttledCancelFn = { cancel: () => void }; function throttleByAnimationFrame(fn: (...args: T) => void) { let requestId: number | null; const later = (args: T) => () => { requestId = null; fn(...args); }; const throttled: throttledFn & throttledCancelFn = (...args: T) => { if (requestId == null) { requestId = raf(later(args)); } }; throttled.cancel = () => { raf.cancel(requestId!); requestId = null; }; return throttled; } export default throttleByAnimationFrame; ================================================ FILE: components/_util/toReactive.ts ================================================ import { isRef, reactive } from 'vue'; import type { Ref } from 'vue'; type MaybeRef = T | Ref; /** * Converts ref to reactive. * * @see https://vueuse.org/toReactive * @param objectRef A ref of object */ export function toReactive(objectRef: MaybeRef): T { if (!isRef(objectRef)) return reactive(objectRef) as T; const proxy = new Proxy( {}, { get(_, p, receiver) { return Reflect.get(objectRef.value, p, receiver); }, set(_, p, value) { (objectRef.value as any)[p] = value; return true; }, deleteProperty(_, p) { return Reflect.deleteProperty(objectRef.value, p); }, has(_, p) { return Reflect.has(objectRef.value, p); }, ownKeys() { return Object.keys(objectRef.value); }, getOwnPropertyDescriptor() { return { enumerable: true, configurable: true, }; }, }, ); return reactive(proxy) as T; } ================================================ FILE: components/_util/transButton.tsx ================================================ import type { CSSProperties } from 'vue'; import { defineComponent, shallowRef, onMounted } from 'vue'; /** * Wrap of sub component which need use as Button capacity (like Icon component). * This helps accessibility reader to tread as a interactive button to operation. */ import KeyCode from './KeyCode'; const inlineStyle = { border: 0, background: 'transparent', padding: 0, lineHeight: 'inherit', display: 'inline-block', }; const TransButton = defineComponent({ compatConfig: { MODE: 3 }, name: 'TransButton', inheritAttrs: false, props: { noStyle: { type: Boolean, default: undefined }, onClick: Function, disabled: { type: Boolean, default: undefined }, autofocus: { type: Boolean, default: undefined }, }, setup(props, { slots, emit, attrs, expose }) { const domRef = shallowRef(); const onKeyDown = (event: KeyboardEvent) => { const { keyCode } = event; if (keyCode === KeyCode.ENTER) { event.preventDefault(); } }; const onKeyUp = (event: KeyboardEvent) => { const { keyCode } = event; if (keyCode === KeyCode.ENTER) { emit('click', event); } }; const onClick = (e: Event) => { emit('click', e); }; const focus = () => { if (domRef.value) { domRef.value.focus(); } }; const blur = () => { if (domRef.value) { domRef.value.blur(); } }; onMounted(() => { if (props.autofocus) { focus(); } }); expose({ focus, blur, }); return () => { const { noStyle, disabled, ...restProps } = props; let mergedStyle: CSSProperties = {}; if (!noStyle) { mergedStyle = { ...inlineStyle, }; } if (disabled) { mergedStyle.pointerEvents = 'none'; } return (
{slots.default?.()}
); }; }, }); export default TransButton; ================================================ FILE: components/_util/transKeys.ts ================================================ export const groupKeysMap = (keys: string[]) => { const map = new Map(); keys.forEach((key, index) => { map.set(key, index); }); return map; }; export const groupDisabledKeysMap = (dataSource: RecordType) => { const map = new Map(); dataSource.forEach(({ disabled, key }, index) => { if (disabled) { map.set(key, index); } }); return map; }; ================================================ FILE: components/_util/transition.tsx ================================================ import type { BaseTransitionProps, CSSProperties, Ref, TransitionGroupProps, TransitionProps, } from 'vue'; import { nextTick } from 'vue'; import { tuple } from './type'; const SelectPlacements = tuple('bottomLeft', 'bottomRight', 'topLeft', 'topRight'); export type SelectCommonPlacement = (typeof SelectPlacements)[number]; const getTransitionDirection = (placement: SelectCommonPlacement | undefined) => { if (placement !== undefined && (placement === 'topLeft' || placement === 'topRight')) { return `slide-down`; } return `slide-up`; }; export const getTransitionProps = (transitionName: string, opt: TransitionProps = {}) => { const transitionProps: TransitionProps = transitionName ? { name: transitionName, appear: true, // type: 'animation', // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`, // appearActiveClass: `antdv-base-transtion`, // appearToClass: `${transitionName}-appear ${transitionName}-appear-active`, enterFromClass: `${transitionName}-enter ${transitionName}-enter-prepare ${transitionName}-enter-start`, enterActiveClass: `${transitionName}-enter ${transitionName}-enter-prepare`, enterToClass: `${transitionName}-enter ${transitionName}-enter-active`, leaveFromClass: ` ${transitionName}-leave`, leaveActiveClass: `${transitionName}-leave ${transitionName}-leave-active`, leaveToClass: `${transitionName}-leave ${transitionName}-leave-active`, ...opt, } : { css: false, ...opt }; return transitionProps; }; export const getTransitionGroupProps = (transitionName: string, opt: TransitionProps = {}) => { const transitionProps: TransitionGroupProps = transitionName ? { name: transitionName, appear: true, // appearFromClass: `${transitionName}-appear ${transitionName}-appear-prepare`, appearActiveClass: `${transitionName}`, appearToClass: `${transitionName}-appear ${transitionName}-appear-active`, enterFromClass: `${transitionName}-appear ${transitionName}-enter ${transitionName}-appear-prepare ${transitionName}-enter-prepare`, enterActiveClass: `${transitionName}`, enterToClass: `${transitionName}-enter ${transitionName}-appear ${transitionName}-appear-active ${transitionName}-enter-active`, leaveActiveClass: `${transitionName} ${transitionName}-leave`, leaveToClass: `${transitionName}-leave-active`, ...opt, } : { css: false, ...opt }; return transitionProps; }; export declare type MotionEvent = (TransitionEvent | AnimationEvent) & { deadline?: boolean; }; export declare type MotionEventHandler = (element: Element, done?: () => void) => CSSProperties; export declare type MotionEndEventHandler = (element: Element, done?: () => void) => boolean | void; // ================== Collapse Motion ================== const getCollapsedHeight: MotionEventHandler = () => ({ height: 0, opacity: 0 }); const getRealHeight: MotionEventHandler = node => ({ height: `${node.scrollHeight}px`, opacity: 1, }); const getCurrentHeight: MotionEventHandler = (node: any) => ({ height: `${node.offsetHeight}px` }); // const skipOpacityTransition: MotionEndEventHandler = (_, event) => // (event as TransitionEvent).propertyName === 'height'; export interface CSSMotionProps extends Partial> { name?: string; css?: boolean; } const collapseMotion = ( name = 'ant-motion-collapse', style: Ref, className: Ref, ): CSSMotionProps => { return { name, appear: true, css: true, onBeforeEnter: node => { className.value = name; style.value = getCollapsedHeight(node); }, onEnter: node => { nextTick(() => { style.value = getRealHeight(node); }); }, onAfterEnter: () => { className.value = ''; style.value = {}; }, onBeforeLeave: node => { className.value = name; style.value = getCurrentHeight(node); }, onLeave: node => { setTimeout(() => { style.value = getCollapsedHeight(node); }); }, onAfterLeave: () => { className.value = ''; style.value = {}; }, }; }; const getTransitionName = (rootPrefixCls: string, motion: string, transitionName?: string) => { if (transitionName !== undefined) { return transitionName; } return `${rootPrefixCls}-${motion}`; }; export { collapseMotion, getTransitionName, getTransitionDirection }; ================================================ FILE: components/_util/type.ts ================================================ // @ts-ignore import type { App, PropType, Plugin, Ref, VNode, SlotsType } from 'vue'; // https://stackoverflow.com/questions/46176165/ways-to-get-string-literal-type-of-array-values-without-enum-overhead export const tuple = (...args: T) => args; export const tupleNum = (...args: T) => args; /** * https://stackoverflow.com/a/59187769 * Extract the type of an element of an array/tuple without performing indexing */ export type ElementOf = T extends (infer E)[] ? E : T extends readonly (infer F)[] ? F : never; /** * https://github.com/Microsoft/TypeScript/issues/29729 */ export type LiteralUnion = T | (string & {}); export type Data = Record; export type Key = string | number; type DefaultFactory = (props: Data) => T | null | undefined; export interface PropOptions { type?: PropType | true | null; required?: boolean; default?: D | DefaultFactory | null | undefined | object; validator?(value: unknown): boolean; } declare type VNodeChildAtom = VNode | string | number | boolean | null | undefined | void; // eslint-disable-next-line no-undef export type VueNode = VNodeChildAtom | VNodeChildAtom[] | VNode; export const withInstall = (comp: T) => { const c = comp as any; c.install = function (app: App) { app.component(c.displayName || c.name, comp); }; return comp as T & Plugin; }; export type MaybeRef = T | Ref; export function eventType() { return { type: [Function, Array] as PropType }; } export function objectType(defaultVal?: T) { return { type: Object as PropType, default: defaultVal as T }; } export function booleanType(defaultVal?: boolean) { return { type: Boolean, default: defaultVal as boolean }; } export function functionType {}>(defaultVal?: T) { return { type: Function as PropType, default: defaultVal as T }; } export function anyType(defaultVal?: T, required?: boolean) { const type = { validator: () => true, default: defaultVal as T } as unknown; return required ? (type as { type: PropType; default: T; required: true; }) : (type as { default: T; type: PropType; }); } export function vNodeType() { return { validator: () => true } as unknown as { type: PropType }; } export function arrayType(defaultVal?: T) { return { type: Array as unknown as PropType, default: defaultVal as T }; } export function stringType(defaultVal?: T) { return { type: String as unknown as PropType, default: defaultVal as T }; } export function someType(types?: any[], defaultVal?: T) { return types ? { type: types as PropType, default: defaultVal as T } : anyType(defaultVal); } export type CustomSlotsType = SlotsType; export type AnyObject = Record; ================================================ FILE: components/_util/unreachableException.ts ================================================ export default class UnreachableException { error: Error; constructor(value: any) { this.error = new Error(`unreachable case: ${JSON.stringify(value)}`); } } ================================================ FILE: components/_util/util.ts ================================================ import type { VueNode } from './type'; export const isFunction = val => typeof val === 'function'; export const controlDefaultValue = Symbol('controlDefaultValue') as any; export const isArray = Array.isArray; export const isString = val => typeof val === 'string'; export const isSymbol = val => typeof val === 'symbol'; export const isObject = val => val !== null && typeof val === 'object'; const onRE = /^on[^a-z]/; const isOn = key => onRE.test(key); const cacheStringFunction = fn => { const cache = Object.create(null); return str => { const hit = cache[str]; return hit || (cache[str] = fn(str)); }; }; const camelizeRE = /-(\w)/g; const camelize = cacheStringFunction(str => { return str.replace(camelizeRE, (_, c) => (c ? c.toUpperCase() : '')); }); const hyphenateRE = /\B([A-Z])/g; const hyphenate = cacheStringFunction(str => { return str.replace(hyphenateRE, '-$1').toLowerCase(); }); const capitalize = cacheStringFunction(str => { return str.charAt(0).toUpperCase() + str.slice(1); }); const hasOwnProperty = Object.prototype.hasOwnProperty; const hasOwn = (val, key) => hasOwnProperty.call(val, key); // change from vue sourcecode function resolvePropValue(options, props, key, value) { const opt = options[key]; if (opt != null) { const hasDefault = hasOwn(opt, 'default'); // default values if (hasDefault && value === undefined) { const defaultValue = opt.default; value = opt.type !== Function && isFunction(defaultValue) ? defaultValue() : defaultValue; } // boolean casting if (opt.type === Boolean) { if (!hasOwn(props, key) && !hasDefault) { value = false; } else if (value === '') { value = true; } } } return value; } export function getDataAndAriaProps(props) { return Object.keys(props).reduce((memo, key) => { if (key.startsWith('data-') || key.startsWith('aria-')) { memo[key] = props[key]; } return memo; }, {}); } export function toPx(val) { if (typeof val === 'number') return `${val}px`; return val; } export function renderHelper>( v: VueNode | ((arg0: T) => VueNode), props: T = {} as T, defaultV?: any, ) { if (typeof v === 'function') { return v(props); } return v ?? defaultV; } export function wrapPromiseFn(openFn: (resolve: VoidFunction) => VoidFunction) { let closeFn: VoidFunction; const closePromise = new Promise(resolve => { closeFn = openFn(() => { resolve(true); }); }); const result: any = () => { closeFn?.(); }; result.then = (filled: VoidFunction, rejected: VoidFunction) => closePromise.then(filled, rejected); result.promise = closePromise; return result; } export { isOn, cacheStringFunction, camelize, hyphenate, capitalize, resolvePropValue }; ================================================ FILE: components/_util/vnode.ts ================================================ import { filterEmpty } from './props-util'; import type { Slots, VNode, VNodeArrayChildren, VNodeProps } from 'vue'; import { cloneVNode, isVNode, Comment, Fragment, render as VueRender } from 'vue'; import warning from './warning'; import type { RefObject } from './createRef'; type NodeProps = Record & Omit & { ref?: VNodeProps['ref'] | RefObject }; export function cloneElement( vnode: VNode | VNode[], nodeProps: NodeProps = {}, override = true, mergeRef = false, ): VNode { let ele = vnode; if (Array.isArray(vnode)) { ele = filterEmpty(vnode)[0]; } if (!ele) { return null; } const node = cloneVNode(ele as VNode, nodeProps as any, mergeRef); // cloneVNode内部是合并属性,这里改成覆盖属性 node.props = (override ? { ...node.props, ...nodeProps } : node.props) as any; warning(typeof node.props.class !== 'object', 'class must be string'); return node; } export function cloneVNodes(vnodes, nodeProps = {}, override = true) { return vnodes.map(vnode => cloneElement(vnode, nodeProps, override)); } export function deepCloneElement( vnode: VNode | VNode[], nodeProps: NodeProps = {}, override = true, mergeRef = false, ) { if (Array.isArray(vnode)) { return vnode.map(item => deepCloneElement(item, nodeProps, override, mergeRef)); } else { // 需要判断是否为vnode方可进行clone操作 if (!isVNode(vnode)) { return vnode; } const cloned = cloneElement(vnode, nodeProps, override, mergeRef); if (Array.isArray(cloned.children)) { cloned.children = deepCloneElement(cloned.children as VNode[]); } return cloned; } } export function triggerVNodeUpdate(vm: VNode, attrs: Record, dom: any) { VueRender(cloneVNode(vm, { ...attrs }), dom); } const ensureValidVNode = (slot: VNodeArrayChildren | null) => { return (slot || []).some(child => { if (!isVNode(child)) return true; if (child.type === Comment) return false; if (child.type === Fragment && !ensureValidVNode(child.children as VNodeArrayChildren)) return false; return true; }) ? slot : null; }; export function customRenderSlot( slots: Slots, name: string, props: Record, fallback?: () => VNodeArrayChildren, ) { const slot = slots[name]?.(props); if (ensureValidVNode(slot)) { return slot; } return fallback?.(); } ================================================ FILE: components/_util/vue-types/index.ts ================================================ import type { CSSProperties } from 'vue'; import type { VueTypeValidableDef, VueTypesInterface } from 'vue-types'; import { createTypes } from 'vue-types'; import type { VueNode } from '../type'; const PropTypes = createTypes({ func: undefined, bool: undefined, string: undefined, number: undefined, array: undefined, object: undefined, integer: undefined, }); PropTypes.extend([ { name: 'looseBool', getter: true, type: Boolean, default: undefined, }, { name: 'style', getter: true, type: [String, Object], default: undefined, }, { name: 'VueNode', getter: true, type: null, }, ]); export function withUndefined(type: T): T { type.default = undefined; return type; } export default PropTypes as VueTypesInterface & { readonly looseBool: VueTypeValidableDef; readonly style: VueTypeValidableDef; readonly VueNode: VueTypeValidableDef; }; ================================================ FILE: components/_util/warning.ts ================================================ import vcWarning, { resetWarned } from '../vc-util/warning'; export { resetWarned }; export function noop() {} type Warning = (valid: boolean, component: string, message?: string) => void; // eslint-disable-next-line import/no-mutable-exports let warning: Warning = noop; if (process.env.NODE_ENV !== 'production') { warning = (valid, component, message) => { vcWarning(valid, `[ant-design-vue: ${component}] ${message}`); // StrictMode will inject console which will not throw warning in React 17. if (process.env.NODE_ENV === 'test') { resetWarned(); } }; } export default warning; ================================================ FILE: components/_util/wave/WaveEffect.tsx ================================================ import type { CSSProperties } from 'vue'; import { onBeforeUnmount, onMounted, Transition, render, defineComponent, shallowRef } from 'vue'; import useState from '../hooks/useState'; import { objectType } from '../type'; import { getTargetWaveColor } from './util'; import wrapperRaf from '../raf'; function validateNum(value: number) { return Number.isNaN(value) ? 0 : value; } export interface WaveEffectProps { className: string; target: HTMLElement; } const WaveEffect = defineComponent({ props: { target: objectType(), className: String, }, setup(props) { const divRef = shallowRef(null); const [color, setWaveColor] = useState(null); const [borderRadius, setBorderRadius] = useState([]); const [left, setLeft] = useState(0); const [top, setTop] = useState(0); const [width, setWidth] = useState(0); const [height, setHeight] = useState(0); const [enabled, setEnabled] = useState(false); function syncPos() { const { target } = props; const nodeStyle = getComputedStyle(target); // Get wave color from target setWaveColor(getTargetWaveColor(target)); const isStatic = nodeStyle.position === 'static'; // Rect const { borderLeftWidth, borderTopWidth } = nodeStyle; setLeft(isStatic ? target.offsetLeft : validateNum(-parseFloat(borderLeftWidth))); setTop(isStatic ? target.offsetTop : validateNum(-parseFloat(borderTopWidth))); setWidth(target.offsetWidth); setHeight(target.offsetHeight); // Get border radius const { borderTopLeftRadius, borderTopRightRadius, borderBottomLeftRadius, borderBottomRightRadius, } = nodeStyle; setBorderRadius( [ borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, borderBottomLeftRadius, ].map(radius => validateNum(parseFloat(radius))), ); } // Add resize observer to follow size let resizeObserver: ResizeObserver; let rafId: number; let timeoutId: any; const clear = () => { clearTimeout(timeoutId); wrapperRaf.cancel(rafId); resizeObserver?.disconnect(); }; const removeDom = () => { const holder = divRef.value?.parentElement; if (holder) { render(null, holder); if (holder.parentElement) { holder.parentElement.removeChild(holder); } } }; onMounted(() => { clear(); timeoutId = setTimeout(() => { removeDom(); }, 5000); const { target } = props; if (target) { // We need delay to check position here // since UI may change after click rafId = wrapperRaf(() => { syncPos(); setEnabled(true); }); if (typeof ResizeObserver !== 'undefined') { resizeObserver = new ResizeObserver(syncPos); resizeObserver.observe(target); } } }); onBeforeUnmount(() => { clear(); }); const onTransitionend = (e: TransitionEvent) => { if (e.propertyName === 'opacity') { removeDom(); } }; return () => { if (!enabled.value) { return null; } const waveStyle = { left: `${left.value}px`, top: `${top.value}px`, width: `${width.value}px`, height: `${height.value}px`, borderRadius: borderRadius.value.map(radius => `${radius}px`).join(' '), } as CSSProperties & { [name: string]: number | string; }; if (color) { waveStyle['--wave-color'] = color.value as string; } return (
); }; }, }); function showWaveEffect(node: HTMLElement, className: string) { // Create holder const holder = document.createElement('div'); holder.style.position = 'absolute'; holder.style.left = `0px`; holder.style.top = `0px`; node?.insertBefore(holder, node?.firstChild); render(, holder); return () => { render(null, holder); if (holder.parentElement) { holder.parentElement.removeChild(holder); } }; } export default showWaveEffect; ================================================ FILE: components/_util/wave/index.tsx ================================================ import { computed, defineComponent, getCurrentInstance, nextTick, onBeforeUnmount, onMounted, watch, } from 'vue'; import useConfigInject from '../../config-provider/hooks/useConfigInject'; import isVisible from '../../vc-util/Dom/isVisible'; import classNames from '../classNames'; import { findDOMNode } from '../props-util'; import useStyle from './style'; import useWave from './useWave'; export interface WaveProps { disabled?: boolean; } export default defineComponent({ compatConfig: { MODE: 3 }, name: 'Wave', props: { disabled: Boolean, }, setup(props, { slots }) { const instance = getCurrentInstance(); const { prefixCls, wave } = useConfigInject('wave', props); // ============================== Style =============================== const [, hashId] = useStyle(prefixCls); // =============================== Wave =============================== const showWave = useWave( computed(() => classNames(prefixCls.value, hashId.value)), wave, ); let onClick: (e: MouseEvent) => void; const clear = () => { const node = findDOMNode(instance) as HTMLElement; node.removeEventListener('click', onClick, true); }; onMounted(() => { watch( () => props.disabled, () => { clear(); nextTick(() => { const node: HTMLElement = findDOMNode(instance); node?.removeEventListener('click', onClick, true); if (!node || node.nodeType !== 1 || props.disabled) { return; } // Click handler onClick = (e: MouseEvent) => { // Fix radio button click twice if ( (e.target as HTMLElement).tagName === 'INPUT' || !isVisible(e.target as HTMLElement) || // No need wave !node.getAttribute || node.getAttribute('disabled') || (node as HTMLInputElement).disabled || node.className.includes('disabled') || node.className.includes('-leave') ) { return; } showWave(); }; // Bind events node.addEventListener('click', onClick, true); }); }, { immediate: true, flush: 'post', }, ); }); onBeforeUnmount(() => { clear(); }); return () => { // ============================== Render ============================== const children = slots.default?.()[0]; return children; }; }, }); ================================================ FILE: components/_util/wave/style.ts ================================================ import { genComponentStyleHook } from '../../theme/internal'; import type { FullToken, GenerateStyle } from '../../theme/internal'; // eslint-disable-next-line @typescript-eslint/no-empty-interface export interface ComponentToken {} export type WaveToken = FullToken<'Wave'>; const genWaveStyle: GenerateStyle = token => { const { componentCls, colorPrimary } = token; return { [componentCls]: { position: 'absolute', background: 'transparent', pointerEvents: 'none', boxSizing: 'border-box', color: `var(--wave-color, ${colorPrimary})`, boxShadow: `0 0 0 0 currentcolor`, opacity: 0.2, // =================== Motion =================== '&.wave-motion-appear': { transition: [ `box-shadow 0.4s ${token.motionEaseOutCirc}`, `opacity 2s ${token.motionEaseOutCirc}`, ].join(','), '&-active': { boxShadow: `0 0 0 6px currentcolor`, opacity: 0, }, }, }, }; }; export default genComponentStyleHook('Wave', token => [genWaveStyle(token)]); ================================================ FILE: components/_util/wave/useWave.ts ================================================ import type { ComputedRef, Ref } from 'vue'; import { onBeforeUnmount, getCurrentInstance } from 'vue'; import { findDOMNode } from '../props-util'; import showWaveEffect from './WaveEffect'; export default function useWave( className: Ref, wave?: ComputedRef<{ disabled?: boolean }>, ): VoidFunction { const instance = getCurrentInstance(); let stopWave: () => void; function showWave() { const node = findDOMNode(instance); stopWave?.(); if (wave?.value?.disabled || !node) { return; } stopWave = showWaveEffect(node, className.value); } onBeforeUnmount(() => { stopWave?.(); }); return showWave; } ================================================ FILE: components/_util/wave/util.ts ================================================ export function isNotGrey(color: string) { // eslint-disable-next-line no-useless-escape const match = (color || '').match(/rgba?\((\d*), (\d*), (\d*)(, [\d.]*)?\)/); if (match && match[1] && match[2] && match[3]) { return !(match[1] === match[2] && match[2] === match[3]); } return true; } export function isValidWaveColor(color: string) { return ( color && color !== '#fff' && color !== '#ffffff' && color !== 'rgb(255, 255, 255)' && color !== 'rgba(255, 255, 255, 1)' && isNotGrey(color) && !/rgba\((?:\d*, ){3}0\)/.test(color) && // any transparent rgba color color !== 'transparent' ); } export function getTargetWaveColor(node: HTMLElement) { const { borderTopColor, borderColor, backgroundColor } = getComputedStyle(node); if (isValidWaveColor(borderTopColor)) { return borderTopColor; } if (isValidWaveColor(borderColor)) { return borderColor; } if (isValidWaveColor(backgroundColor)) { return backgroundColor; } return null; } ================================================ FILE: components/affix/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/affix/demo/basic.vue correctly 1`] = `

`; exports[`renders ./components/affix/demo/on-change.vue correctly 1`] = `
`; exports[`renders ./components/affix/demo/target.vue correctly 1`] = `
`; ================================================ FILE: components/affix/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('affix'); ================================================ FILE: components/affix/__tests__/index.test.js ================================================ import Affix from '..'; import Button from '../../button'; import { mount } from '@vue/test-utils'; import { spyElementPrototype } from '../../__tests__/util/domHook'; const events = {}; const AffixMounter = { props: ['offsetBottom', 'offsetTop'], mounted() { this.$refs.container.addEventListener = jest.fn().mockImplementation((event, cb) => { events[event] = cb; }); }, methods: { getTarget() { return this.$refs.container; }, }, render() { return (
this.$refs.container} ref="affix">
); }, }; describe('Affix Render', () => { let wrapper; let domMock; const classRect = { container: { top: 1000, bottom: 100, }, }; beforeAll(() => { document.body.innerHTML = ''; jest.useFakeTimers(); domMock = spyElementPrototype(HTMLElement, 'getBoundingClientRect', function mockBounding() { return ( classRect[this.className] || { top: 0, bottom: 0, } ); }); }); afterAll(() => { jest.useRealTimers(); domMock.mockRestore(); }); const movePlaceholder = top => { classRect.fixed = { top, bottom: top, }; events.scroll({ type: 'scroll', }); jest.runAllTimers(); }; it('Anchor render perfectly', () => { wrapper = mount(AffixMounter, { attachTo: 'body' }); jest.runAllTimers(); movePlaceholder(0); expect(wrapper.vm.$refs.affix.affixStyle).toBeFalsy(); // movePlaceholder(100); // expect(wrapper.vm.$refs.affix.affixStyle).toBeTruthy(); movePlaceholder(0); expect(wrapper.vm.$refs.affix.affixStyle).toBeFalsy(); }); it('support offsetBottom', () => { wrapper = mount(AffixMounter, { attachTo: 'body', props: { offsetBottom: 0, }, }); jest.runAllTimers(); movePlaceholder(300); //expect(wrapper.vm.$refs.affix.affixStyle).toBeTruthy(); movePlaceholder(0); expect(wrapper.vm.$refs.affix.affixStyle).toBeFalsy(); // movePlaceholder(300); // expect(wrapper.vm.$refs.affix.affixStyle).toBeTruthy(); }); // it('updatePosition when offsetTop changed', () => { // wrapper = mount(AffixMounter, { // attachTo: 'body', // props: { // offsetTop: 0, // }, // }); // jest.runAllTimers(); // movePlaceholder(-100); // expect(wrapper.vm.$refs.affix.affixStyle.top).toBe('0px'); // wrapper.setProps({ // offsetTop: 10, // }); // jest.runAllTimers(); // expect(wrapper.vm.$refs.affix.affixStyle.top).toBe('10px'); // }); }); ================================================ FILE: components/affix/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本 en-US: Basic --- ## zh-CN 最简单的用法。 ## en-US The simplest usage. ================================================ FILE: components/affix/demo/index.vue ================================================ ================================================ FILE: components/affix/demo/on-change.vue ================================================ --- order: 1 title: zh-CN: 固定状态改变的回调 en-US: Callback --- ## zh-CN 可以获得是否固定的状态。 ## en-US Callback with affixed state. ================================================ FILE: components/affix/demo/target.vue ================================================ --- order: 2 title: zh-CN: 滚动容器 en-US: Container to scroll. --- ## zh-CN 用 `target` 设置 `Affix` 需要监听其滚动事件的元素,默认为 `window`。 ## en-US Set a `target` for 'Affix', which is listen to scroll event of target element (default is `window`). ================================================ FILE: components/affix/index.en-US.md ================================================ --- category: Components type: Other title: Affix cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*YSm4RI3iOJ8AAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*03dxS64LxeQAAAAAAAAAAAAADrJ8AQ/original --- Wrap Affix around another component to make it stick the viewport. ## When To Use On longer web pages, its helpful for some content to stick to the viewport. This is common for menus and actions. Please note that Affix should not cover other content on the page, especially when the size of the viewport is small. ## API | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | offsetBottom | Offset from the bottom of the viewport (in pixels) | number | - | | | offsetTop | Offset from the top of the viewport (in pixels) | number | 0 | | | target | Specifies the scrollable area DOM node | () => HTMLElement | () => window | | ### events | Events Name | Description | Arguments | Version | | ----------- | ---------------------------------------- | --------------------------- | ------- | | change | Callback for when Affix state is changed | (affixed?: boolean) => void | | **Note:** Children of `Affix` must not have the property `position: absolute`, but you can set `position: absolute` on `Affix` itself: ```html ... ``` ## FAQ ### When binding container with `target` in Affix, elements sometimes move out of the container. We only listen to container scroll events for performance consideration. You can add custom listeners if you still want to, like react demo Related issues:[#3938](https://github.com/ant-design/ant-design/issues/3938) [#5642](https://github.com/ant-design/ant-design/issues/5642) [#16120](https://github.com/ant-design/ant-design/issues/16120) ### When Affix is ​​used in a horizontal scroll container, the position of the element `left` is incorrect. Affix is ​​generally only applicable to areas with one-way scrolling, and only supports usage in vertical scrolling containers. If you want to use it in a horizontal container, you can consider implementing with the native `position: sticky` property. ================================================ FILE: components/affix/index.tsx ================================================ import type { ComponentPublicInstance, CSSProperties, ExtractPropTypes, PropType } from 'vue'; import { defineComponent, shallowRef, reactive, watch, onMounted, getCurrentInstance, computed, onUnmounted, onUpdated, } from 'vue'; import classNames from '../_util/classNames'; import ResizeObserver from '../vc-resize-observer'; import throttleByAnimationFrame from '../_util/throttleByAnimationFrame'; import { withInstall } from '../_util/type'; import { addObserveTarget, removeObserveTarget, getTargetRect, getFixedTop, getFixedBottom, } from './utils'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import omit from '../_util/omit'; import useStyle from './style'; function getDefaultTarget() { return typeof window !== 'undefined' ? window : null; } enum AffixStatus { None, Prepare, } export interface AffixState { affixStyle?: CSSProperties; placeholderStyle?: CSSProperties; status: AffixStatus; lastAffix: boolean; prevTarget: Window | HTMLElement | null; } // Affix export const affixProps = () => ({ /** * 距离窗口顶部达到指定偏移量后触发 */ offsetTop: Number, /** 距离窗口底部达到指定偏移量后触发 */ offsetBottom: Number, /** 设置 Affix 需要监听其滚动事件的元素,值为一个返回对应 DOM 元素的函数 */ target: { type: Function as PropType<() => Window | HTMLElement | null>, default: getDefaultTarget, }, prefixCls: String, /** 固定状态改变时触发的回调函数 */ onChange: Function as PropType, onTestUpdatePosition: Function as PropType, }); export type AffixProps = Partial>>; export type AffixEmits = { change: (lastAffix: boolean) => void; testUpdatePosition: () => void; }; export type AffixExpose = { updatePosition: (...args: any[]) => void; lazyUpdatePosition: (...args: any[]) => void; }; export type AffixInstance = ComponentPublicInstance; const Affix = defineComponent({ compatConfig: { MODE: 3 }, name: 'AAffix', inheritAttrs: false, props: affixProps(), setup(props, { slots, emit, expose, attrs }) { const placeholderNode = shallowRef(); const fixedNode = shallowRef(); const state = reactive({ affixStyle: undefined, placeholderStyle: undefined, status: AffixStatus.None, lastAffix: false, prevTarget: null, timeout: null, }); const currentInstance = getCurrentInstance(); const offsetTop = computed(() => { return props.offsetBottom === undefined && props.offsetTop === undefined ? 0 : props.offsetTop; }); const offsetBottom = computed(() => props.offsetBottom); const measure = () => { const { status, lastAffix } = state; const { target } = props; if (status !== AffixStatus.Prepare || !fixedNode.value || !placeholderNode.value || !target) { return; } const targetNode = target(); if (!targetNode) { return; } const newState = { status: AffixStatus.None, } as AffixState; const placeholderRect = getTargetRect(placeholderNode.value as HTMLElement); if ( placeholderRect.top === 0 && placeholderRect.left === 0 && placeholderRect.width === 0 && placeholderRect.height === 0 ) { return; } const targetRect = getTargetRect(targetNode); const fixedTop = getFixedTop(placeholderRect, targetRect, offsetTop.value); const fixedBottom = getFixedBottom(placeholderRect, targetRect, offsetBottom.value); if ( placeholderRect.top === 0 && placeholderRect.left === 0 && placeholderRect.width === 0 && placeholderRect.height === 0 ) { return; } if (fixedTop !== undefined) { const width = `${placeholderRect.width}px`; const height = `${placeholderRect.height}px`; newState.affixStyle = { position: 'fixed', top: fixedTop, width, height, }; newState.placeholderStyle = { width, height, }; } else if (fixedBottom !== undefined) { const width = `${placeholderRect.width}px`; const height = `${placeholderRect.height}px`; newState.affixStyle = { position: 'fixed', bottom: fixedBottom, width, height, }; newState.placeholderStyle = { width, height, }; } newState.lastAffix = !!newState.affixStyle; if (lastAffix !== newState.lastAffix) { emit('change', newState.lastAffix); } // update state Object.assign(state, newState); }; const prepareMeasure = () => { Object.assign(state, { status: AffixStatus.Prepare, affixStyle: undefined, placeholderStyle: undefined, }); // Test if `updatePosition` called if (process.env.NODE_ENV === 'test') { emit('testUpdatePosition'); } }; const updatePosition = throttleByAnimationFrame(() => { prepareMeasure(); }); const lazyUpdatePosition = throttleByAnimationFrame(() => { const { target } = props; const { affixStyle } = state; // Check position change before measure to make Safari smooth if (target && affixStyle) { const targetNode = target(); if (targetNode && placeholderNode.value) { const targetRect = getTargetRect(targetNode); const placeholderRect = getTargetRect(placeholderNode.value as HTMLElement); const fixedTop = getFixedTop(placeholderRect, targetRect, offsetTop.value); const fixedBottom = getFixedBottom(placeholderRect, targetRect, offsetBottom.value); if ( (fixedTop !== undefined && affixStyle.top === fixedTop) || (fixedBottom !== undefined && affixStyle.bottom === fixedBottom) ) { return; } } } // Directly call prepare measure since it's already throttled. prepareMeasure(); }); expose({ updatePosition, lazyUpdatePosition, }); watch( () => props.target, val => { const newTarget = val?.() || null; if (state.prevTarget !== newTarget) { removeObserveTarget(currentInstance); if (newTarget) { addObserveTarget(newTarget, currentInstance); // Mock Event object. updatePosition(); } state.prevTarget = newTarget; } }, ); watch(() => [props.offsetTop, props.offsetBottom], updatePosition); onMounted(() => { const { target } = props; if (target) { // [Legacy] Wait for parent component ref has its value. // We should use target as directly element instead of function which makes element check hard. state.timeout = setTimeout(() => { addObserveTarget(target(), currentInstance); // Mock Event object. updatePosition(); }); } }); onUpdated(() => { measure(); }); onUnmounted(() => { clearTimeout(state.timeout); removeObserveTarget(currentInstance); (updatePosition as any).cancel(); // https://github.com/ant-design/ant-design/issues/22683 (lazyUpdatePosition as any).cancel(); }); const { prefixCls } = useConfigInject('affix', props); const [wrapSSR, hashId] = useStyle(prefixCls); return () => { const { affixStyle, placeholderStyle, status } = state; const className = classNames({ [prefixCls.value]: affixStyle, [hashId.value]: true, }); const restProps = omit(props, [ 'prefixCls', 'offsetTop', 'offsetBottom', 'target', 'onChange', 'onTestUpdatePosition', ]); return wrapSSR(
{affixStyle && , ); }; }, }); export default withInstall(Affix); ================================================ FILE: components/affix/index.zh-CN.md ================================================ --- category: Components subtitle: 固钉 type: 其他 title: Affix cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*YSm4RI3iOJ8AAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*03dxS64LxeQAAAAAAAAAAAAADrJ8AQ/original --- 将页面元素钉在可视范围。 ## 何时使用 当内容区域比较长,需要滚动页面时,这部分内容对应的操作或者导航需要在滚动范围内始终展现。常用于侧边菜单和按钮组合。 页面可视范围过小时,慎用此功能以免遮挡页面内容。 ## API | 成员 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | offsetBottom | 距离窗口底部达到指定偏移量后触发 | number | | | | offsetTop | 距离窗口顶部达到指定偏移量后触发 | number | 0 | | | target | 设置 `Affix` 需要监听其滚动事件的元素,值为一个返回对应 DOM 元素的函数 | () => HTMLElement | () => window | | ### 事件 | 事件名称 | 说明 | 回调参数 | 版本 | | | -------- | ---------------------------- | --------------------------- | ---- | --- | | change | 固定状态改变时触发的回调函数 | (affixed?: boolean) => void | - | | **注意:**`Affix` 内的元素不要使用绝对定位,如需要绝对定位的效果,可以直接设置 `Affix` 为绝对定位: ```html ... ``` ## FAQ ### Affix 使用 `target` 绑定容器时,元素会跑到容器外。 从性能角度考虑,我们只监听容器滚动事件。如果希望任意滚动,你可以在窗体添加滚动监听, 参考 react 版本示例 相关 issue:[#3938](https://github.com/ant-design/ant-design/issues/3938) [#5642](https://github.com/ant-design/ant-design/issues/5642) [#16120](https://github.com/ant-design/ant-design/issues/16120) ### Affix 在水平滚动容器中使用时, 元素 `left` 位置不正确。 Affix 一般只适用于单向滚动的区域,只支持在垂直滚动容器中使用。如果希望在水平容器中使用,你可以考虑使用 原生 `position: sticky` 实现。 相关 issue: [#29108](https://github.com/ant-design/ant-design/issues/29108) ================================================ FILE: components/affix/style/index.ts ================================================ import type { CSSObject } from '../../_util/cssinjs'; import type { FullToken, GenerateStyle } from '../../theme/internal'; import { genComponentStyleHook, mergeToken } from '../../theme/internal'; interface AffixToken extends FullToken<'Affix'> { zIndexPopup: number; } // ============================== Shared ============================== const genSharedAffixStyle: GenerateStyle = (token): CSSObject => { const { componentCls } = token; return { [componentCls]: { position: 'fixed', zIndex: token.zIndexPopup, }, }; }; // ============================== Export ============================== export default genComponentStyleHook('Affix', token => { const affixToken = mergeToken(token, { zIndexPopup: token.zIndexBase + 10, }); return [genSharedAffixStyle(affixToken)]; }); ================================================ FILE: components/affix/utils.ts ================================================ import addEventListener from '../vc-util/Dom/addEventListener'; import supportsPassive from '../_util/supportsPassive'; export type BindElement = HTMLElement | Window | null | undefined; export function getTargetRect(target: BindElement): DOMRect { return target !== window ? (target as HTMLElement).getBoundingClientRect() : ({ top: 0, bottom: window.innerHeight } as DOMRect); } export function getFixedTop(placeholderRect: DOMRect, targetRect: DOMRect, offsetTop: number) { if (offsetTop !== undefined && targetRect.top > placeholderRect.top - offsetTop) { return `${offsetTop + targetRect.top}px`; } return undefined; } export function getFixedBottom( placeholderRect: DOMRect, targetRect: DOMRect, offsetBottom: number, ) { if (offsetBottom !== undefined && targetRect.bottom < placeholderRect.bottom + offsetBottom) { const targetBottomOffset = window.innerHeight - targetRect.bottom; return `${offsetBottom + targetBottomOffset}px`; } return undefined; } // ======================== Observer ======================== const TRIGGER_EVENTS = [ 'resize', 'scroll', 'touchstart', 'touchmove', 'touchend', 'pageshow', 'load', ]; interface ObserverEntity { target: HTMLElement | Window; affixList: any[]; eventHandlers: { [eventName: string]: any }; } let observerEntities: ObserverEntity[] = []; export function getObserverEntities() { // Only used in test env. Can be removed if refactor. return observerEntities; } export function addObserveTarget(target: HTMLElement | Window | null, affix: T): void { if (!target) return; let entity = observerEntities.find(item => item.target === target); if (entity) { entity.affixList.push(affix); } else { entity = { target, affixList: [affix], eventHandlers: {}, }; observerEntities.push(entity); // Add listener TRIGGER_EVENTS.forEach(eventName => { entity!.eventHandlers[eventName] = addEventListener(target, eventName, () => { entity!.affixList.forEach( targetAffix => { const { lazyUpdatePosition } = (targetAffix as any).exposed; lazyUpdatePosition(); }, (eventName === 'touchstart' || eventName === 'touchmove') && supportsPassive ? ({ passive: true } as EventListenerOptions) : false, ); }); }); } } export function removeObserveTarget(affix: T): void { const observerEntity = observerEntities.find(oriObserverEntity => { const hasAffix = oriObserverEntity.affixList.some(item => item === affix); if (hasAffix) { oriObserverEntity.affixList = oriObserverEntity.affixList.filter(item => item !== affix); } return hasAffix; }); if (observerEntity && observerEntity.affixList.length === 0) { observerEntities = observerEntities.filter(item => item !== observerEntity); // Remove listener TRIGGER_EVENTS.forEach(eventName => { const handler = observerEntity.eventHandlers[eventName]; if (handler && handler.remove) { handler.remove(); } }); } } ================================================ FILE: components/alert/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/alert/demo/action.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/banner.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/basic.vue correctly 1`] = ` `; exports[`renders ./components/alert/demo/closable.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/close-text.vue correctly 1`] = ` `; exports[`renders ./components/alert/demo/custom-icon.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/description.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/icon.vue correctly 1`] = `
`; exports[`renders ./components/alert/demo/smooth-closed.vue correctly 1`] = ` `; exports[`renders ./components/alert/demo/style.vue correctly 1`] = `
`; ================================================ FILE: components/alert/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('alert'); ================================================ FILE: components/alert/__tests__/index.test.js ================================================ import { mount } from '@vue/test-utils'; import Alert from '..'; describe('Alert', () => { beforeAll(() => { jest.useFakeTimers(); }); afterAll(() => { jest.useRealTimers(); }); it('could be closed', () => { const onClose = jest.fn(); const afterClose = jest.fn(); const wrapper = mount({ render() { return ( ); }, }); wrapper.find('.ant-alert-close-icon').trigger('click'); expect(onClose).toHaveBeenCalled(); jest.runAllTimers(); wrapper.vm.$refs.alert.animationEnd(); expect(afterClose).toHaveBeenCalled(); }); describe('data and aria props', () => { it('sets data attributes on input', () => { const wrapper = mount({ render() { return ; }, }); const input = wrapper.find('.ant-alert').element; expect(input.getAttribute('data-test')).toBe('test-id'); expect(input.getAttribute('data-id')).toBe('12345'); }); it('sets aria attributes on input', () => { const wrapper = mount({ render() { return ; }, }); const input = wrapper.find('.ant-alert').element; expect(input.getAttribute('aria-describedby')).toBe('some-label'); }); it('sets role attribute on input', () => { const wrapper = mount({ render() { return ; }, }); const input = wrapper.find('.ant-alert').element; expect(input.getAttribute('role')).toBe('status'); }); }); }); ================================================ FILE: components/alert/demo/action.vue ================================================ --- order: 0 title: zh-CN: 操作 en-US: Action --- ## zh-CN 可以在右上角自定义操作项。 ## en-US Custom action. ================================================ FILE: components/alert/demo/banner.vue ================================================ --- order: 6 title: zh-CN: 顶部公告 en-US: Banner --- ## zh-CN 最简单的用法,适用于简短的警告提示。 ## en-US Display Alert as a banner at top of page. ================================================ FILE: components/alert/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本用法 en-US: Basic usage --- ## zh-CN 最简单的用法,适用于简短的警告提示。 ## en-US The simplest usage for short messages. ================================================ FILE: components/alert/demo/closable.vue ================================================ --- order: 2 title: zh-CN: 可关闭的警告提示 en-US: Customized Close Text --- ## zh-CN 显示关闭按钮,点击可关闭警告提示。 ## en-US To show close button. ================================================ FILE: components/alert/demo/close-text.vue ================================================ --- order: 5 title: zh-CN: 自定义关闭 en-US: Customized Close Text --- ## zh-CN 自定义图标让信息类型更加醒目。 ## en-US Replace the default icon with customized text. ================================================ FILE: components/alert/demo/custom-icon.vue ================================================ --- order: 7 title: zh-CN: 自定义图标 en-US: Custom Icon --- ## zh-CN 可以自定义关闭,自定义的文字会替换原先的关闭 `Icon`。 ## en-US Custom Icon make information more clear and more friendly. ================================================ FILE: components/alert/demo/description.vue ================================================ --- order: 3 title: zh-CN: 含有辅助性文字介绍 en-US: Description --- ## zh-CN 含有辅助性文字介绍的警告提示。 ## en-US Additional description for alert message. ================================================ FILE: components/alert/demo/icon.vue ================================================ --- order: 4 title: zh-CN: 图标 en-US: Icon --- ## zh-CN 可口的图标让信息类型更加醒目。 ## en-US Decent icon make information more clear and more friendly. ================================================ FILE: components/alert/demo/index.vue ================================================ ================================================ FILE: components/alert/demo/smooth-closed.vue ================================================ --- order: 8 title: zh-CN: 平滑地卸载 en-US: Smoothly Unmount --- ## zh-CN 平滑、自然的卸载提示。 ## en-US Smoothly and unaffectedly unmount Alert. ================================================ FILE: components/alert/demo/style.vue ================================================ --- order: 1 title: zh-CN: 四种样式 en-US: More types --- ## zh-CN 共有四种样式 `success`、`info`、`warning`、`error`。 ## en-US There are 4 types of Alert: `success`, `info`, `warning`, `error`. ================================================ FILE: components/alert/index.en-US.md ================================================ --- category: Components type: Feedback title: Alert cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*Ct7bT7rrTTAAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*-U3XQqYN7VsAAAAAAAAAAAAADrJ8AQ/original --- Alert component for feedback. ## When To Use - When you need to show alert messages to users. - When you need a persistent static container which is closable by user actions. ## API | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | action | The action of Alert | slot | - | 4.0.0 | | afterClose | Called when close animation is finished | () => void | - | | | banner | Whether to show as banner | boolean | false | | | closable | Whether Alert can be closed | boolean | | | | closeIcon | Custom close icon | slot | `` | 3.0 | | closeText | Close text to show | string\|slot | - | | | description | Additional content of Alert | string\|slot | - | | | icon | Custom icon, effective when `showIcon` is `true` | vnode \| slot | - | | | message | Content of Alert | string\|slot | - | | | showIcon | Whether to show icon | boolean | false,in `banner` mode default is true | | | type | Type of Alert styles, options: `success`, `info`, `warning`, `error` | string | `info`,in `banner` mode default is `warning` | | ### events | Events Name | Description | Arguments | Version | | ----------- | ----------------------------- | ----------------------- | ------- | | close | Callback when Alert is closed | (e: MouseEvent) => void | - | ================================================ FILE: components/alert/index.tsx ================================================ import type { CSSProperties, ExtractPropTypes, PropType } from 'vue'; import { computed, defineComponent, shallowRef, Transition } from 'vue'; import CloseOutlined from '@ant-design/icons-vue/CloseOutlined'; import CheckCircleOutlined from '@ant-design/icons-vue/CheckCircleOutlined'; import ExclamationCircleOutlined from '@ant-design/icons-vue/ExclamationCircleOutlined'; import InfoCircleOutlined from '@ant-design/icons-vue/InfoCircleOutlined'; import CloseCircleOutlined from '@ant-design/icons-vue/CloseCircleOutlined'; import CheckCircleFilled from '@ant-design/icons-vue/CheckCircleFilled'; import ExclamationCircleFilled from '@ant-design/icons-vue/ExclamationCircleFilled'; import InfoCircleFilled from '@ant-design/icons-vue/InfoCircleFilled'; import CloseCircleFilled from '@ant-design/icons-vue/CloseCircleFilled'; import classNames from '../_util/classNames'; import PropTypes from '../_util/vue-types'; import { getTransitionProps } from '../_util/transition'; import { isValidElement } from '../_util/props-util'; import { tuple, withInstall } from '../_util/type'; import { cloneElement } from '../_util/vnode'; import type { NodeMouseEventHandler } from '../vc-tree/contextTypes'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import useStyle from './style'; const iconMapFilled = { success: CheckCircleFilled, info: InfoCircleFilled, error: CloseCircleFilled, warning: ExclamationCircleFilled, }; const iconMapOutlined = { success: CheckCircleOutlined, info: InfoCircleOutlined, error: CloseCircleOutlined, warning: ExclamationCircleOutlined, }; const AlertTypes = tuple('success', 'info', 'warning', 'error'); export type AlertType = (typeof AlertTypes)[number]; export const alertProps = () => ({ /** * Type of Alert styles, options: `success`, `info`, `warning`, `error` */ type: PropTypes.oneOf(AlertTypes), /** Whether Alert can be closed */ closable: { type: Boolean, default: undefined }, /** Close text to show */ closeText: PropTypes.any, /** Content of Alert */ message: PropTypes.any, /** Additional content of Alert */ description: PropTypes.any, /** Trigger when animation ending of Alert */ afterClose: Function as PropType<() => void>, /** Whether to show icon */ showIcon: { type: Boolean, default: undefined }, prefixCls: String, banner: { type: Boolean, default: undefined }, icon: PropTypes.any, closeIcon: PropTypes.any, onClose: Function as PropType, }); export type AlertProps = Partial>>; const Alert = defineComponent({ compatConfig: { MODE: 3 }, name: 'AAlert', inheritAttrs: false, props: alertProps(), setup(props, { slots, emit, attrs, expose }) { const { prefixCls, direction } = useConfigInject('alert', props); const [wrapSSR, hashId] = useStyle(prefixCls); const closing = shallowRef(false); const closed = shallowRef(false); const alertNode = shallowRef(); const handleClose = (e: MouseEvent) => { e.preventDefault(); const dom = alertNode.value; dom.style.height = `${dom.offsetHeight}px`; // Magic code // 重复一次后才能正确设置 height dom.style.height = `${dom.offsetHeight}px`; closing.value = true; emit('close', e); }; const animationEnd = () => { closing.value = false; closed.value = true; props.afterClose?.(); }; const mergedType = computed(() => { const { type } = props; if (type !== undefined) { return type; } // banner 模式默认为警告 return props.banner ? 'warning' : 'info'; }); expose({ animationEnd }); const motionStyle = shallowRef({}); return () => { const { banner, closeIcon: customCloseIcon = slots.closeIcon?.() } = props; let { closable, showIcon } = props; const closeText = props.closeText ?? slots.closeText?.(); const description = props.description ?? slots.description?.(); const message = props.message ?? slots.message?.(); const icon = props.icon ?? slots.icon?.(); const action = slots.action?.(); // banner模式默认有 Icon showIcon = banner && showIcon === undefined ? true : showIcon; const IconType = (description ? iconMapOutlined : iconMapFilled)[mergedType.value] || null; // closeable when closeText is assigned if (closeText) { closable = true; } const prefixClsValue = prefixCls.value; const alertCls = classNames(prefixClsValue, { [`${prefixClsValue}-${mergedType.value}`]: true, [`${prefixClsValue}-closing`]: closing.value, [`${prefixClsValue}-with-description`]: !!description, [`${prefixClsValue}-no-icon`]: !showIcon, [`${prefixClsValue}-banner`]: !!banner, [`${prefixClsValue}-closable`]: closable, [`${prefixClsValue}-rtl`]: direction.value === 'rtl', [hashId.value]: true, }); const closeIcon = closable ? ( ) : null; const iconNode = (icon && (isValidElement(icon) ? ( cloneElement(icon, { class: `${prefixClsValue}-icon`, }) ) : ( {icon} ))) || ; const transitionProps = getTransitionProps(`${prefixClsValue}-motion`, { appear: false, css: true, onAfterLeave: animationEnd, onBeforeLeave: (node: HTMLDivElement) => { node.style.maxHeight = `${node.offsetHeight}px`; }, onLeave: (node: HTMLDivElement) => { node.style.maxHeight = '0px'; }, }); return wrapSSR( closed.value ? null : ( ), ); }; }, }); export default withInstall(Alert); ================================================ FILE: components/alert/index.zh-CN.md ================================================ --- category: Components type: 反馈 title: Alert subtitle: 警告提示 cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*Ct7bT7rrTTAAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*-U3XQqYN7VsAAAAAAAAAAAAADrJ8AQ/original --- 警告提示,展现需要关注的信息。 ## 何时使用 - 当某个页面需要向用户显示警告的信息时。 - 非浮层的静态展现形式,始终展现,不会自动消失,用户可以点击关闭。 ## API | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | action | 自定义操作项 | slot | - | 4.0.0 | | afterClose | 关闭动画结束后触发的回调函数 | () => void | - | | | banner | 是否用作顶部公告 | boolean | false | | | closable | 默认不显示关闭按钮 | boolean | 无 | | | closeIcon | 自定义关闭 Icon | slot | `` | 3.0 | | closeText | 自定义关闭按钮 | string\|slot | 无 | | | description | 警告提示的辅助性文字介绍 | string\|slot | 无 | | | icon | 自定义图标,`showIcon` 为 `true` 时有效 | vnode\|slot | - | | | message | 警告提示内容 | string\|slot | 无 | | | showIcon | 是否显示辅助图标 | boolean | false,`banner` 模式下默认值为 true | | | type | 指定警告提示的样式,有四种选择 `success`、`info`、`warning`、`error` | string | `info`,`banner` 模式下默认值为 `warning` | | ### 事件 | 事件名称 | 说明 | 回调参数 | 版本 | | -------- | -------------------- | ----------------------- | ---- | | close | 关闭时触发的回调函数 | (e: MouseEvent) => void | - | ================================================ FILE: components/alert/style/index.ts ================================================ import type { CSSInterpolation, CSSObject } from '../../_util/cssinjs'; import type { FullToken, GenerateStyle } from '../../theme/internal'; import { genComponentStyleHook, mergeToken } from '../../theme/internal'; import { resetComponent } from '../../style'; export interface ComponentToken {} type AlertToken = FullToken<'Alert'> & { alertIconSizeLG: number; alertPaddingHorizontal: number; }; const genAlertTypeStyle = ( bgColor: string, borderColor: string, iconColor: string, token: AlertToken, alertCls: string, ): CSSObject => ({ backgroundColor: bgColor, border: `${token.lineWidth}px ${token.lineType} ${borderColor}`, [`${alertCls}-icon`]: { color: iconColor, }, }); export const genBaseStyle: GenerateStyle = (token: AlertToken): CSSObject => { const { componentCls, motionDurationSlow: duration, marginXS, marginSM, fontSize, fontSizeLG, lineHeight, borderRadiusLG: borderRadius, motionEaseInOutCirc, alertIconSizeLG, colorText, paddingContentVerticalSM, alertPaddingHorizontal, paddingMD, paddingContentHorizontalLG, } = token; return { [componentCls]: { ...resetComponent(token), position: 'relative', display: 'flex', alignItems: 'center', padding: `${paddingContentVerticalSM}px ${alertPaddingHorizontal}px`, // Fixed horizontal padding here. wordWrap: 'break-word', borderRadius, [`&${componentCls}-rtl`]: { direction: 'rtl', }, [`${componentCls}-content`]: { flex: 1, minWidth: 0, }, [`${componentCls}-icon`]: { marginInlineEnd: marginXS, lineHeight: 0, }, [`&-description`]: { display: 'none', fontSize, lineHeight, }, '&-message': { color: colorText, }, [`&${componentCls}-motion-leave`]: { overflow: 'hidden', opacity: 1, transition: `max-height ${duration} ${motionEaseInOutCirc}, opacity ${duration} ${motionEaseInOutCirc}, padding-top ${duration} ${motionEaseInOutCirc}, padding-bottom ${duration} ${motionEaseInOutCirc}, margin-bottom ${duration} ${motionEaseInOutCirc}`, }, [`&${componentCls}-motion-leave-active`]: { maxHeight: 0, marginBottom: '0 !important', paddingTop: 0, paddingBottom: 0, opacity: 0, }, }, [`${componentCls}-with-description`]: { alignItems: 'flex-start', paddingInline: paddingContentHorizontalLG, paddingBlock: paddingMD, [`${componentCls}-icon`]: { marginInlineEnd: marginSM, fontSize: alertIconSizeLG, lineHeight: 0, }, [`${componentCls}-message`]: { display: 'block', marginBottom: marginXS, color: colorText, fontSize: fontSizeLG, }, [`${componentCls}-description`]: { display: 'block', }, }, [`${componentCls}-banner`]: { marginBottom: 0, border: '0 !important', borderRadius: 0, }, }; }; export const genTypeStyle: GenerateStyle = (token: AlertToken): CSSObject => { const { componentCls, colorSuccess, colorSuccessBorder, colorSuccessBg, colorWarning, colorWarningBorder, colorWarningBg, colorError, colorErrorBorder, colorErrorBg, colorInfo, colorInfoBorder, colorInfoBg, } = token; return { [componentCls]: { '&-success': genAlertTypeStyle( colorSuccessBg, colorSuccessBorder, colorSuccess, token, componentCls, ), '&-info': genAlertTypeStyle(colorInfoBg, colorInfoBorder, colorInfo, token, componentCls), '&-warning': genAlertTypeStyle( colorWarningBg, colorWarningBorder, colorWarning, token, componentCls, ), '&-error': { ...genAlertTypeStyle(colorErrorBg, colorErrorBorder, colorError, token, componentCls), [`${componentCls}-description > pre`]: { margin: 0, padding: 0, }, }, }, }; }; export const genActionStyle: GenerateStyle = (token: AlertToken): CSSObject => { const { componentCls, iconCls, motionDurationMid, marginXS, fontSizeIcon, colorIcon, colorIconHover, } = token; return { [componentCls]: { [`&-action`]: { marginInlineStart: marginXS, }, [`${componentCls}-close-icon`]: { marginInlineStart: marginXS, padding: 0, overflow: 'hidden', fontSize: fontSizeIcon, lineHeight: `${fontSizeIcon}px`, backgroundColor: 'transparent', border: 'none', outline: 'none', cursor: 'pointer', [`${iconCls}-close`]: { color: colorIcon, transition: `color ${motionDurationMid}`, '&:hover': { color: colorIconHover, }, }, }, '&-close-text': { color: colorIcon, transition: `color ${motionDurationMid}`, '&:hover': { color: colorIconHover, }, }, }, }; }; export const genAlertStyle: GenerateStyle = (token: AlertToken): CSSInterpolation => [ genBaseStyle(token), genTypeStyle(token), genActionStyle(token), ]; export default genComponentStyleHook('Alert', token => { const { fontSizeHeading3 } = token; const alertToken = mergeToken(token, { alertIconSizeLG: fontSizeHeading3, alertPaddingHorizontal: 12, // Fixed value here. }); return [genAlertStyle(alertToken)]; }); ================================================ FILE: components/anchor/Anchor.tsx ================================================ import type { CSSProperties, ExtractPropTypes, PropType } from 'vue'; import { defineComponent, nextTick, onBeforeUnmount, onMounted, onUpdated, reactive, ref, computed, } from 'vue'; import scrollIntoView from 'scroll-into-view-if-needed'; import classNames from '../_util/classNames'; import addEventListener from '../vc-util/Dom/addEventListener'; import Affix from '../affix'; import scrollTo from '../_util/scrollTo'; import getScroll from '../_util/getScroll'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import useProvideAnchor from './context'; import useStyle from './style'; import type { AnchorLinkItemProps } from './AnchorLink'; import AnchorLink from './AnchorLink'; import PropTypes from '../_util/vue-types'; import devWarning from '../vc-util/devWarning'; import { arrayType } from '../_util/type'; export type AnchorDirection = 'vertical' | 'horizontal'; function getDefaultContainer() { return window; } function getOffsetTop(element: HTMLElement, container: AnchorContainer): number { if (!element.getClientRects().length) { return 0; } const rect = element.getBoundingClientRect(); if (rect.width || rect.height) { if (container === window) { container = element.ownerDocument!.documentElement!; return rect.top - container.clientTop; } return rect.top - (container as HTMLElement).getBoundingClientRect().top; } return rect.top; } const sharpMatcherRegx = /#([\S ]+)$/; interface Section { link: string; top: number; } export type AnchorContainer = HTMLElement | Window; export const anchorProps = () => ({ prefixCls: String, offsetTop: Number, bounds: Number, affix: { type: Boolean, default: true }, showInkInFixed: { type: Boolean, default: false }, getContainer: Function as PropType<() => AnchorContainer>, wrapperClass: String, wrapperStyle: { type: Object as PropType, default: undefined as CSSProperties }, getCurrentAnchor: Function as PropType<(activeLink: string) => string>, targetOffset: Number, items: arrayType(), direction: PropTypes.oneOf(['vertical', 'horizontal'] as AnchorDirection[]).def('vertical'), onChange: Function as PropType<(currentActiveLink: string) => void>, onClick: Function as PropType<(e: MouseEvent, link: { title: any; href: string }) => void>, }); export type AnchorProps = Partial>>; export interface AnchorState { scrollContainer: HTMLElement | Window; links: string[]; scrollEvent: any; animating: boolean; } export default defineComponent({ compatConfig: { MODE: 3 }, name: 'AAnchor', inheritAttrs: false, props: anchorProps(), setup(props, { emit, attrs, slots, expose }) { const { prefixCls, getTargetContainer, direction } = useConfigInject('anchor', props); const anchorDirection = computed(() => props.direction ?? 'vertical'); if (process.env.NODE_ENV !== 'production') { devWarning( props.items && typeof slots.default !== 'function', 'Anchor', '`Anchor children` is deprecated. Please use `items` instead.', ); } if (process.env.NODE_ENV !== 'production') { devWarning( !(anchorDirection.value === 'horizontal' && props.items?.some(n => 'children' in n)), 'Anchor', '`Anchor items#children` is not supported when `Anchor` direction is horizontal.', ); } const spanLinkNode = ref(null); const anchorRef = ref(); const state = reactive({ links: [], scrollContainer: null, scrollEvent: null, animating: false, }); const activeLink = ref(null); const getContainer = computed(() => { const { getContainer } = props; return getContainer || getTargetContainer?.value || getDefaultContainer; }); // func... const getCurrentAnchor = (offsetTop = 0, bounds = 5) => { const linkSections: Array
= []; const container = getContainer.value(); state.links.forEach(link => { const sharpLinkMatch = sharpMatcherRegx.exec(link.toString()); if (!sharpLinkMatch) { return; } const target = document.getElementById(sharpLinkMatch[1]); if (target) { const top = getOffsetTop(target, container); if (top < offsetTop + bounds) { linkSections.push({ link, top, }); } } }); if (linkSections.length) { const maxSection = linkSections.reduce((prev, curr) => (curr.top > prev.top ? curr : prev)); return maxSection.link; } return ''; }; const setCurrentActiveLink = (link: string) => { const { getCurrentAnchor } = props; if (activeLink.value === link) { return; } activeLink.value = typeof getCurrentAnchor === 'function' ? getCurrentAnchor(link) : link; emit('change', link); }; const handleScrollTo = (link: string) => { const { offsetTop, targetOffset } = props; setCurrentActiveLink(link); const sharpLinkMatch = sharpMatcherRegx.exec(link); if (!sharpLinkMatch) { return; } const targetElement = document.getElementById(sharpLinkMatch[1]); if (!targetElement) { return; } const container = getContainer.value(); const scrollTop = getScroll(container, true); const eleOffsetTop = getOffsetTop(targetElement, container); let y = scrollTop + eleOffsetTop; y -= targetOffset !== undefined ? targetOffset : offsetTop || 0; state.animating = true; scrollTo(y, { callback: () => { state.animating = false; }, getContainer: getContainer.value, }); }; expose({ scrollTo: handleScrollTo, }); const handleScroll = () => { if (state.animating) { return; } const { offsetTop, bounds, targetOffset } = props; const currentActiveLink = getCurrentAnchor( targetOffset !== undefined ? targetOffset : offsetTop || 0, bounds, ); setCurrentActiveLink(currentActiveLink); }; const updateInk = () => { const linkNode = anchorRef.value.querySelector(`.${prefixCls.value}-link-title-active`); if (linkNode && spanLinkNode.value) { const horizontalAnchor = anchorDirection.value === 'horizontal'; spanLinkNode.value.style.top = horizontalAnchor ? '' : `${linkNode.offsetTop + linkNode.clientHeight / 2}px`; spanLinkNode.value.style.height = horizontalAnchor ? '' : `${linkNode.clientHeight}px`; spanLinkNode.value.style.left = horizontalAnchor ? `${linkNode.offsetLeft}px` : ''; spanLinkNode.value.style.width = horizontalAnchor ? `${linkNode.clientWidth}px` : ''; if (horizontalAnchor) { scrollIntoView(linkNode, { scrollMode: 'if-needed', block: 'nearest', }); } } }; useProvideAnchor({ registerLink: (link: string) => { if (!state.links.includes(link)) { state.links.push(link); } }, unregisterLink: (link: string) => { const index = state.links.indexOf(link); if (index !== -1) { state.links.splice(index, 1); } }, activeLink, scrollTo: handleScrollTo, handleClick: (e, info) => { emit('click', e, info); }, direction: anchorDirection, }); onMounted(() => { nextTick(() => { const container = getContainer.value(); state.scrollContainer = container; state.scrollEvent = addEventListener(state.scrollContainer, 'scroll', handleScroll); handleScroll(); }); }); onBeforeUnmount(() => { if (state.scrollEvent) { state.scrollEvent.remove(); } }); onUpdated(() => { if (state.scrollEvent) { const currentContainer = getContainer.value(); if (state.scrollContainer !== currentContainer) { state.scrollContainer = currentContainer; state.scrollEvent.remove(); state.scrollEvent = addEventListener(state.scrollContainer, 'scroll', handleScroll); handleScroll(); } } updateInk(); }); const createNestedLink = (options?: AnchorLinkItemProps[]) => Array.isArray(options) ? options.map(option => { const { children, key, href, target, class: cls, style, title } = option; return ( {anchorDirection.value === 'vertical' ? createNestedLink(children) : null} ); }) : null; const [wrapSSR, hashId] = useStyle(prefixCls); return () => { const { offsetTop, affix, showInkInFixed } = props; const pre = prefixCls.value; const inkClass = classNames(`${pre}-ink`, { [`${pre}-ink-visible`]: activeLink.value, }); const wrapperClass = classNames(hashId.value, props.wrapperClass, `${pre}-wrapper`, { [`${pre}-wrapper-horizontal`]: anchorDirection.value === 'horizontal', [`${pre}-rtl`]: direction.value === 'rtl', }); const anchorClass = classNames(pre, { [`${pre}-fixed`]: !affix && !showInkInFixed, }); const wrapperStyle = { maxHeight: offsetTop ? `calc(100vh - ${offsetTop}px)` : '100vh', ...props.wrapperStyle, }; const anchorContent = (
{Array.isArray(props.items) ? createNestedLink(props.items) : slots.default?.()}
); return wrapSSR( !affix ? ( anchorContent ) : ( {anchorContent} ), ); }; }, }); ================================================ FILE: components/anchor/AnchorLink.tsx ================================================ import type { ExtractPropTypes } from 'vue'; import { defineComponent, nextTick, onBeforeUnmount, onMounted, watch } from 'vue'; import { initDefaultProps } from '../_util/props-util'; import classNames from '../_util/classNames'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import { useInjectAnchor } from './context'; import type { Key, VueNode, CustomSlotsType } from '../_util/type'; import { objectType, anyType } from '../_util/type'; import type { CSSProperties } from '../_util/cssinjs/hooks/useStyleRegister'; export const anchorLinkProps = () => ({ prefixCls: String, href: String, title: anyType VueNode)>(), target: String, /* private use */ customTitleProps: objectType(), }); export interface AnchorLinkItemProps { key: Key; class?: string; style?: CSSProperties; href?: string; target?: string; children?: AnchorLinkItemProps[]; title?: VueNode | ((item: AnchorLinkItemProps) => VueNode); } export type AnchorLinkProps = Partial>>; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'AAnchorLink', inheritAttrs: false, props: initDefaultProps(anchorLinkProps(), { href: '#' }), slots: Object as CustomSlotsType<{ title: any; default: any; customTitle: any; }>, setup(props, { slots, attrs }) { let mergedTitle = null; const { handleClick: contextHandleClick, scrollTo, unregisterLink, registerLink, activeLink, } = useInjectAnchor(); const { prefixCls } = useConfigInject('anchor', props); const handleClick = (e: Event) => { const { href } = props; contextHandleClick(e, { title: mergedTitle, href }); scrollTo(href); }; watch( () => props.href, (val, oldVal) => { nextTick(() => { unregisterLink(oldVal); registerLink(val); }); }, ); onMounted(() => { registerLink(props.href); }); onBeforeUnmount(() => { unregisterLink(props.href); }); return () => { const { href, target, title = slots.title, customTitleProps = {} } = props; const pre = prefixCls.value; mergedTitle = typeof title === 'function' ? title(customTitleProps) : title; const active = activeLink.value === href; const wrapperClassName = classNames( `${pre}-link`, { [`${pre}-link-active`]: active, }, attrs.class, ); const titleClassName = classNames(`${pre}-link-title`, { [`${pre}-link-title-active`]: active, }); return ( ); }; }, }); ================================================ FILE: components/anchor/__tests__/Anchor.test.js ================================================ import { mount } from '@vue/test-utils'; import { ref } from 'vue'; import { sleep } from '../../../tests/utils'; import Anchor from '..'; const { Link } = Anchor; let idCounter = 0; const getHashUrl = () => `Anchor-API-${idCounter++}`; describe('Anchor Render', () => { it('Anchor render perfectly', async () => { const hash = getHashUrl(); const anchor = ref(null); const activeLink = ref(null); const wrapper = mount( { render() { return ( { activeLink.value = current; }} > ); }, }, { sync: false }, ); await sleep(); wrapper.find(`a[href="#${hash}`).trigger('click'); await sleep(); expect(activeLink.value).not.toBe(hash); }); it('Anchor render perfectly for complete href - click', async () => { const currentActiveLink = ref(null); const wrapper = mount( { render() { return ( { currentActiveLink.value = current; }} > ); }, }, { sync: false }, ); await sleep(); wrapper.find('a[href="http://www.example.com/#api"]').trigger('click'); expect(currentActiveLink.value).toBe('http://www.example.com/#api'); }); /* it('Anchor render perfectly for complete href - scroll', done => { const wrapper = mount( { render() { return (
Hello
); }, }, { sync: false, attachTo: 'body' }, ); wrapper.vm.$nextTick(() => { wrapper.vm.$refs.anchor.handleScroll(); expect(wrapper.vm.$refs.anchor.$data.activeLink).toBe('http://www.example.com/#api'); done(); }); }); it('Anchor render perfectly for complete href - scrollTo', async () => { const scrollToSpy = jest.spyOn(window, 'scrollTo'); const wrapper = mount( { render() { return (
Hello
); }, }, { sync: false, attachTo: 'body' }, ); await asyncExpect(() => { wrapper.vm.$refs.anchor.handleScrollTo('##api'); expect(wrapper.vm.$refs.anchor.$data.activeLink).toBe('##api'); expect(scrollToSpy).not.toHaveBeenCalled(); }); await asyncExpect(() => { expect(scrollToSpy).toHaveBeenCalled(); }, 1000); }); it('should remove listener when unmount', async () => { const wrapper = mount( { render() { return ( ); }, }, { sync: false, attachTo: 'body' }, ); await asyncExpect(() => { const removeListenerSpy = jest.spyOn(wrapper.vm.$refs.anchor.scrollEvent, 'remove'); wrapper.unmount(); expect(removeListenerSpy).toHaveBeenCalled(); }); }); it('should unregister link when unmount children', async () => { const wrapper = mount( { props: { showLink: { type: Boolean, default: true, }, }, render() { return ( {this.showLink ? : null} ); }, }, { sync: false, attachTo: 'body' }, ); await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#api']); wrapper.setProps({ showLink: false }); }); await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual([]); }); }); it('should update links when link href update', async () => { const wrapper = mount( { props: ['href'], render() { return ( ); }, }, { sync: false, attachTo: 'body', props: { href: '#api', }, }, ); await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#api']); wrapper.setProps({ href: '#API_1' }); }); await asyncExpect(() => { expect(wrapper.vm.$refs.anchor.links).toEqual(['#API_1']); }); }); it('Anchor onClick event', () => { let event; let link; const handleClick = (...arg) => ([event, link] = arg); const href = '#api'; const title = 'API'; const anchorRef = Vue.ref(null); const wrapper = mount({ render() { return ( ); }, }); wrapper.find(`a[href="${href}"]`).trigger('click'); anchorRef.value.handleScroll(); expect(event).not.toBe(undefined); expect(link).toEqual({ href, title }); }); */ }); ================================================ FILE: components/anchor/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/anchor/demo/basic.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/customizeHighlight.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/horizontal.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/onChange.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/onClick.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/static.vue correctly 1`] = ` `; exports[`renders ./components/anchor/demo/targetOffset.vue correctly 1`] = ` `; ================================================ FILE: components/anchor/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('anchor'); ================================================ FILE: components/anchor/context.ts ================================================ import type { Ref, InjectionKey, ComputedRef } from 'vue'; import type { AnchorDirection } from './Anchor'; import { computed, inject, provide } from 'vue'; export interface AnchorContext { registerLink: (link: string) => void; unregisterLink: (link: string) => void; activeLink: Ref; scrollTo: (link: string) => void; handleClick: (e: Event, info: { title: any; href: string }) => void; direction: ComputedRef; } // eslint-disable-next-line @typescript-eslint/no-unused-vars function noop(..._any: any[]): any {} export const AnchorContextKey: InjectionKey = Symbol('anchorContextKey'); const useProvideAnchor = (state: AnchorContext) => { provide(AnchorContextKey, state); }; const useInjectAnchor = () => { return inject(AnchorContextKey, { registerLink: noop, unregisterLink: noop, scrollTo: noop, activeLink: computed(() => ''), handleClick: noop, direction: computed(() => 'vertical'), } as AnchorContext); }; export { useInjectAnchor, useProvideAnchor }; export default useProvideAnchor; ================================================ FILE: components/anchor/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本使用 en-US: Basic Usage --- ## zh-CN 最简单的用法。 ## en-US The simplest usage. ================================================ FILE: components/anchor/demo/customizeHighlight.vue ================================================ --- order: 3 title: zh-CN: 自定义锚点高亮 en-US: Customize the anchor highlight --- ## zh-CN 自定义锚点高亮。 ## en-US Customize the anchor highlight. ================================================ FILE: components/anchor/demo/horizontal.vue ================================================ --- order: 1 title: zh-CN: 横向 Anchor。 en-US: Horizontally aligned anchors --- ## zh-CN 横向 Anchor。 ## en-US Horizontally aligned anchors ================================================ FILE: components/anchor/demo/index.vue ================================================ ================================================ FILE: components/anchor/demo/onChange.vue ================================================ --- order: 5 title: zh-CN: 监听锚点链接改变 en-US: Listening for anchor link change --- ## zh-CN 监听锚点链接改变。 ## en-US Listening for anchor link change. ================================================ FILE: components/anchor/demo/onClick.vue ================================================ --- order: 2 title: zh-CN: 自定义 click 事件 en-US: Customize the click event --- ## zh-CN 点击锚点不记录历史。 ## en-US Clicking on an anchor does not record history. ================================================ FILE: components/anchor/demo/static.vue ================================================ --- order: 1 title: zh-CN: 静态位置 en-US: Static --- ## zh-CN 不浮动,状态不随页面滚动变化。 ## en-US Do not change state when page is scrolling. ================================================ FILE: components/anchor/demo/targetOffset.vue ================================================ --- order: 4 title: zh-CN: 设置锚点滚动偏移量 en-US: Set Anchor scroll offset --- ## zh-CN 锚点目标滚动到屏幕正中间。 ## en-US Anchor target scroll to screen center. ================================================ FILE: components/anchor/index.en-US.md ================================================ --- category: Components type: Navigation cols: 1 title: Anchor cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*TBTSR4PyVmkAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JGb3RIzyOCkAAAAAAAAAAAAADrJ8AQ/original --- Hyperlinks to scroll on one page. ## When To Use For displaying anchor hyperlinks on page and jumping between them. ## API ### Anchor Props | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | affix | Fixed mode of Anchor | boolean | true | | | bounds | Bounding distance of anchor area | number | 5(px) | | | getContainer | Scrolling container | () => HTMLElement | () => window | | | getCurrentAnchor | Customize the anchor highlight | (activeLink: string) => string | - | activeLink(3.3) | | offsetBottom | Pixels to offset from bottom when calculating position of scroll | number | - | | | offsetTop | Pixels to offset from top when calculating position of scroll | number | 0 | | | showInkInFixed | Whether show ink-square when `:affix="false"` | boolean | false | | | targetOffset | Anchor scroll offset, default as `offsetTop`, [example](#components-anchor-demo-targetoffset) | number | `offsetTop` | 1.5.0 | | wrapperClass | The class name of the container | string | - | | | wrapperStyle | The style of the container | object | - | | | items | Data configuration option content, support nesting through children | { key, href, title, target, children }\[] [see](#anchoritem) | - | 4.0 | | direction | Set Anchor direction | `vertical` \| `horizontal` | `vertical` | 4.0 | | customTitle | custom option title by slot | v-slot="AnchorItem" | - | 4.0 | ### AnchorItem | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | key | The unique identifier of the Anchor Link | string \| number | - | | | href | The target of hyperlink | string | | | | target | Specifies where to display the linked URL | string | | | | title | The content of hyperlink | VueNode \| (item: AnchorItem) => VueNode | | | | children | Nested Anchor Link, `Attention: This attribute does not support horizontal orientation` | [AnchorItem](#anchoritem)\[] | - | | ### Events | Events Name | Description | Arguments | Version | | | --- | --- | --- | --- | --- | | change | Listening for anchor link change | (currentActiveLink: string) => void | | 1.5.0 | | click | set the handler to handle `click` event | Function(e: MouseEvent, link: Object) | | | ### Link Props | Property | Description | Type | Default | Version | | -------- | ----------------------------------------- | ------------ | ------- | ------- | | href | target of hyperlink | string | | | | target | Specifies where to display the linked URL | string | | 1.5.0 | | title | content of hyperlink | string\|slot | | | ================================================ FILE: components/anchor/index.tsx ================================================ import type { App, Plugin } from 'vue'; import type { AnchorProps } from './Anchor'; import type { AnchorLinkProps, AnchorLinkItemProps } from './AnchorLink'; import Anchor from './Anchor'; import AnchorLink from './AnchorLink'; Anchor.Link = AnchorLink; /* istanbul ignore next */ Anchor.install = function (app: App) { app.component(Anchor.name, Anchor); app.component(Anchor.Link.name, Anchor.Link); return app; }; export type { AnchorLinkProps, AnchorProps, AnchorLinkItemProps }; export { AnchorLink, AnchorLink as Link }; export default Anchor as typeof Anchor & Plugin & { readonly Link: typeof AnchorLink; }; ================================================ FILE: components/anchor/index.zh-CN.md ================================================ --- category: Components subtitle: 锚点 cols: 1 type: 导航 title: Anchor cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*TBTSR4PyVmkAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JGb3RIzyOCkAAAAAAAAAAAAADrJ8AQ/original --- 用于跳转到页面指定位置。 ## 何时使用 需要展现当前页面上可供跳转的锚点链接,以及快速在锚点之间跳转。 ## API ### Anchor Props | 成员 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | affix | 固定模式 | boolean | true | | | bounds | 锚点区域边界 | number | 5(px) | | | getContainer | 指定滚动的容器 | () => HTMLElement | () => window | | | getCurrentAnchor | 自定义高亮的锚点 | (activeLink: string) => string | - | activeLink(3.3) | | offsetBottom | 距离窗口底部达到指定偏移量后触发 | number | | | | offsetTop | 距离窗口顶部达到指定偏移量后触发 | number | | | | showInkInFixed | `:affix="false"` 时是否显示小方块 | boolean | false | | | targetOffset | 锚点滚动偏移量,默认与 offsetTop 相同,[例子](#components-anchor-demo-targetoffset) | number | `offsetTop` | 1.5.0 | | wrapperClass | 容器的类名 | string | - | | | wrapperStyle | 容器样式 | object | - | | | items | 数据化配置选项内容,支持通过 children 嵌套 | { key, href, title, target, children }\[] [具体见](#anchoritem) | - | 4.0 | | direction | 设置导航方向 | `vertical` \| `horizontal` | `vertical` | 4.0 | | customTitle | 使用插槽自定义选项 title | v-slot="AnchorItem" | - | 4.0 | ### AnchorItem | 成员 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | key | 唯一标志 | string \| number | - | | | href | 锚点链接 | string | - | | | target | 该属性指定在何处显示链接的资源 | string | - | | | title | 文字内容 | VueNode \| (item: AnchorItem) => VueNode | - | | | children | 嵌套的 Anchor Link,`注意:水平方向该属性不支持` | [AnchorItem](#anchoritem)\[] | - | | ### 事件 | 事件名称 | 说明 | 回调参数 | 版本 | | | -------- | ---------------------- | ------------------------------------- | ---- | ----- | | change | 监听锚点链接改变 | (currentActiveLink: string) => void | | 1.5.0 | | click | `click` 事件的 handler | Function(e: MouseEvent, link: Object) | | | ### Link Props | 成员 | 说明 | 类型 | 默认值 | 版本 | | ------ | -------------------------------- | ------------ | ------ | ----- | | href | 锚点链接 | string | | | | target | 该属性指定在何处显示链接的资源。 | string | | 1.5.0 | | title | 文字内容 | string\|slot | | | ================================================ FILE: components/anchor/style/index.ts ================================================ import type { CSSObject } from '../../_util/cssinjs'; import type { FullToken, GenerateStyle } from '../../theme/internal'; import { genComponentStyleHook, mergeToken } from '../../theme/internal'; import { resetComponent, textEllipsis } from '../../style'; export interface ComponentToken {} interface AnchorToken extends FullToken<'Anchor'> { holderOffsetBlock: number; anchorPaddingBlock: number; anchorPaddingBlockSecondary: number; anchorPaddingInline: number; anchorBallSize: number; anchorTitleBlock: number; } // ============================== Shared ============================== const genSharedAnchorStyle: GenerateStyle = (token): CSSObject => { const { componentCls, holderOffsetBlock, motionDurationSlow, lineWidthBold, colorPrimary, lineType, colorSplit, } = token; return { [`${componentCls}-wrapper`]: { marginBlockStart: -holderOffsetBlock, paddingBlockStart: holderOffsetBlock, // delete overflow: auto // overflow: 'auto', backgroundColor: 'transparent', [componentCls]: { ...resetComponent(token), position: 'relative', paddingInlineStart: lineWidthBold, [`${componentCls}-link`]: { paddingBlock: token.anchorPaddingBlock, paddingInline: `${token.anchorPaddingInline}px 0`, '&-title': { ...textEllipsis, position: 'relative', display: 'block', marginBlockEnd: token.anchorTitleBlock, color: token.colorText, transition: `all ${token.motionDurationSlow}`, '&:only-child': { marginBlockEnd: 0, }, }, [`&-active > ${componentCls}-link-title`]: { color: token.colorPrimary, }, // link link [`${componentCls}-link`]: { paddingBlock: token.anchorPaddingBlockSecondary, }, }, }, [`&:not(${componentCls}-wrapper-horizontal)`]: { [componentCls]: { '&::before': { position: 'absolute', left: { _skip_check_: true, value: 0, }, top: 0, height: '100%', borderInlineStart: `${lineWidthBold}px ${lineType} ${colorSplit}`, content: '" "', }, [`${componentCls}-ink`]: { position: 'absolute', left: { _skip_check_: true, value: 0, }, display: 'none', transform: 'translateY(-50%)', transition: `top ${motionDurationSlow} ease-in-out`, width: lineWidthBold, backgroundColor: colorPrimary, [`&${componentCls}-ink-visible`]: { display: 'inline-block', }, }, }, }, [`${componentCls}-fixed ${componentCls}-ink ${componentCls}-ink`]: { display: 'none', }, }, }; }; const genSharedAnchorHorizontalStyle: GenerateStyle = (token): CSSObject => { const { componentCls, motionDurationSlow, lineWidthBold, colorPrimary } = token; return { [`${componentCls}-wrapper-horizontal`]: { position: 'relative', '&::before': { position: 'absolute', left: { _skip_check_: true, value: 0, }, right: { _skip_check_: true, value: 0, }, bottom: 0, borderBottom: `1px ${token.lineType} ${token.colorSplit}`, content: '" "', }, [componentCls]: { overflowX: 'scroll', position: 'relative', display: 'flex', scrollbarWidth: 'none' /* Firefox */, '&::-webkit-scrollbar': { display: 'none' /* Safari and Chrome */, }, [`${componentCls}-link:first-of-type`]: { paddingInline: 0, }, [`${componentCls}-ink`]: { position: 'absolute', bottom: 0, transition: `left ${motionDurationSlow} ease-in-out, width ${motionDurationSlow} ease-in-out`, height: lineWidthBold, backgroundColor: colorPrimary, }, }, }, }; }; // ============================== Export ============================== export default genComponentStyleHook('Anchor', token => { const { fontSize, fontSizeLG, padding, paddingXXS } = token; const anchorToken = mergeToken(token, { holderOffsetBlock: paddingXXS, anchorPaddingBlock: paddingXXS, anchorPaddingBlockSecondary: paddingXXS / 2, anchorPaddingInline: padding, anchorTitleBlock: (fontSize / 14) * 3, anchorBallSize: fontSizeLG / 2, }); return [genSharedAnchorStyle(anchorToken), genSharedAnchorHorizontalStyle(anchorToken)]; }); ================================================ FILE: components/app/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/app/demo/basic.vue correctly 1`] = `
`; exports[`renders ./components/app/demo/myPage.vue correctly 1`] = `
`; ================================================ FILE: components/app/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('app'); ================================================ FILE: components/app/context.ts ================================================ import { provide, inject, reactive } from 'vue'; import type { InjectionKey } from 'vue'; import type { MessageInstance, ConfigOptions as MessageConfig } from '../message/interface'; import type { NotificationInstance, NotificationConfig } from '../notification/interface'; import type { ModalStaticFunctions } from '../modal/confirm'; export type AppConfig = { message?: MessageConfig; notification?: NotificationConfig; }; export const AppConfigContextKey: InjectionKey = Symbol('appConfigContext'); export const useProvideAppConfigContext = (appConfigContext: AppConfig) => { return provide(AppConfigContextKey, appConfigContext); }; export const useInjectAppConfigContext = () => { return inject(AppConfigContextKey, {}); }; type ModalType = Omit; export interface useAppProps { message: MessageInstance; notification: NotificationInstance; modal: ModalType; } export const AppContextKey: InjectionKey = Symbol('appContext'); export const useProvideAppContext = (appContext: useAppProps) => { return provide(AppContextKey, appContext); }; const defaultAppContext: useAppProps = reactive({ message: {}, notification: {}, modal: {}, } as useAppProps); export const useInjectAppContext = () => { return inject(AppContextKey, defaultAppContext); }; ================================================ FILE: components/app/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本使用 en-US: Basic Usage --- ## zh-CN 获取 `message`、`notification`、`modal` 静态方法。 ## en-US Static method for `message`, `notification`, `modal`. ================================================ FILE: components/app/demo/index.vue ================================================ ================================================ FILE: components/app/demo/myPage.vue ================================================ ================================================ FILE: components/app/index.en-US.md ================================================ --- category: Components cols: 1 type: Other title: App cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*TBTSR4PyVmkAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JGb3RIzyOCkAAAAAAAAAAAAADrJ8AQ/original tag: New --- Application wrapper for some global usages. ## When To Use - Provide reset styles based on `.ant-app` element. - You could use static methods of `message/notification/Modal` form `useApp` without writing `contextHolder` manually. ## API ### App | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | message | Global config for Message | [MessageConfig](/components/message/#messageconfig) | - | 4.x | | notification | Global config for Notification | [NotificationConfig](/components/notification/#notificationconfig) | - | 4.x | ## How to use ### Basic usage App provides upstream and downstream method calls through `provide/inject`, because useApp needs to be used as a subcomponent, we recommend encapsulating App at the top level in the application. ```html /*myPage.vue*/ ``` Note: App.useApp must be available under App. #### Embedded usage scenarios (if not necessary, try not to do nesting) ```html ... ... ``` #### Sequence with ConfigProvider The App component can only use the token in the `ConfigProvider`, if you need to use the Token, the ConfigProvider and the App component must appear in pairs. ```html ... ``` #### Global scene (pinia scene) ```ts import { App } from 'ant-design-vue'; import type { MessageInstance } from 'ant-design-vue/es/message/interface'; import type { ModalStaticFunctions } from 'ant-design-vue/es/modal/confirm'; import type { NotificationInstance } from 'ant-design-vue/es/notification/interface'; export const useGlobalStore = defineStore('global', () => { const message: MessageInstance = ref(); const notification: NotificationInstance = ref(); const modal: Omit = ref(); (() => { const staticFunction = App.useApp(); message.value = staticFunction.message; modal.value = staticFunction.modal; notification.value = staticFunction.notification; })(); return { message, notification, modal }; }); ``` ```html // sub page ``` ================================================ FILE: components/app/index.tsx ================================================ import { defineComponent, computed } from 'vue'; import type { App as TypeApp, Plugin } from 'vue'; import { initDefaultProps } from '../_util/props-util'; import classNames from '../_util/classNames'; import { objectType } from '../_util/type'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import useMessage from '../message/useMessage'; import useModal from '../modal/useModal'; import useNotification from '../notification/useNotification'; import type { AppConfig } from './context'; import { useProvideAppConfigContext, useInjectAppConfigContext, useProvideAppContext, useInjectAppContext, } from './context'; import useStyle from './style'; export const AppProps = () => { return { rootClassName: String, message: objectType(), notification: objectType(), }; }; const useApp = () => { return useInjectAppContext(); }; const App = defineComponent({ name: 'AApp', props: initDefaultProps(AppProps(), {}), setup(props, { slots }) { const { prefixCls } = useConfigInject('app', props); const [wrapSSR, hashId] = useStyle(prefixCls); const customClassName = computed(() => { return classNames(hashId.value, prefixCls.value, props.rootClassName); }); const appConfig = useInjectAppConfigContext(); const mergedAppConfig = computed(() => ({ message: { ...appConfig.message, ...props.message }, notification: { ...appConfig.notification, ...props.notification }, })); useProvideAppConfigContext(mergedAppConfig.value); const [messageApi, messageContextHolder] = useMessage(mergedAppConfig.value.message); const [notificationApi, notificationContextHolder] = useNotification( mergedAppConfig.value.notification, ); const [ModalApi, ModalContextHolder] = useModal(); const memoizedContextValue = computed(() => ({ message: messageApi, notification: notificationApi, modal: ModalApi, })); useProvideAppContext(memoizedContextValue.value); return () => { return wrapSSR(
{ModalContextHolder()} {messageContextHolder()} {notificationContextHolder()} {slots.default?.()}
, ); }; }, }); App.useApp = useApp; App.install = function (app: TypeApp) { app.component(App.name, App); }; export default App as typeof App & Plugin & { readonly useApp: typeof useApp; }; ================================================ FILE: components/app/index.zh-CN.md ================================================ --- category: Components subtitle: 包裹组件 cols: 1 type: 其它 title: App cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*TBTSR4PyVmkAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JGb3RIzyOCkAAAAAAAAAAAAADrJ8AQ/original tag: New --- 新的包裹组件,提供重置样式和提供消费上下文的默认环境。 ## 何时使用 - 提供可消费 provide/inject 的 `message.xxx`、`Modal.xxx`、`notification.xxx` 的静态方法,可以简化 useMessage 等方法需要手动植入 `contextHolder` 的问题。 - 提供基于 `.ant-app` 的默认重置样式,解决原生元素没有 antd 规范样式的问题。 ## API ### App | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | message | App 内 Message 的全局配置 | [MessageConfig](/components/message-cn/#messageconfig) | - | 4.x | | notification | App 内 Notification 的全局配置 | [NotificationConfig](/components/notification-cn/#notificationconfig) | - | 4.x | ## 如何使用 ### 基础用法 App 组件通过 `provide/inject` 提供上下文方法调用,因而 useApp 需要作为子组件才能使用,我们推荐在应用中顶层包裹 App。 ```html /*myPage.vue*/ ``` 注意:App.useApp 必须在 App 之下方可使用。 #### 内嵌使用场景(如无必要,尽量不做嵌套) ```html ... ... ``` #### 与 ConfigProvider 先后顺序 App 组件只能在 `ConfigProvider` 之下才能使用 Design Token, 如果需要使用其样式重置能力,则 ConfigProvider 与 App 组件必须成对出现。 ```html ... ``` #### 全局场景 (pinia 场景) ```ts import { App } from 'ant-design-vue'; import type { MessageInstance } from 'ant-design-vue/es/message/interface'; import type { ModalStaticFunctions } from 'ant-design-vue/es/modal/confirm'; import type { NotificationInstance } from 'ant-design-vue/es/notification/interface'; export const useGlobalStore = defineStore('global', () => { const message: MessageInstance = ref(); const notification: NotificationInstance = ref(); const modal: Omit = ref(); (() => { const staticFunction = App.useApp(); message.value = staticFunction.message; modal.value = staticFunction.modal; notification.value = staticFunction.notification; })(); return { message, notification, modal }; }); ``` ```html // sub page ``` ================================================ FILE: components/app/style/index.ts ================================================ import type { FullToken, GenerateStyle } from '../../theme/internal'; import { genComponentStyleHook } from '../../theme/internal'; export type ComponentToken = {}; interface AppToken extends FullToken<'App'> {} // =============================== Base =============================== const genBaseStyle: GenerateStyle = token => { const { componentCls, colorText, fontSize, lineHeight, fontFamily } = token; return { [componentCls]: { color: colorText, fontSize, lineHeight, fontFamily, }, }; }; // ============================== Export ============================== export default genComponentStyleHook('App', token => [genBaseStyle(token)]); ================================================ FILE: components/auto-complete/OptGroup.tsx ================================================ import type { FunctionalComponent } from 'vue'; import type { DefaultOptionType } from '../select'; export type OptGroupProps = Omit; export interface OptionGroupFC extends FunctionalComponent { /** Legacy for check if is a Option Group */ isSelectOptGroup: boolean; } const OptGroup: OptionGroupFC = () => null; OptGroup.isSelectOptGroup = true; OptGroup.displayName = 'AAutoCompleteOptGroup'; export default OptGroup; ================================================ FILE: components/auto-complete/Option.tsx ================================================ import type { FunctionalComponent } from 'vue'; import type { DefaultOptionType } from '../vc-select/Select'; export interface OptionProps extends Omit { /** Save for customize data */ [prop: string]: any; // eslint-disable-line @typescript-eslint/no-explicit-any } export interface OptionFC extends FunctionalComponent { /** Legacy for check if is a Option Group */ isSelectOption: boolean; } const Option: OptionFC = () => null; Option.isSelectOption = true; Option.displayName = 'AAutoCompleteOption'; export default Option; ================================================ FILE: components/auto-complete/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/auto-complete/demo/allow-clear.vue correctly 1`] = `

`; exports[`renders ./components/auto-complete/demo/basic.vue correctly 1`] = ` `; exports[`renders ./components/auto-complete/demo/border-less.vue correctly 1`] = ` `; exports[`renders ./components/auto-complete/demo/certain-category.vue correctly 1`] = `
`; exports[`renders ./components/auto-complete/demo/custom.vue correctly 1`] = ` `; exports[`renders ./components/auto-complete/demo/non-case-sensitive.vue correctly 1`] = ` `; exports[`renders ./components/auto-complete/demo/options.vue correctly 1`] = ` `; exports[`renders ./components/auto-complete/demo/status.vue correctly 1`] = `
`; exports[`renders ./components/auto-complete/demo/uncertain-category.vue correctly 1`] = `
`; ================================================ FILE: components/auto-complete/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('auto-complete'); ================================================ FILE: components/auto-complete/__tests__/index.test.js ================================================ import { mount } from '@vue/test-utils'; import { sleep } from '../../../tests/utils'; import AutoComplete from '..'; import focusTest from '../../../tests/shared/focusTest'; describe('AutoComplete with Custom Input Element Render', () => { focusTest(AutoComplete); function $$(className) { return document.body.querySelectorAll(className); } it('AutoComplete with custom Input render perfectly', async () => { const wrapper = mount( { render() { return ( ); }, }, { attachTo: 'body', sync: false }, ); expect(wrapper.findAll('input').length).toBe(1); const input = wrapper.find('input'); input.element.value = '123'; input.trigger('input'); await sleep(100); expect($$('.ant-select-item-option').length).toBe(3); }); }); ================================================ FILE: components/auto-complete/demo/allow-clear.vue ================================================ --- order: 8 title: zh-CN: 自定义清除按钮 en-US: Customize clear button --- ## zh-CN 自定义清除按钮。 ## en-US Customize clear button. ================================================ FILE: components/auto-complete/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本使用 en-US: Basic Usage --- ## zh-CN 基本使用。通过 options 设置自动完成的数据源。 ## en-US Basic Usage, set datasource of autocomplete with `options` property. ================================================ FILE: components/auto-complete/demo/border-less.vue ================================================ --- order: 7 title: zh-CN: 无边框 en-US: Border less --- ## zh-CN 没有边框。 ## en-US border less. ================================================ FILE: components/auto-complete/demo/certain-category.vue ================================================ --- order: 4 title: zh-CN: 查询模式 - 确定类目 en-US: Lookup-Patterns - Certain Category --- ## zh-CN 查询模式 - 确定类目。 ## en-US Lookup-Patterns - Certain Category. ================================================ FILE: components/auto-complete/demo/custom.vue ================================================ --- order: 2 title: zh-CN: 自定义输入组件 en-US: Customize Input Component --- ## zh-CN 自定义输入组件。 ## en-US Customize Input Component. ================================================ FILE: components/auto-complete/demo/index.vue ================================================ ================================================ FILE: components/auto-complete/demo/non-case-sensitive.vue ================================================ --- order: 3 title: zh-CN: 不区分大小写 en-US: Non-case-sensitive AutoComplete --- ## zh-CN 不区分大小写的 AutoComplete。 ## en-US A non-case-sensitive AutoComplete. ================================================ FILE: components/auto-complete/demo/options.vue ================================================ --- order: 1 title: zh-CN: 自定义选项 en-US: Customized --- ## zh-CN 3.0 以上版本,可以传递 `v-slot:option` 来自定义 Option。 ## en-US For 3.0+, You could pass `v-slot:option` to custom option. ================================================ FILE: components/auto-complete/demo/status.vue ================================================ --- order: 19 version: 3.3.0 title: zh-CN: 自定义状态 en-US: Status --- ## zh-CN 使用 `status` 为 AutoComplete 添加状态,可选 `error` 或者 `warning`。 ## en-US Add status to AutoComplete with `status`, which could be `error` or `warning`. ================================================ FILE: components/auto-complete/demo/uncertain-category.vue ================================================ --- order: 5 title: zh-CN: 查询模式 - 不确定类目 en-US: Lookup-Patterns - Uncertain Category --- ## zh-CN 查询模式 - 不确定类目。 ## en-US Lookup-Patterns - Uncertain Category. ================================================ FILE: components/auto-complete/index.en-US.md ================================================ --- category: Components type: Data Entry cols: 2 title: AutoComplete cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*g8THS4NpV6sAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*WERTQ6qvgEYAAAAAAAAAAAAADrJ8AQ/original --- Autocomplete function of input field. ## When To Use - When you need an input box instead of a selector. - When you need input suggestions or helping text. The differences with Select are: - AutoComplete is an input box with text hints, and users can type freely. The keyword is aiding **input**. - Select is selecting among given choices. The keyword is **select**. ## API ```html ``` | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | allowClear | Show clear button, effective in multiple mode only. | boolean | false | | | autofocus | get focus when component mounted | boolean | false | | | backfill | backfill selected item the input when using keyboard | boolean | false | | | bordered | Whether has border style | boolean | true | 4.0 | | clearIcon | Use slot custom clear icon | slot | `` | 4.0 | | default (for customize input element) | customize input element | slot | `` | | | defaultActiveFirstOption | Whether active first option by default | boolean | true | | | defaultOpen | Initial open state of dropdown | boolean | - | | | disabled | Whether disabled select | boolean | false | | | popupClassName | The className of dropdown menu | string | - | 4.0 | | dropdownMatchSelectWidth | Determine whether the dropdown menu and the select input are the same width. Default set `min-width` same as input. Will ignore when value less than select width. `false` will disable virtual scroll | boolean \| number | true | | | dropdownMenuStyle | additional style applied to dropdown menu | object | | 1.5.0 | | filterOption | If true, filter options by input, if function, filter options against it. The function will receive two arguments, `inputValue` and `option`, if the function returns `true`, the option will be included in the filtered set; Otherwise, it will be excluded. | boolean or function(inputValue, option) | true | | | open | Controlled open state of dropdown | boolean | - | | | option | custom render option by slot | v-slot:option="{value, label, [disabled, key, title]}" | - | 3.0 | | options | Data source for autocomplete | [DataSourceItemType](https://github.com/vueComponent/ant-design-vue/blob/724d53b907e577cf5880c1e6742d4c3f924f8f49/components/auto-complete/index.vue#L9)\[] | | | | placeholder | placeholder of input | string | - | | | status | Set validation status | 'error' \| 'warning' | - | 3.3.0 | | v-model:value | selected option | string\|string\[]\|{ key: string, label: string\|vNodes }\|Array<{ key: string, label: string\|vNodes }> | - | | ### events | Events Name | Description | Arguments | Version | | | --- | --- | --- | --- | --- | | blur | Called when leaving the component. | function() | | | | change | Called when select an option or input value change, or value of input is changed | function(value) | | | | dropdownVisibleChange | Call when dropdown open | function(open) | | | | focus | Called when entering the component | function() | | | | search | Called when searching items. | function(value) | - | | | select | Called when a option is selected. param is option's value and option instance. | function(value, option) | | | | clear | Called when clear | function | - | 3.3.0 | ## Methods | Name | Description | Version | | ------- | ------------ | ------- | | blur() | remove focus | | | focus() | get focus | | ## FAQ ### Part of the api in v2 are not available in v3? AutoComplete is an Input component that supports auto complete tips. As such, it should not support props like `labelInValue` that affect value display. In v3, the AutoComplete implementation can not handle the case where the `value` and `label` are identical. v4 not longer support `label` as the value input. Besides, to unify the API, `dataSource` is replaced with `options`. You can migrate with the following change: #### v2 ```ts dataSource = ['light', 'bamboo']; // or dataSource = [ { value: 'light', text: 'Light' }, { value: 'bamboo', text: 'Bamboo' }, ]; ``` #### v3 ```ts options = [ { value: 'light', label: 'Light' }, { value: 'bamboo', label: 'Bamboo' }, ]; ``` ================================================ FILE: components/auto-complete/index.tsx ================================================ import type { App, VNode, ExtractPropTypes, CSSProperties, PropType } from 'vue'; import { defineComponent, ref } from 'vue'; import Select, { selectProps } from '../select'; import { isValidElement, flattenChildren } from '../_util/props-util'; import warning from '../_util/warning'; import Option from './Option'; import OptGroup from './OptGroup'; import omit from '../_util/omit'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import type { InputStatus } from '../_util/statusUtils'; import type { CustomSlotsType } from '../_util/type'; function isSelectOptionOrSelectOptGroup(child: any): boolean { return child?.type?.isSelectOption || child?.type?.isSelectOptGroup; } export const autoCompleteProps = () => ({ ...omit(selectProps(), ['loading', 'mode', 'optionLabelProp', 'labelInValue']), dataSource: Array as PropType<{ value: any; text: any }[] | string[]>, dropdownMenuStyle: { type: Object as PropType, default: undefined as CSSProperties, }, // optionLabelProp: String, dropdownMatchSelectWidth: { type: [Number, Boolean], default: true }, prefixCls: String, showSearch: { type: Boolean, default: undefined }, transitionName: String, choiceTransitionName: { type: String, default: 'zoom' }, autofocus: { type: Boolean, default: undefined }, backfill: { type: Boolean, default: undefined }, // optionLabelProp: PropTypes.string.def('children'), filterOption: { type: [Boolean, Function], default: false }, defaultActiveFirstOption: { type: Boolean, default: true }, status: String as PropType, }); export type AutoCompleteProps = Partial>>; export const AutoCompleteOption = Option; export const AutoCompleteOptGroup = OptGroup; const AutoComplete = defineComponent({ compatConfig: { MODE: 3 }, name: 'AAutoComplete', inheritAttrs: false, props: autoCompleteProps(), // emits: ['change', 'select', 'focus', 'blur'], slots: Object as CustomSlotsType<{ option: any; // deprecated, should use props `options` instead, not slot options: any; default: any; notFoundContent: any; dataSource: any; clearIcon: any; }>, setup(props, { slots, attrs, expose }) { warning( !('dataSource' in slots), 'AutoComplete', '`dataSource` slot is deprecated, please use props `options` instead.', ); warning( !('options' in slots), 'AutoComplete', '`options` slot is deprecated, please use props `options` instead.', ); warning( !props.dropdownClassName, 'AutoComplete', '`dropdownClassName` is deprecated, please use `popupClassName` instead.', ); const selectRef = ref(); const getInputElement = () => { const children = flattenChildren(slots.default?.()); const element = children.length ? children[0] : undefined; return element; }; const focus = () => { selectRef.value?.focus(); }; const blur = () => { selectRef.value?.blur(); }; expose({ focus, blur, }); const { prefixCls } = useConfigInject('select', props); return () => { const { size, dataSource, notFoundContent = slots.notFoundContent?.() } = props; let optionChildren: VNode[]; const { class: className } = attrs; const cls = { [className as string]: !!className, [`${prefixCls.value}-lg`]: size === 'large', [`${prefixCls.value}-sm`]: size === 'small', [`${prefixCls.value}-show-search`]: true, [`${prefixCls.value}-auto-complete`]: true, }; if (props.options === undefined) { const childArray = slots.dataSource?.() || slots.options?.() || []; if (childArray.length && isSelectOptionOrSelectOptGroup(childArray[0])) { optionChildren = childArray; } else { optionChildren = dataSource ? dataSource.map((item: any) => { if (isValidElement(item)) { return item; } switch (typeof item) { case 'string': return ( ); case 'object': return ( ); default: throw new Error( 'AutoComplete[dataSource] only supports type `string[] | Object[]`.', ); } }) : []; } } const selectProps = omit( { ...props, ...(attrs as any), mode: Select.SECRET_COMBOBOX_MODE_DO_NOT_USE, // optionLabelProp, getInputElement, notFoundContent, // placeholder: '', class: cls, popupClassName: props.popupClassName || props.dropdownClassName, ref: selectRef, }, ['dataSource', 'loading'], ); return ( ); }; }, }); /* istanbul ignore next */ export default Object.assign(AutoComplete, { Option, OptGroup, install(app: App) { app.component(AutoComplete.name, AutoComplete); app.component(Option.displayName, Option); app.component(OptGroup.displayName, OptGroup); return app; }, }); ================================================ FILE: components/auto-complete/index.zh-CN.md ================================================ --- category: Components subtitle: 自动完成 type: 数据录入 cols: 2 title: AutoComplete cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*g8THS4NpV6sAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*WERTQ6qvgEYAAAAAAAAAAAAADrJ8AQ/original --- 输入框自动完成功能。 ## 何时使用 - 需要一个输入框而不是选择器。 - 需要输入建议/辅助提示。 和 Select 的区别是: - AutoComplete 是一个带提示的文本输入框,用户可以自由输入,关键词是辅助**输入**。 - Select 是在限定的可选项中进行选择,关键词是**选择**。 ## API ```html ``` | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | allowClear | 支持清除, 单选模式有效 | boolean | false | | | autofocus | 自动获取焦点 | boolean | false | | | backfill | 使用键盘选择选项的时候把选中项回填到输入框中 | boolean | false | | | bordered | 是否有边框 | boolean | true | 4.0 | | clearIcon | 使用插槽自定义清除按钮 | slot | `` | 4.0 | | default (自定义输入框) | 自定义输入框 | slot | `` | | | defaultActiveFirstOption | 是否默认高亮第一个选项。 | boolean | true | | | defaultOpen | 是否默认展开下拉菜单 | boolean | - | | | disabled | 是否禁用 | boolean | false | | | popupClassName | 下拉菜单的 className 属性 | string | - | 4.0 | | dropdownMatchSelectWidth | 下拉菜单和选择器同宽。默认将设置 `min-width`,当值小于选择框宽度时会被忽略。false 时会关闭虚拟滚动 | boolean \| number | true | | | dropdownMenuStyle | dropdown 菜单自定义样式 | object | | 1.5.0 | | filterOption | 是否根据输入项进行筛选。当其为一个函数时,会接收 `inputValue` `option` 两个参数,当 `option` 符合筛选条件时,应返回 `true`,反之则返回 `false`。 | boolean or function(inputValue, option) | true | | | open | 是否展开下拉菜单 | boolean | - | | | option | 通过 option 插槽,自定义节点 | v-slot:option="{value, label, [disabled, key, title]}" | - | 3.0 | | options | 自动完成的数据源 | [DataSourceItemType](https://github.com/vueComponent/ant-design-vue/blob/724d53b907e577cf5880c1e6742d4c3f924f8f49/components/auto-complete/index.vue#L9)\[] | | | | placeholder | 输入框提示 | string \| slot | - | | | status | 设置校验状态 | 'error' \| 'warning' | - | 3.3.0 | | v-model:value | 指定当前选中的条目 | string\|string\[]\|{ key: string, label: string\|vNodes }\|Array<{ key: string, label: string\|vNodes }> | 无 | | ### 事件 | 事件名称 | 说明 | 回调参数 | 版本 | | --- | --- | --- | --- | --- | | blur | 失去焦点时的回调 | function() | | | change | 选中 option,或 input 的 value 变化时,调用此函数 | function(value) | | | dropdownVisibleChange | 展开下拉菜单的回调 | function(open) | | | focus | 获得焦点时的回调 | function() | | | search | 搜索补全项的时候调用 | function(value) | | | select | 被选中时调用,参数为选中项的 value 值 | function(value, option) | | | clear | 清除内容时回调 | function | - | 3.3.0 | ## 方法 | 名称 | 描述 | 版本 | | ------- | -------- | ---- | | blur() | 移除焦点 | | | focus() | 获取焦点 | | ## FAQ ### v2 的部分属性为何在 v3 中没有了? AutoComplete 组件是一个支持自动提示的 Input 组件,因而其不具有 `labelInValue` 等影响 value 展示的属性。在 v2 版本,AutoComplete 实现存在输入值如果遇到 `value` 与 `label` 相同时无法映射的问题。 v3 中不再支持 `label` 为值的输入形态。 此外为了统一 API,`dataSource` 改为 `options` 你可以如下转换: #### v2 ```ts dataSource = ['light', 'bamboo']; // or dataSource = [ { value: 'light', text: 'Light' }, { value: 'bamboo', text: 'Bamboo' }, ]; ``` #### v3 ```ts options = [ { value: 'light', label: 'Light' }, { value: 'bamboo', label: 'Bamboo' }, ]; ``` ================================================ FILE: components/avatar/Avatar.tsx ================================================ import type { CustomSlotsType, VueNode } from '../_util/type'; import type { CSSProperties, ExtractPropTypes, PropType } from 'vue'; import { computed, defineComponent, nextTick, onMounted, shallowRef, watch } from 'vue'; import { getPropsSlot } from '../_util/props-util'; import PropTypes from '../_util/vue-types'; import useBreakpoint from '../_util/hooks/useBreakpoint'; import type { Breakpoint, ScreenSizeMap } from '../_util/responsiveObserve'; import { responsiveArray } from '../_util/responsiveObserve'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import ResizeObserver from '../vc-resize-observer'; import eagerComputed from '../_util/eagerComputed'; import useStyle from './style'; import { useAvatarInjectContext } from './AvatarContext'; export type AvatarSize = 'large' | 'small' | 'default' | number | ScreenSizeMap; export const avatarProps = () => ({ prefixCls: String, shape: { type: String as PropType<'circle' | 'square'>, default: 'circle' }, size: { type: [Number, String, Object] as PropType, default: (): AvatarSize => 'default', }, src: String, /** Srcset of image avatar */ srcset: String, icon: PropTypes.any, alt: String, gap: Number, draggable: { type: Boolean, default: undefined }, crossOrigin: String as PropType<'' | 'anonymous' | 'use-credentials'>, loadError: { type: Function as PropType<() => boolean>, }, }); export type AvatarProps = Partial>>; const Avatar = defineComponent({ compatConfig: { MODE: 3 }, name: 'AAvatar', inheritAttrs: false, props: avatarProps(), slots: Object as CustomSlotsType<{ icon: any; default: any; }>, setup(props, { slots, attrs }) { const isImgExist = shallowRef(true); const isMounted = shallowRef(false); const scale = shallowRef(1); const avatarChildrenRef = shallowRef(null); const avatarNodeRef = shallowRef(null); const { prefixCls } = useConfigInject('avatar', props); const [wrapSSR, hashId] = useStyle(prefixCls); const avatarCtx = useAvatarInjectContext(); const size = computed(() => { return props.size === 'default' ? avatarCtx.size : props.size; }); const screens = useBreakpoint(); const responsiveSize = eagerComputed(() => { if (typeof props.size !== 'object') { return undefined; } const currentBreakpoint: Breakpoint = responsiveArray.find(screen => screens.value[screen])!; const currentSize = props.size[currentBreakpoint]; return currentSize; }); const responsiveSizeStyle = (hasIcon: boolean) => { if (responsiveSize.value) { return { width: `${responsiveSize.value}px`, height: `${responsiveSize.value}px`, lineHeight: `${responsiveSize.value}px`, fontSize: `${hasIcon ? responsiveSize.value / 2 : 18}px`, }; } return {}; }; const setScaleParam = () => { if (!avatarChildrenRef.value || !avatarNodeRef.value) { return; } const childrenWidth = avatarChildrenRef.value.offsetWidth; // offsetWidth avoid affecting be transform scale const nodeWidth = avatarNodeRef.value.offsetWidth; // denominator is 0 is no meaning if (childrenWidth !== 0 && nodeWidth !== 0) { const { gap = 4 } = props; if (gap * 2 < nodeWidth) { scale.value = nodeWidth - gap * 2 < childrenWidth ? (nodeWidth - gap * 2) / childrenWidth : 1; } } }; const handleImgLoadError = () => { const { loadError } = props; const errorFlag = loadError?.(); if (errorFlag !== false) { isImgExist.value = false; } }; watch( () => props.src, () => { nextTick(() => { isImgExist.value = true; scale.value = 1; }); }, ); watch( () => props.gap, () => { nextTick(() => { setScaleParam(); }); }, ); onMounted(() => { nextTick(() => { setScaleParam(); isMounted.value = true; }); }); return () => { const { shape, src, alt, srcset, draggable, crossOrigin } = props; const mergeShape = avatarCtx.shape ?? shape; const icon = getPropsSlot(slots, props, 'icon'); const pre = prefixCls.value; const classString = { [`${attrs.class}`]: !!attrs.class, [pre]: true, [`${pre}-lg`]: size.value === 'large', [`${pre}-sm`]: size.value === 'small', [`${pre}-${mergeShape}`]: true, [`${pre}-image`]: src && isImgExist.value, [`${pre}-icon`]: icon, [hashId.value]: true, }; const sizeStyle: CSSProperties = typeof size.value === 'number' ? { width: `${size.value}px`, height: `${size.value}px`, lineHeight: `${size.value}px`, fontSize: icon ? `${size.value / 2}px` : '18px', } : {}; const children: VueNode = slots.default?.(); let childrenToRender; if (src && isImgExist.value) { childrenToRender = ( {alt} ); } else if (icon) { childrenToRender = icon; } else if (isMounted.value || scale.value !== 1) { const transformString = `scale(${scale.value}) translateX(-50%)`; const childrenStyle: CSSProperties = { msTransform: transformString, WebkitTransform: transformString, transform: transformString, }; const sizeChildrenStyle = typeof size.value === 'number' ? { lineHeight: `${size.value}px`, } : {}; childrenToRender = ( {children} ); } else { childrenToRender = ( {children} ); } return wrapSSR( {childrenToRender} , ); }; }, }); export default Avatar; ================================================ FILE: components/avatar/AvatarContext.ts ================================================ import type { InjectionKey } from 'vue'; import { inject, provide } from 'vue'; import type { ScreenSizeMap } from '../_util/responsiveObserve'; export type AvatarSize = 'large' | 'small' | 'default' | number | ScreenSizeMap; export interface AvatarContextType { size?: AvatarSize; shape?: 'circle' | 'square'; } const AvatarContextKey: InjectionKey = Symbol('AvatarContextKey'); export const useAvatarInjectContext = () => { return inject(AvatarContextKey, {}); }; export const useAvatarProviderContext = (context: AvatarContextType) => { return provide(AvatarContextKey, context); }; ================================================ FILE: components/avatar/Group.tsx ================================================ import { cloneElement } from '../_util/vnode'; import type { AvatarSize } from './Avatar'; import Avatar from './Avatar'; import Popover from '../popover'; import type { PropType, ExtractPropTypes, CSSProperties } from 'vue'; import { computed, defineComponent, watchEffect } from 'vue'; import { flattenChildren, getPropsSlot } from '../_util/props-util'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import useStyle from './style'; import { useAvatarProviderContext } from './AvatarContext'; export const groupProps = () => ({ prefixCls: String, maxCount: Number, maxStyle: { type: Object as PropType, default: undefined as CSSProperties }, maxPopoverPlacement: { type: String as PropType<'top' | 'bottom'>, default: 'top' }, maxPopoverTrigger: String as PropType<'hover' | 'focus' | 'click'>, /* * Size of avatar, options: `large`, `small`, `default` * or a custom number size * */ size: { type: [Number, String, Object] as PropType, default: 'default' as AvatarSize, }, shape: { type: String as PropType<'circle' | 'square'>, default: 'circle' }, }); export type AvatarGroupProps = Partial>>; const Group = defineComponent({ compatConfig: { MODE: 3 }, name: 'AAvatarGroup', inheritAttrs: false, props: groupProps(), setup(props, { slots, attrs }) { const { prefixCls, direction } = useConfigInject('avatar', props); const groupPrefixCls = computed(() => `${prefixCls.value}-group`); const [wrapSSR, hashId] = useStyle(prefixCls); watchEffect(() => { const context = { size: props.size, shape: props.shape }; useAvatarProviderContext(context); }); return () => { const { maxPopoverPlacement = 'top', maxCount, maxStyle, maxPopoverTrigger = 'hover', shape, } = props; const cls = { [groupPrefixCls.value]: true, [`${groupPrefixCls.value}-rtl`]: direction.value === 'rtl', [`${attrs.class}`]: !!attrs.class, [hashId.value]: true, }; const children = getPropsSlot(slots, props); const childrenWithProps = flattenChildren(children).map((child, index) => cloneElement(child, { key: `avatar-key-${index}`, }), ); const numOfChildren = childrenWithProps.length; if (maxCount && maxCount < numOfChildren) { const childrenShow = childrenWithProps.slice(0, maxCount); const childrenHidden = childrenWithProps.slice(maxCount, numOfChildren); childrenShow.push( {`+${numOfChildren - maxCount}`} , ); return wrapSSR(
{childrenShow}
, ); } return wrapSSR(
{childrenWithProps}
, ); }; }, }); export default Group; ================================================ FILE: components/avatar/__tests__/Avatar.test.js ================================================ import { mount } from '@vue/test-utils'; import { asyncExpect } from '../../../tests/utils'; import Avatar from '..'; import useBreakpoint from '../../_util/hooks/useBreakpoint'; jest.mock('../../_util/hooks/useBreakpoint'); describe('Avatar Render', () => { let originOffsetWidth; const sizes = { xs: 24, sm: 32, md: 40, lg: 64, xl: 80, xxl: 100 }; beforeAll(() => { // Mock offsetHeight originOffsetWidth = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetWidth').get; Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { get() { if (this.className === 'ant-avatar-string') { return 100; } return 80; }, }); }); afterAll(() => { // Restore Mock offsetHeight Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { get: originOffsetWidth, }); }); it('Render long string correctly', () => { const wrapper = mount(Avatar, { slots: { default: () => 'TestString', }, }); const children = wrapper.findAll('.ant-avatar-string'); expect(children.length).toBe(1); }); it('should render fallback string correctly', async () => { global.document.body.innerHTML = ''; const wrapper = mount(Avatar, { slots: { default: () => 'Fallback', }, props: { src: 'http://error.url', }, attachTo: 'body', }); await asyncExpect(() => { wrapper.find('img').trigger('error'); }, 0); await asyncExpect(() => { const children = wrapper.findAll('.ant-avatar-string'); expect(children.length).toBe(1); expect(children[0].text()).toBe('Fallback'); }); }); it('should handle onError correctly', async () => { global.document.body.innerHTML = ''; const LOAD_FAILURE_SRC = 'http://error.url'; const LOAD_SUCCESS_SRC = 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png'; const Foo = { data() { return { src: LOAD_FAILURE_SRC, }; }, methods: { handleImgError() { this.src = LOAD_SUCCESS_SRC; return false; }, }, render() { const { src } = this; return ; }, }; const wrapper = mount(Foo, { attachTo: 'body' }); await asyncExpect(() => { // mock img load Error, since jsdom do not load resource by default // https://github.com/jsdom/jsdom/issues/1816 wrapper.find('img').trigger('error'); }, 0); await asyncExpect(() => { expect(wrapper.find('img')).not.toBeNull(); }, 0); await asyncExpect(() => { expect(wrapper.find('img').attributes('src')).toBe(LOAD_SUCCESS_SRC); }, 0); }); it('should show image on success after a failure state', async () => { global.document.body.innerHTML = ''; const LOAD_FAILURE_SRC = 'http://error.url'; const LOAD_SUCCESS_SRC = 'https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png'; const Foo = { data() { return { src: LOAD_FAILURE_SRC, }; }, render() { const { src } = this; return Fallback; }, }; const wrapper = mount(Foo, { sync: false, attachTo: 'body' }); await asyncExpect(() => { wrapper.find('img').trigger('error'); }, 0); await asyncExpect(() => { expect(wrapper.findComponent({ name: 'AAvatar' }).findAll('img').length).toBe(0); expect(wrapper.findAll('.ant-avatar-string').length).toBe(1); }, 0); await asyncExpect(() => { wrapper.vm.src = LOAD_SUCCESS_SRC; }); await asyncExpect(() => { expect(wrapper.findComponent({ name: 'AAvatar' }).findAll('img').length).toBe(1); expect(wrapper.findAll('.ant-avatar-image').length).toBe(1); }, 0); }); it('should calculate scale of avatar children correctly', async () => { let wrapper = mount({ render() { return Avatar; }, }); await asyncExpect(() => { expect(wrapper.find('.ant-avatar-string').html()).toMatchSnapshot(); }, 0); Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { get() { if (this.className === 'ant-avatar-string') { return 100; } return 40; }, }); wrapper = mount({ render() { return xx; }, }); await asyncExpect(() => { expect(wrapper.find('.ant-avatar-string').html()).toMatchSnapshot(); }, 0); }); it('should calculate scale of avatar children correctly with gap', async () => { const wrapper = mount({ render() { return Avatar; }, }); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); }, 0); }); Object.entries(sizes).forEach(([key, value]) => { it(`adjusts component size to ${value} when window size is ${key}`, async () => { useBreakpoint.mockReturnValue({ value: { [key]: true } }); const wrapper = mount({ render() { return ; }, }); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); }, 0); }); }); it('fallback', () => { const div = global.document.createElement('div'); global.document.body.appendChild(div); const wrapper = mount( { render() { return ( A ); }, }, { attachTo: div }, ); wrapper.find('img').trigger('error'); expect(wrapper.html()).toMatchSnapshot(); wrapper.unmount(); global.document.body.removeChild(div); }); }); ================================================ FILE: components/avatar/__tests__/__snapshots__/Avatar.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Avatar Render adjusts component size to 24 when window size is xs 1`] = ``; exports[`Avatar Render adjusts component size to 32 when window size is sm 1`] = ``; exports[`Avatar Render adjusts component size to 40 when window size is md 1`] = ``; exports[`Avatar Render adjusts component size to 64 when window size is lg 1`] = ``; exports[`Avatar Render adjusts component size to 80 when window size is xl 1`] = ``; exports[`Avatar Render adjusts component size to 100 when window size is xxl 1`] = ``; exports[`Avatar Render fallback 1`] = ``; exports[`Avatar Render should calculate scale of avatar children correctly 1`] = `Avatar`; exports[`Avatar Render should calculate scale of avatar children correctly 2`] = `xx`; exports[`Avatar Render should calculate scale of avatar children correctly with gap 1`] = `Avatar`; ================================================ FILE: components/avatar/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/avatar/demo/badge.vue correctly 1`] = `

1

`; exports[`renders ./components/avatar/demo/basic.vue correctly 1`] = `
`; exports[`renders ./components/avatar/demo/dynamic.vue correctly 1`] = ` U `; exports[`renders ./components/avatar/demo/group.vue correctly 1`] = `
K
K +2
K +2
`; exports[`renders ./components/avatar/demo/responsive.vue correctly 1`] = ``; exports[`renders ./components/avatar/demo/type.vue correctly 1`] = ` U USER U `; ================================================ FILE: components/avatar/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('avatar'); ================================================ FILE: components/avatar/demo/badge.vue ================================================ --- order: 3 title: zh-CN: 带徽标的头像 en-US: With Badge --- ## zh-CN 通常用于消息提示。 ## en-US Usually used for reminders and notifications. ================================================ FILE: components/avatar/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本 en-US: Basic --- ## zh-CN 头像有三种尺寸,两种形状可选。 ## en-US Three sizes and two shapes are available. ================================================ FILE: components/avatar/demo/dynamic.vue ================================================ --- order: 2 title: zh-CN: 自动调整字符大小 en-US: Autoset Font Size --- ## zh-CN 对于字符型的头像,当字符串较长时,字体大小可以根据头像宽度自动调整。也可使用 `gap`` 来设置字符距离左右两侧边界单位像素。 ## en-US For letter type Avatar, when the letters are too long to display, the font size can be automatically adjusted according to the width of the Avatar. You can also use `gap` to set the unit distance between left and right sides. ================================================ FILE: components/avatar/demo/group.vue ================================================ --- order: 4 title: zh-CN: Avatar.Group en-US: Avatar.Group --- ## zh-CN 头像组合展现。 ## en-US Avatar group display. ================================================ FILE: components/avatar/demo/index.vue ================================================ ================================================ FILE: components/avatar/demo/responsive.vue ================================================ --- order: 5 title: zh-CN: 响应式尺寸 en-US: Responsive Size --- ## zh-CN 头像大小可以根据屏幕大小自动调整。 ## en-US Avatar size can be automatically adjusted based on the screen size. ================================================ FILE: components/avatar/demo/type.vue ================================================ --- order: 1 title: zh-CN: 类型 en-US: Type --- ## zh-CN 支持三种类型:图片、Icon 以及字符,其中 Icon 和字符型可以自定义图标颜色及背景色。 ## en-US Image, Icon and letter are supported, and the latter two kinds avatar can have custom colors and background colors. ================================================ FILE: components/avatar/index.en-US.md ================================================ --- category: Components type: Data Display title: Avatar cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JJBSS5lBG4IAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*YbgyQaRGz-UAAAAAAAAAAAAADrJ8AQ/original --- Avatars can be used to represent people or objects. It supports images, `Icon`s, or letters. ## API ### Avatar | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | alt | This attribute defines the alternative text describing the image | string | - | | | crossOrigin | cors settings attributes | `'anonymous'` \| `'use-credentials'` \| `''` | - | 3.0 | | draggable | Whether the picture is allowed to be dragged | boolean \| `'true'` \| `'false'` | - | 2.2.0 | | gap | Letter type unit distance between left and right sides | number | 4 | 2.2.0 | | icon | the `Icon` type for an icon avatar, see `Icon` Component | VNode \| slot | - | | | loadError | handler when img load error, return false to prevent default fallback behavior | () => boolean | - | | | shape | the shape of avatar | `circle` \| `square` | `circle` | | | size | The size of the avatar | number \| `large` \| `small` \| `default` \| { xs: number, sm: number, ...} | `default` | 2.2.0 | | src | the address of the image for an image avatar | string | - | | | srcset | a list of sources to use for different screen resolutions | string | - | | ### Avatar.Group (2.2.0) | Property | Description | Type | Default | Version | | --- | --- | --- | --- | --- | | maxCount | Max avatars to show | number | - | | | maxPopoverPlacement | The placement of excess avatar Popover | `top` \| `bottom` | `top` | | | maxPopoverTrigger | Set the trigger of excess avatar Popover | `hover` \| `focus` \| `click` | `hover` | 3.0 | | maxStyle | The style of excess avatar style | CSSProperties | - | | | size | The size of the avatar | number \| `large` \| `small` \| `default` \| { xs: number, sm: number, ...} | `default` | | | shape | The shape of the avatar | `circle` \| `square` | `circle` | 4.0 | ================================================ FILE: components/avatar/index.ts ================================================ import type { App, Plugin } from 'vue'; import Avatar from './Avatar'; import Group from './Group'; export { avatarProps } from './Avatar'; export type { AvatarProps, AvatarSize } from './Avatar'; export type { AvatarGroupProps } from './Group'; Avatar.Group = Group; /* istanbul ignore next */ Avatar.install = function (app: App) { app.component(Avatar.name, Avatar); app.component(Group.name, Group); return app; }; export { Group as AvatarGroup }; export default Avatar as typeof Avatar & Plugin & { readonly Group: typeof Group; }; ================================================ FILE: components/avatar/index.zh-CN.md ================================================ --- category: Components subtitle: 头像 type: 数据展示 title: Avatar cover: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*JJBSS5lBG4IAAAAAAAAAAAAADrJ8AQ/original coverDark: https://mdn.alipayobjects.com/huamei_7uahnr/afts/img/A*YbgyQaRGz-UAAAAAAAAAAAAADrJ8AQ/original --- 用来代表用户或事物,支持图片、图标或字符展示。 ## 设计师专属 安装 [Kitchen Sketch 插件 💎](https://kitchen.alipay.com),一键填充高逼格头像和文本。 ## API ### Avatar | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | alt | 图像无法显示时的替代文本 | string | - | | | crossOrigin | cors 属性设置 | `'anonymous'` \| `'use-credentials'` \| `''` | - | 3.0 | | draggable | 图片是否允许拖动 | boolean \| `'true'` \| `'false'` | - | 2.2.0 | | gap | 字符类型距离左右两侧边界单位像素 | number | 4 | 2.2.0 | | icon | 设置头像的图标类型,可设为 Icon 的 `type` 或 VNode | VNode \| slot | - | | | loadError | 图片加载失败的事件,返回 false 会关闭组件默认的 fallback 行为 | () => boolean | - | | | shape | 指定头像的形状 | `circle` \| `square` | `circle` | | | size | 设置头像的大小 | number \| `large` \| `small` \| `default` \| { xs: number, sm: number, ...} | `default` | 2.2.0 | | src | 图片类头像的资源地址 | string | - | | | srcset | 设置图片类头像响应式资源地址 | string | - | | ### Avatar.Group (2.2.0) | 参数 | 说明 | 类型 | 默认值 | 版本 | | --- | --- | --- | --- | --- | | maxCount | 显示的最大头像个数 | number | - | | | maxPopoverPlacement | 多余头像气泡弹出位置 | `top` \| `bottom` | `top` | | | maxPopoverTrigger | 设置多余头像 Popover 的触发方式 | `hover` \| `focus` \| `click` | `hover` | 3.0 | | maxStyle | 多余头像样式 | CSSProperties | - | | | size | 设置头像的大小 | number \| `large` \| `small` \| `default` \| { xs: number, sm: number, ...} | `default` | | | shape | 设置头像的形状 | `circle` \| `square` | `circle` | 4.0 | ================================================ FILE: components/avatar/style/index.ts ================================================ import type { CSSObject } from '../../_util/cssinjs'; import type { FullToken, GenerateStyle } from '../../theme/internal'; import { genComponentStyleHook, mergeToken } from '../../theme/internal'; import { resetComponent } from '../../style'; export interface ComponentToken { /** * @desc 头像背景色 * @descEN Background color of Avatar */ containerSize: number; /** * @desc 大号头像尺寸 * @descEN Size of large Avatar */ containerSizeLG: number; /** * @desc 小号头像尺寸 * @descEN Size of small Avatar */ containerSizeSM: number; /** * @desc 头像文字大小 * @descEN Font size of Avatar */ textFontSize: number; /** * @desc 大号头像文字大小 * @descEN Font size of large Avatar */ textFontSizeLG: number; /** * @desc 小号头像文字大小 * @descEN Font size of small Avatar */ textFontSizeSM: number; /** * @desc 头像组间距 * @descEN Spacing between avatars in a group */ groupSpace: number; /** * @desc 头像组重叠宽度 * @descEN Overlapping of avatars in a group */ groupOverlapping: number; /** * @desc 头像组边框颜色 * @descEN Border color of avatars in a group */ groupBorderColor: string; } type AvatarToken = FullToken<'Avatar'> & { avatarBg: string; avatarColor: string; avatarBgColor: string; }; const genBaseStyle: GenerateStyle = token => { const { antCls, componentCls, iconCls, avatarBg, avatarColor, containerSize, containerSizeLG, containerSizeSM, textFontSize, textFontSizeLG, textFontSizeSM, borderRadius, borderRadiusLG, borderRadiusSM, lineWidth, lineType, } = token; // Avatar size style const avatarSizeStyle = (size: number, fontSize: number, radius: number): CSSObject => ({ width: size, height: size, lineHeight: `${size - lineWidth * 2}px`, borderRadius: '50%', [`&${componentCls}-square`]: { borderRadius: radius, }, [`${componentCls}-string`]: { position: 'absolute', left: { _skip_check_: true, value: '50%', }, transformOrigin: '0 center', }, [`&${componentCls}-icon`]: { fontSize, [`> ${iconCls}`]: { margin: 0, }, }, }); return { [componentCls]: { ...resetComponent(token), position: 'relative', display: 'inline-block', overflow: 'hidden', color: avatarColor, whiteSpace: 'nowrap', textAlign: 'center', verticalAlign: 'middle', background: avatarBg, border: `${lineWidth}px ${lineType} transparent`, [`&-image`]: { background: 'transparent', }, [`${antCls}-image-img`]: { display: 'block', }, ...avatarSizeStyle(containerSize, textFontSize, borderRadius), [`&-lg`]: { ...avatarSizeStyle(containerSizeLG, textFontSizeLG, borderRadiusLG), }, [`&-sm`]: { ...avatarSizeStyle(containerSizeSM, textFontSizeSM, borderRadiusSM), }, '> img': { display: 'block', width: '100%', height: '100%', objectFit: 'cover', }, }, }; }; const genGroupStyle: GenerateStyle = token => { const { componentCls, groupBorderColor, groupOverlapping, groupSpace } = token; return { [`${componentCls}-group`]: { display: 'inline-flex', [`${componentCls}`]: { borderColor: groupBorderColor, }, [`> *:not(:first-child)`]: { marginInlineStart: groupOverlapping, }, }, [`${componentCls}-group-popover`]: { [`${componentCls} + ${componentCls}`]: { marginInlineStart: groupSpace, }, }, }; }; export default genComponentStyleHook( 'Avatar', token => { const { colorTextLightSolid, colorTextPlaceholder } = token; const avatarToken = mergeToken(token, { avatarBg: colorTextPlaceholder, avatarColor: colorTextLightSolid, }); return [genBaseStyle(avatarToken), genGroupStyle(avatarToken)]; }, token => { const { controlHeight, controlHeightLG, controlHeightSM, fontSize, fontSizeLG, fontSizeXL, fontSizeHeading3, marginXS, marginXXS, colorBorderBg, } = token; return { containerSize: controlHeight, containerSizeLG: controlHeightLG, containerSizeSM: controlHeightSM, textFontSize: Math.round((fontSizeLG + fontSizeXL) / 2), textFontSizeLG: fontSizeHeading3, textFontSizeSM: fontSize, groupSpace: marginXXS, groupOverlapping: -marginXS, groupBorderColor: colorBorderBg, }; }, ); ================================================ FILE: components/badge/Badge.tsx ================================================ import PropTypes from '../_util/vue-types'; import ScrollNumber from './ScrollNumber'; import classNames from '../_util/classNames'; import { getPropsSlot, flattenChildren } from '../_util/props-util'; import { cloneElement } from '../_util/vnode'; import { getTransitionProps } from '../_util/transition'; import type { ExtractPropTypes, CSSProperties, PropType } from 'vue'; import { defineComponent, computed, ref, watch, Transition } from 'vue'; import Ribbon from './Ribbon'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import isNumeric from '../_util/isNumeric'; import useStyle from './style'; import type { PresetColorKey } from '../theme/interface'; import type { LiteralUnion, CustomSlotsType } from '../_util/type'; import type { PresetStatusColorType } from '../_util/colors'; import { isPresetColor } from '../_util/colors'; export const badgeProps = () => ({ /** Number to show in badge */ count: PropTypes.any.def(null), showZero: { type: Boolean, default: undefined }, /** Max count to show */ overflowCount: { type: Number, default: 99 }, /** whether to show red dot without number */ dot: { type: Boolean, default: undefined }, prefixCls: String, scrollNumberPrefixCls: String, status: { type: String as PropType }, size: { type: String as PropType<'default' | 'small'>, default: 'default' }, color: String as PropType>, text: PropTypes.any, offset: Array as unknown as PropType<[number | string, number | string]>, numberStyle: { type: Object as PropType, default: undefined as CSSProperties }, title: String, }); export type BadgeProps = Partial>>; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'ABadge', Ribbon, inheritAttrs: false, props: badgeProps(), slots: Object as CustomSlotsType<{ text: any; count: any; default: any; }>, setup(props, { slots, attrs }) { const { prefixCls, direction } = useConfigInject('badge', props); const [wrapSSR, hashId] = useStyle(prefixCls); // ================================ Misc ================================ const numberedDisplayCount = computed(() => { return ( (props.count as number) > (props.overflowCount as number) ? `${props.overflowCount}+` : props.count ) as string | number | null; }); const isZero = computed( () => numberedDisplayCount.value === '0' || numberedDisplayCount.value === 0, ); const ignoreCount = computed(() => props.count === null || (isZero.value && !props.showZero)); const hasStatus = computed( () => ((props.status !== null && props.status !== undefined) || (props.color !== null && props.color !== undefined)) && ignoreCount.value, ); const showAsDot = computed(() => props.dot && !isZero.value); const mergedCount = computed(() => (showAsDot.value ? '' : numberedDisplayCount.value)); const isHidden = computed(() => { const isEmpty = mergedCount.value === null || mergedCount.value === undefined || mergedCount.value === ''; return (isEmpty || (isZero.value && !props.showZero)) && !showAsDot.value; }); // Count should be cache in case hidden change it const livingCount = ref(props.count); // We need cache count since remove motion should not change count display const displayCount = ref(mergedCount.value); // We will cache the dot status to avoid shaking on leaved motion const isDotRef = ref(showAsDot.value); watch( [() => props.count, mergedCount, showAsDot], () => { if (!isHidden.value) { livingCount.value = props.count; displayCount.value = mergedCount.value; isDotRef.value = showAsDot.value; } }, { immediate: true }, ); // InternalColor const isInternalColor = computed(() => isPresetColor(props.color, false)); // Shared styles const statusCls = computed(() => ({ [`${prefixCls.value}-status-dot`]: hasStatus.value, [`${prefixCls.value}-status-${props.status}`]: !!props.status, [`${prefixCls.value}-color-${props.color}`]: isInternalColor.value, })); const statusStyle = computed(() => { if (props.color && !isInternalColor.value) { return { background: props.color, color: props.color }; } else { return {}; } }); const scrollNumberCls = computed(() => ({ [`${prefixCls.value}-dot`]: isDotRef.value, [`${prefixCls.value}-count`]: !isDotRef.value, [`${prefixCls.value}-count-sm`]: props.size === 'small', [`${prefixCls.value}-multiple-words`]: !isDotRef.value && displayCount.value && displayCount.value.toString().length > 1, [`${prefixCls.value}-status-${props.status}`]: !!props.status, [`${prefixCls.value}-color-${props.color}`]: isInternalColor.value, })); return () => { const { offset, title, color } = props; const style = attrs.style as CSSProperties; const text = getPropsSlot(slots, props, 'text'); const pre = prefixCls.value; const count = livingCount.value; let children = flattenChildren(slots.default?.()); children = children.length ? children : null; const visible = !!(!isHidden.value || slots.count); // =============================== Styles =============================== const mergedStyle = (() => { if (!offset) { return { ...style }; } const offsetStyle: CSSProperties = { marginTop: isNumeric(offset[1]) ? `${offset[1]}px` : offset[1], }; if (direction.value === 'rtl') { offsetStyle.left = `${parseInt(offset[0] as string, 10)}px`; } else { offsetStyle.right = `${-parseInt(offset[0] as string, 10)}px`; } return { ...offsetStyle, ...style, }; })(); // =============================== Render =============================== // >>> Title const titleNode = title ?? (typeof count === 'string' || typeof count === 'number' ? count : undefined); // >>> Status Text const statusTextNode = visible || !text ? null : {text}; // >>> Display Component const displayNode = typeof count === 'object' || (count === undefined && slots.count) ? cloneElement( count ?? slots.count?.(), { style: mergedStyle, }, false, ) : null; const badgeClassName = classNames( pre, { [`${pre}-status`]: hasStatus.value, [`${pre}-not-a-wrapper`]: !children, [`${pre}-rtl`]: direction.value === 'rtl', }, attrs.class, hashId.value, ); // if (!children && hasStatus.value) { const statusTextColor = mergedStyle.color; return wrapSSR( {text} , ); } const transitionProps = getTransitionProps(children ? `${pre}-zoom` : '', { appear: false, }); let scrollNumberStyle: CSSProperties = { ...mergedStyle, ...(props.numberStyle as object) }; if (color && !isInternalColor.value) { scrollNumberStyle = scrollNumberStyle || {}; scrollNumberStyle.background = color; } return wrapSSR( {children} {displayNode} {statusTextNode} , ); }; }, }); ================================================ FILE: components/badge/Ribbon.tsx ================================================ import type { CustomSlotsType, LiteralUnion } from '../_util/type'; import type { PresetColorType } from '../_util/colors'; import useStyle from './style'; import { isPresetColor } from '../_util/colors'; import type { CSSProperties, PropType, ExtractPropTypes } from 'vue'; import { defineComponent, computed } from 'vue'; import PropTypes from '../_util/vue-types'; import useConfigInject from '../config-provider/hooks/useConfigInject'; export const ribbonProps = () => ({ prefix: String, color: { type: String as PropType> }, text: PropTypes.any, placement: { type: String as PropType<'start' | 'end'>, default: 'end' }, }); export type RibbonProps = Partial>>; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'ABadgeRibbon', inheritAttrs: false, props: ribbonProps(), slots: Object as CustomSlotsType<{ text: any; default: any; }>, setup(props, { attrs, slots }) { const { prefixCls, direction } = useConfigInject('ribbon', props); const [wrapSSR, hashId] = useStyle(prefixCls); const colorInPreset = computed(() => isPresetColor(props.color, false)); const ribbonCls = computed(() => [ prefixCls.value, `${prefixCls.value}-placement-${props.placement}`, { [`${prefixCls.value}-rtl`]: direction.value === 'rtl', [`${prefixCls.value}-color-${props.color}`]: colorInPreset.value, }, ]); return () => { const { class: className, style, ...restAttrs } = attrs; const colorStyle: CSSProperties = {}; const cornerColorStyle: CSSProperties = {}; if (props.color && !colorInPreset.value) { colorStyle.background = props.color; cornerColorStyle.color = props.color; } return wrapSSR(
{slots.default?.()}
{props.text || slots.text?.()}
, ); }; }, }); ================================================ FILE: components/badge/ScrollNumber.tsx ================================================ import classNames from '../_util/classNames'; import PropTypes from '../_util/vue-types'; import { cloneElement } from '../_util/vnode'; import type { ExtractPropTypes, CSSProperties, DefineComponent, HTMLAttributes } from 'vue'; import { defineComponent } from 'vue'; import useConfigInject from '../config-provider/hooks/useConfigInject'; import SingleNumber from './SingleNumber'; import { filterEmpty } from '../_util/props-util'; const scrollNumberProps = { prefixCls: String, count: PropTypes.any, component: String, title: PropTypes.any, show: Boolean, }; export type ScrollNumberProps = Partial>; export default defineComponent({ compatConfig: { MODE: 3 }, name: 'ScrollNumber', inheritAttrs: false, props: scrollNumberProps, setup(props, { attrs, slots }) { const { prefixCls } = useConfigInject('scroll-number', props); return () => { const { prefixCls: customizePrefixCls, count, title, show, component: Tag = 'sup' as unknown as DefineComponent, class: className, style, ...restProps } = { ...props, ...attrs } as ScrollNumberProps & HTMLAttributes & { style: CSSProperties }; // ============================ Render ============================ const newProps = { ...restProps, style, 'data-show': props.show, class: classNames(prefixCls.value, className), title: title as string, }; // Only integer need motion let numberNodes: any = count; if (count && Number(count) % 1 === 0) { const numberList = String(count).split(''); numberNodes = numberList.map((num, i) => ( )); } // allow specify the border // mock border-color by box-shadow for compatible with old usage: // if (style && style.borderColor) { newProps.style = { ...(style as CSSProperties), boxShadow: `0 0 0 1px ${style.borderColor} inset`, }; } const children = filterEmpty(slots.default?.()); if (children && children.length) { return cloneElement( children, { class: classNames(`${prefixCls.value}-custom-component`), }, false, ); } return {numberNodes}; }; }, }); ================================================ FILE: components/badge/SingleNumber.tsx ================================================ import type { CSSProperties } from 'vue'; import { computed, defineComponent, onUnmounted, reactive, ref, watch } from 'vue'; import classNames from '../_util/classNames'; export interface UnitNumberProps { prefixCls: string; value: string | number; offset?: number; current?: boolean; } function UnitNumber({ prefixCls, value, current, offset = 0 }: UnitNumberProps) { let style: CSSProperties | undefined; if (offset) { style = { position: 'absolute', top: `${offset}00%`, left: 0, }; } return (

{value}

); } function getOffset(start: number, end: number, unit: -1 | 1) { let index = start; let offset = 0; while ((index + 10) % 10 !== end) { index += unit; offset += unit; } return offset; } export default defineComponent({ compatConfig: { MODE: 3 }, name: 'SingleNumber', props: { prefixCls: String, value: String, count: Number, }, setup(props) { const originValue = computed(() => Number(props.value)); const originCount = computed(() => Math.abs(props.count)); const state = reactive({ prevValue: originValue.value, prevCount: originCount.value, }); // ============================= Events ============================= const onTransitionEnd = () => { state.prevValue = originValue.value; state.prevCount = originCount.value; }; const timeout = ref(); // Fallback if transition event not support watch( originValue, () => { clearTimeout(timeout.value); timeout.value = setTimeout(() => { onTransitionEnd(); }, 1000); }, { flush: 'post' }, ); onUnmounted(() => { clearTimeout(timeout.value); }); return () => { let unitNodes: any[]; let offsetStyle: CSSProperties = {}; const value = originValue.value; if (state.prevValue === value || Number.isNaN(value) || Number.isNaN(state.prevValue)) { // Nothing to change unitNodes = [UnitNumber({ ...props, current: true } as UnitNumberProps)]; offsetStyle = { transition: 'none', }; } else { unitNodes = []; // Fill basic number units const end = value + 10; const unitNumberList: number[] = []; for (let index = value; index <= end; index += 1) { unitNumberList.push(index); } // Fill with number unit nodes const prevIndex = unitNumberList.findIndex(n => n % 10 === state.prevValue); unitNodes = unitNumberList.map((n, index) => { const singleUnit = n % 10; return UnitNumber({ ...props, value: singleUnit, offset: index - prevIndex, current: index === prevIndex, } as UnitNumberProps); }); // Calculate container offset value const unit = state.prevCount < originCount.value ? 1 : -1; offsetStyle = { transform: `translateY(${-getOffset(state.prevValue, value, unit)}00%)`, }; } return ( onTransitionEnd()} > {unitNodes} ); }; }, }); ================================================ FILE: components/badge/__tests__/__snapshots__/demo.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`renders ./components/badge/demo/basic.vue correctly 1`] = `

5

0

`; exports[`renders ./components/badge/demo/change.vue correctly 1`] = `

5

`; exports[`renders ./components/badge/demo/colors.vue correctly 1`] = `

Presets:

pink
red
yellow
orange
cyan
green
blue
purple
geekblue
magenta
volcano
gold
lime
#f50
#2db7f5
#87d068
#108ee9 `; exports[`renders ./components/badge/demo/dot.vue correctly 1`] = ` Link something `; exports[`renders ./components/badge/demo/link.vue correctly 1`] = `

5

`; exports[`renders ./components/badge/demo/no-wrapper.vue correctly 1`] = `

2

5

4

99+ `; exports[`renders ./components/badge/demo/overflow.vue correctly 1`] = `

9

9

99+ 10+ 999+ `; exports[`renders ./components/badge/demo/ribbon.vue correctly 1`] = `
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
Pushes open the window
and raises the spyglass.
Hippies
`; exports[`renders ./components/badge/demo/status.vue correctly 1`] = `
Success
Error
Default
Processing
warning
`; exports[`renders ./components/badge/demo/title.vue correctly 1`] = `

5

`; ================================================ FILE: components/badge/__tests__/__snapshots__/index.test.js.snap ================================================ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Badge badge should support float number 1`] = `"3.5"`; exports[`Badge badge should support float number 2`] = `3.5`; exports[`Badge render correct with negative number 1`] = `

-

1

0

-

1

0

`; exports[`Badge should be compatible with borderColor style 1`] = `

4

`; exports[`Badge should render when count is changed 1`] = `

1

0

1

2

3

4

5

6

7

8

9

0

`; exports[`Badge should render when count is changed 2`] = `

1

1

2

3

4

5

6

7

8

9

0

1

`; exports[`Badge should render when count is changed 3`] = `

1

1

2

3

4

5

6

7

8

9

0

1

`; exports[`Badge should render when count is changed 4`] = `

1

0

1

2

3

4

5

6

7

8

9

0

`; exports[`Badge should render when count is changed 5`] = `

9

`; exports[`Badge should support offset when count is a VueNode 1`] = ` head `; exports[`Badge text works with vnode 1`] = `hello`; ================================================ FILE: components/badge/__tests__/demo.test.js ================================================ import demoTest from '../../../tests/shared/demoTest'; demoTest('badge'); ================================================ FILE: components/badge/__tests__/index.test.js ================================================ import { mount } from '@vue/test-utils'; import Badge from '../index'; import mountTest from '../../../tests/shared/mountTest'; import { asyncExpect } from '../../../tests/utils'; describe('Badge', () => { it('badge dot not scaling count > 9', () => { const badge = mount({ render() { return ; }, }); expect(badge.findAll('.ant-card-multiple-words').length).toBe(0); }); it('badge should support float number', () => { let wrapper = mount({ render() { return ; }, }); expect(wrapper.text()).toMatchSnapshot(); wrapper = mount({ render() { return ; }, }); expect(wrapper.html()).toMatchSnapshot(); }); it('badge dot not showing count == 0', () => { const badge = mount({ render() { return ; }, }); expect(badge.findAll('.ant-badge-dot').length).toBe(0); }); it('should have an overriden title attribute', () => { const badge = mount({ render() { return ; }, }); expect(badge.find('.ant-scroll-number').element.attributes.getNamedItem('title').value).toEqual( 'Custom title', ); }); // https://github.com/ant-design/ant-design/issues/10626 // it('should be composable with Tooltip', async () => { // const wrapper = mount({ // render () { // return // // // }, // }, { sync: false }) // await asyncExpect(() => { // wrapper.find({ name: 'ABadge' }).trigger('mouseenter') // }, 0) // expect(wrapper.vm.$refs.tooltip.sVisible).toBe(true) // }) it('should render when count is changed', async () => { const wrapper = mount(Badge, { props: { count: 9, }, sync: false, }); await asyncExpect(() => { wrapper.setProps({ count: 10 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 11 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 11 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 10 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); wrapper.setProps({ count: 9 }); }, 100); await asyncExpect(() => { expect(wrapper.html()).toMatchSnapshot(); }, 100); }); it('should be compatible with borderColor style', () => { const wrapper = mount({ render() { return ( ); }, }); expect(wrapper.html()).toMatchSnapshot(); }); // https://github.com/ant-design/ant-design/issues/13694 it('should support offset when count is a VueNode', () => { const wrapper = mount({ render() { return ( } offset={[10, 20]}> head ); }, }); expect(wrapper.html()).toMatchSnapshot(); }); // https://github.com/ant-design/ant-design/issues/15799 it('render correct with negative number', () => { const wrapper = mount({ render() { return (
); }, }); expect(wrapper.html()).toMatchSnapshot(); }); it('text works with vnode', () => { const wrapper = mount({ render() { return hello} />; }, }); expect(wrapper.html()).toMatchSnapshot(); }); }); describe('Ribbon', () => { mountTest(Badge.Ribbon); describe('placement', () => { it('works with `start` & `end` placement', () => { const wrapperStart = mount({ render() { return (
); }, }); expect(wrapperStart.findAll('.ant-ribbon-placement-start').length).toEqual(1); const wrapperEnd = mount({ render() { return (
); }, }); expect(wrapperEnd.findAll('.ant-ribbon-placement-end').length).toEqual(1); }); }); describe('color', () => { it('works with preset color', () => { const wrapper = mount({ render() { return (
); }, }); expect(wrapper.findAll('.ant-ribbon-color-green').length).toEqual(1); }); }); describe('text', () => { it('works with string', () => { const wrapper = mount({ render() { return (
); }, }); expect(wrapper.find('.ant-ribbon').text()).toEqual('cool'); }); it('works with element', () => { const wrapper = mount({ render() { return ( }>
); }, }); expect(wrapper.findAll('.cool').length).toEqual(1); }); }); }); ================================================ FILE: components/badge/demo/basic.vue ================================================ --- order: 0 title: zh-CN: 基本 en-US: Basic --- ## zh-CN 简单的徽章展示,当 `count` 为 `0` 时,默认不显示,但是可以使用 `showZero` 修改为显示。 ## en-US Simplest Usage. Badge will be hidden when `count` is `0`, but we can use `showZero` to show it. ================================================ FILE: components/badge/demo/change.vue ================================================ --- order: 5 title: zh-CN: 动态 en-US: Dynamic --- ## zh-CN 展示动态变化的效果。 ## en-US The count will be animated as it changes. ================================================ FILE: components/badge/demo/colors.vue ================================================ --- order: 7 title: zh-CN: 多彩徽标 en-US: Colorful Badge --- ## zh-CN 1.5.0 后新增。我们添加了多种预设色彩的徽标样式,用作不同场景使用。如果预设值不能满足你的需求,可以设置为具体的色值。 ## en-US New feature after 3.16.0. We preset a series of colorful Badge styles for use in different situations. You can also set it to a hex color string for custom color. ================================================ FILE: components/badge/demo/dot.vue ================================================ --- order: 3 title: zh-CN: 讨嫌的小红点 en-US: Red badge --- ## zh-CN 没有具体的数字。 ## en-US This will simply display a red badge, without a specific count. If count equals 0, it won't display the dot. ================================================ FILE: components/badge/demo/index.vue ================================================