├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── bug_report.zh-CN.yml │ ├── config.yml │ ├── feature_request.yml │ └── feature_request.zh-CN.yml ├── dependabot.yml ├── pull_request_template.md └── workflows │ └── node.js.yml ├── .gitignore ├── .husky └── pre-commit ├── .npmrc ├── .pnpmfile.cjs ├── .prettierignore ├── .prettierrc ├── CHANGELOG.en-US.md ├── CHANGELOG.zh-CN.md ├── CONTRIBUTING.md ├── CONTRIBUTING.zh-CN.md ├── LICENSE ├── README.md ├── README.zh-CN.md ├── babel.config.js ├── build ├── loaders │ ├── ComponentDemoTemplate.vue │ ├── convert-md-to-demo.js │ ├── convert-md-to-doc.js │ ├── convert-vue-to-demo.js │ ├── md-renderer.js │ ├── naive-ui-demo-loader.js │ ├── naive-ui-doc-loader.js │ ├── project-path.js │ └── test │ │ ├── basic.test.md │ │ ├── component.test.md │ │ ├── test.md │ │ ├── testDemoLoader.js │ │ └── testMdLoader.js ├── utils │ ├── get-demo-by-path.js │ ├── handle-merge-code.js │ ├── terse-cssr.js │ └── tsToJs.js ├── vite-plugin-css-render.js ├── vite-plugin-demo.js └── vite-plugin-index-tranform.js ├── demo ├── Caveat.md ├── Site.vue ├── SiteHeader.vue ├── SiteRoot.vue ├── assets │ └── images │ │ ├── naivelogo.png │ │ └── naivelogo.svg ├── index.dev.js ├── index.prod.js ├── pages │ ├── Layout.vue │ ├── docs │ │ ├── changelog │ │ │ ├── enUS │ │ │ │ └── index.vue │ │ │ └── zhCN │ │ │ │ └── index.vue │ │ ├── common-issues │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── community │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── controlled-uncontrolled │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── customize-theme │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── experimental-features │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── fonts │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── i18n │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── import-on-demand │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── installation │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── introduction │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── jsx │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── nuxtjs │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── ssr │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── style-conflict │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── supported-platforms │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── theme │ │ │ ├── enUS │ │ │ │ ├── element.demo.md │ │ │ │ ├── index.demo-entry.md │ │ │ │ ├── provide-theme.demo.md │ │ │ │ └── use-theme-vars.demo.md │ │ │ └── zhCN │ │ │ │ ├── element.demo.md │ │ │ │ ├── index.demo-entry.md │ │ │ │ ├── provide-theme.demo.md │ │ │ │ └── use-theme-vars.demo.md │ │ ├── umd │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── usage-sfc │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── vite-ssge │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ ├── vitepress │ │ │ ├── enUS │ │ │ │ └── index.md │ │ │ └── zhCN │ │ │ │ └── index.md │ │ └── vue3 │ │ │ ├── enUS │ │ │ └── index.vue │ │ │ └── zhCN │ │ │ └── index.vue │ └── home │ │ ├── Footer.vue │ │ ├── Left.vue │ │ ├── Right.vue │ │ └── index.vue ├── routes │ ├── router.js │ └── routes.js ├── setup.js ├── store │ ├── hljs.js │ ├── index.js │ └── menu-options.js ├── styles │ ├── Metropolis-Bold.woff2 │ ├── Metropolis.css │ └── demo.css └── utils │ ├── ComponentDemo.vue │ ├── ComponentDemos.tsx │ ├── CopyCodeButton.vue │ ├── EditInCodeSandboxButton.vue │ ├── EditOnGithubButton.vue │ ├── EditOnGithubHeader.vue │ ├── codesandbox.js │ ├── composables.js │ ├── github-url.js │ └── route.js ├── design-notes ├── design-token-status.md ├── how-to-name-a-style-var.md ├── maintaining.md ├── think.md └── todo.md ├── eslint.config.mjs ├── esm-test └── index.spec.js ├── index.html ├── jest.config.js ├── package.json ├── playground ├── collect-vars.js ├── ssr │ ├── app.js │ ├── build.sh │ ├── client.js │ ├── pre-build.sh │ ├── readme.md │ ├── server.js │ └── webpack.config.server.js ├── testAsyncValidator.js ├── testColor.js └── uploadServer.js ├── postcss.config.js ├── rollup.config.js ├── scripts ├── gen-component-declaration.js ├── gen-css-vars-dts.js ├── gen-version.js ├── md-to-vue.js ├── post-build-site │ └── post-build-site.sh ├── post-build │ ├── complete-path.js │ ├── gen-web-types.js │ ├── index.js │ └── terse-cssr.js ├── pre-build-site │ └── pre-build-site.sh ├── pre-build │ └── pre-cjs-build.js ├── release-changelog.mjs └── utils │ ├── collect-vars.js │ ├── index.js │ ├── loader.js │ └── replace-define.js ├── src ├── _internal │ ├── README.md │ ├── clear │ │ ├── index.ts │ │ └── src │ │ │ ├── Clear.tsx │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── close │ │ ├── index.ts │ │ └── src │ │ │ ├── Close.tsx │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── fade-in-expand-transition │ │ ├── index.ts │ │ └── src │ │ │ └── FadeInExpandTransition.ts │ ├── focus-detector │ │ ├── index.tsx │ │ └── src │ │ │ └── FocusDetector.tsx │ ├── icon-switch-transition │ │ ├── index.ts │ │ └── src │ │ │ └── IconSwitchTransition.tsx │ ├── icon │ │ ├── index.ts │ │ └── src │ │ │ ├── Icon.tsx │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── icons │ │ ├── Add.tsx │ │ ├── ArrowBack.tsx │ │ ├── ArrowDown.tsx │ │ ├── ArrowUp.tsx │ │ ├── Attach.tsx │ │ ├── Backward.tsx │ │ ├── Cancel.tsx │ │ ├── Checkmark.tsx │ │ ├── ChevronDown.tsx │ │ ├── ChevronDownFilled.tsx │ │ ├── ChevronLeft.tsx │ │ ├── ChevronRight.tsx │ │ ├── Clear.tsx │ │ ├── Close.tsx │ │ ├── Date.tsx │ │ ├── Download.tsx │ │ ├── Empty.tsx │ │ ├── Error.tsx │ │ ├── Eye.tsx │ │ ├── EyeOff.tsx │ │ ├── FastBackward.tsx │ │ ├── FastForward.tsx │ │ ├── File.tsx │ │ ├── Filter.tsx │ │ ├── Forward.tsx │ │ ├── Info.tsx │ │ ├── More.tsx │ │ ├── Photo.tsx │ │ ├── Remove.tsx │ │ ├── ResizeSmall.tsx │ │ ├── Retry.tsx │ │ ├── RotateClockwise.tsx │ │ ├── RotateCounterclockwise.tsx │ │ ├── Search.tsx │ │ ├── Success.tsx │ │ ├── Switcher.tsx │ │ ├── Time.tsx │ │ ├── To.tsx │ │ ├── Trash.tsx │ │ ├── Warning.tsx │ │ ├── ZoomIn.tsx │ │ ├── ZoomOut.tsx │ │ ├── index.ts │ │ └── replaceable.tsx │ ├── index.ts │ ├── loading │ │ ├── index.ts │ │ └── src │ │ │ ├── Loading.tsx │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── menu-mask │ │ ├── index.ts │ │ └── src │ │ │ ├── MenuMask.tsx │ │ │ ├── interface.ts │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── scrollbar │ │ ├── index.ts │ │ ├── src │ │ │ ├── Scrollbar.tsx │ │ │ └── styles │ │ │ │ ├── index.cssr.ts │ │ │ │ └── rtl.cssr.ts │ │ ├── styles │ │ │ ├── common.ts │ │ │ ├── dark.ts │ │ │ ├── index.ts │ │ │ ├── light.ts │ │ │ └── rtl.ts │ │ └── tests │ │ │ ├── Scrollbar.spec.ts │ │ │ └── server.spec.tsx │ ├── select-menu │ │ ├── index.ts │ │ ├── src │ │ │ ├── SelectGroupHeader.tsx │ │ │ ├── SelectMenu.tsx │ │ │ ├── SelectOption.tsx │ │ │ ├── interface.ts │ │ │ └── styles │ │ │ │ ├── index.cssr.ts │ │ │ │ └── rtl.cssr.ts │ │ └── styles │ │ │ ├── _common.ts │ │ │ ├── dark.ts │ │ │ ├── index.ts │ │ │ ├── light.ts │ │ │ └── rtl.ts │ ├── selection │ │ ├── index.ts │ │ ├── src │ │ │ ├── Selection.tsx │ │ │ ├── interface.ts │ │ │ └── styles │ │ │ │ ├── index.cssr.ts │ │ │ │ └── rtl.cssr.ts │ │ └── styles │ │ │ ├── _common.ts │ │ │ ├── dark.ts │ │ │ ├── index.ts │ │ │ ├── light.ts │ │ │ └── rtl.ts │ ├── slot-machine │ │ ├── index.ts │ │ └── src │ │ │ ├── SlotMachine.tsx │ │ │ ├── SlotMachineNumber.tsx │ │ │ └── styles │ │ │ └── index.cssr.ts │ ├── suffix │ │ ├── index.ts │ │ └── src │ │ │ └── Suffix.tsx │ └── wave │ │ ├── index.ts │ │ └── src │ │ ├── Wave.tsx │ │ └── styles │ │ └── index.cssr.ts ├── _mixins │ ├── common.ts │ ├── index.ts │ ├── use-config.ts │ ├── use-css-vars-class.ts │ ├── use-form-item.ts │ ├── use-hljs.ts │ ├── use-locale.ts │ ├── use-rtl.ts │ ├── use-style.ts │ └── use-theme.ts ├── _styles │ ├── common │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ ├── global │ │ └── index.cssr.ts │ └── transitions │ │ ├── fade-down.cssr.ts │ │ ├── fade-in-height-expand.cssr.ts │ │ ├── fade-in-scale-up.cssr.ts │ │ ├── fade-in-width-expand.cssr.ts │ │ ├── fade-in.cssr.ts │ │ ├── fade-up-width-expand.cssr.ts │ │ ├── icon-switch.cssr.ts │ │ ├── slide-in-from-bottom.ts │ │ ├── slide-in-from-left.ts │ │ ├── slide-in-from-right.ts │ │ └── slide-in-from-top.ts ├── _utils │ ├── color │ │ └── index.ts │ ├── composable │ │ ├── index.ts │ │ ├── use-adjusted-to.ts │ │ ├── use-browser-location.ts │ │ ├── use-collection.ts │ │ ├── use-deferred-true.ts │ │ ├── use-houdini.ts │ │ ├── use-is-composing.ts │ │ ├── use-lock-html-scroll.ts │ │ ├── use-reactivated.ts │ │ └── use-resize.ts │ ├── css │ │ ├── color-to-class.ts │ │ ├── format-length.ts │ │ ├── index.ts │ │ └── rtl-inset.ts │ ├── cssr │ │ └── index.ts │ ├── dom │ │ ├── download.ts │ │ ├── index.ts │ │ └── is-document.ts │ ├── env │ │ ├── browser.ts │ │ ├── is-browser.ts │ │ ├── is-jsdom.ts │ │ └── is-native-lazy-load.ts │ ├── event │ │ └── index.ts │ ├── index.ts │ ├── naive │ │ ├── attribute.ts │ │ ├── extract-public-props.ts │ │ ├── index.ts │ │ ├── mutable.ts │ │ ├── prop.ts │ │ └── warn.ts │ ├── tests │ │ └── index.spec.ts │ └── vue │ │ ├── call.ts │ │ ├── create-data-key.ts │ │ ├── create-injection-key.ts │ │ ├── create-ref-setter.ts │ │ ├── flatten.ts │ │ ├── get-first-slot-vnode.ts │ │ ├── get-slot.ts │ │ ├── get-v-node-children.ts │ │ ├── index.ts │ │ ├── is-node-v-show-false.ts │ │ ├── keep.ts │ │ ├── keysOf.ts │ │ ├── merge-handlers.ts │ │ ├── omit.ts │ │ ├── render.ts │ │ ├── resolve-slot.ts │ │ └── wrapper.tsx ├── affix │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── position.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── position.demo.vue │ ├── index.ts │ ├── src │ │ ├── Affix.tsx │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ └── tests │ │ ├── Affix.spec.ts │ │ └── server.spec.tsx ├── alert │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── marquee.demo.vue │ │ │ └── no-icon.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── empty-debug.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── marquee.demo.vue │ │ │ ├── no-icon.demo.vue │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Alert.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Alert.spec.ts │ │ ├── __snapshots__ │ │ └── Alert.spec.ts.snap │ │ └── server.spec.tsx ├── anchor │ ├── demos │ │ ├── enUS │ │ │ ├── affix.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── ignore-gap.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── scrollto.demo.vue │ │ └── zhCN │ │ │ ├── affix.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── ignore-gap.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── max-height-debug.demo.vue │ │ │ └── scrollto.demo.vue │ ├── index.ts │ ├── src │ │ ├── AnchorAdapter.tsx │ │ ├── BaseAnchor.tsx │ │ ├── Link.tsx │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Anchor.spec.ts │ │ └── server.spec.tsx ├── auto-complete │ ├── demos │ │ ├── enUS │ │ │ ├── after-select.demo.vue │ │ │ ├── append.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-input.demo.vue │ │ │ ├── customized-rendering.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── show-options-by-value.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── status.demo.vue │ │ └── zhCN │ │ │ ├── after-select.demo.vue │ │ │ ├── append.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-input.demo.vue │ │ │ ├── customized-rendering.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── show-options-by-value.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── status.demo.vue │ ├── index.ts │ ├── src │ │ ├── AutoComplete.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── AutoComplete.spec.ts │ │ ├── __snapshots__ │ │ └── AutoComplete.spec.ts.snap │ │ └── server.spec.tsx ├── avatar-group │ ├── index.ts │ ├── src │ │ ├── AvatarGroup.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── avatar-group-rtl.cssr.ts │ │ │ └── avatar-group.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Avatar.spec.tsx │ │ └── server.spec.tsx ├── avatar │ ├── demos │ │ ├── enUS │ │ │ ├── badge.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── fallback.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── lazy.demo.vue │ │ │ ├── name-size.demo.vue │ │ │ ├── shape.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── v-show-debug.demo.vue │ │ └── zhCN │ │ │ ├── badge.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── error-placeholder-debug.demo.vue │ │ │ ├── fallback.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── lazy.demo.vue │ │ │ ├── name-size.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── shape.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── v-show-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Avatar.tsx │ │ ├── context.ts │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Avatar.spec.tsx │ │ ├── __snapshots__ │ │ └── Avatar.spec.tsx.snap │ │ └── server.spec.tsx ├── back-top │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── change-position.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── target-container-selector.demo.vue │ │ │ └── visibility-height.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── change-position.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── target-container-selector.demo.vue │ │ │ └── visibility-height.demo.vue │ ├── index.ts │ ├── src │ │ ├── BackTop.tsx │ │ ├── BackTopIcon.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── BackTop.spec.ts │ │ └── server.spec.tsx ├── badge │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── custom-content.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual.demo.vue │ │ │ ├── offset.demo.vue │ │ │ ├── overflow.demo.vue │ │ │ ├── processing.demo.vue │ │ │ ├── raw.demo.vue │ │ │ ├── show-zero.demo.vue │ │ │ └── type.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── custom-content.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual.demo.vue │ │ │ ├── offset.demo.vue │ │ │ ├── overflow.demo.vue │ │ │ ├── processing.demo.vue │ │ │ ├── raw.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── show-zero.demo.vue │ │ │ └── type.demo.vue │ ├── index.ts │ ├── src │ │ ├── Badge.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Badge.spec.ts │ │ └── server.spec.tsx ├── breadcrumb │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── separator-per-item.demo.vue │ │ │ └── separator.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── separator-per-item.demo.vue │ │ │ └── separator.demo.vue │ ├── index.ts │ ├── src │ │ ├── Breadcrumb.tsx │ │ ├── BreadcrumbItem.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Breadcrumb.spec.ts │ │ └── server.spec.tsx ├── button-group │ ├── index.ts │ ├── src │ │ ├── ButtonGroup.tsx │ │ ├── context.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── ButtonGroup.spec.tsx │ │ └── server.spec.tsx ├── button │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── dashed.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── ghost.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── icon-button.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── popover.demo.vue │ │ │ ├── quaternary.demo.vue │ │ │ ├── secondary.demo.vue │ │ │ ├── shape.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── tag.demo.vue │ │ │ ├── tertiary.demo.vue │ │ │ └── text.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── dashed.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── ghost.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── icon-button.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── popover.demo.vue │ │ │ ├── quaternary.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── secondary.demo.vue │ │ │ ├── shape.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── tag.demo.vue │ │ │ ├── tertiary.demo.vue │ │ │ └── text.demo.vue │ ├── index.ts │ ├── src │ │ ├── Button.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Button.spec.tsx │ │ ├── __snapshots__ │ │ └── Button.spec.tsx.snap │ │ └── server.spec.tsx ├── calendar │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ ├── Calendar.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Calendar.spec.tsx │ │ └── server.spec.tsx ├── card │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── cover.demo.vue │ │ │ ├── custom-style.demo.vue │ │ │ ├── embedded.demo.vue │ │ │ ├── hoverable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── no-title.demo.vue │ │ │ ├── segment.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slots.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── cover.demo.vue │ │ │ ├── custom-style.demo.vue │ │ │ ├── embedded-debug.demo.vue │ │ │ ├── embedded.demo.vue │ │ │ ├── hoverable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── no-title.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── segment.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slots.demo.vue │ ├── index.ts │ ├── src │ │ ├── Card.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Card.spec.ts │ │ ├── __snapshots__ │ │ └── Card.spec.ts.snap │ │ └── server.spec.tsx ├── carousel │ ├── demos │ │ ├── enUS │ │ │ ├── arrow.demo.vue │ │ │ ├── autoplay.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── centered.demo.vue │ │ │ ├── custom-arrow-and-dots.demo.vue │ │ │ ├── custom-card.demo.vue │ │ │ ├── custom-dots.demo.vue │ │ │ ├── dots.demo.vue │ │ │ ├── effect.demo.vue │ │ │ ├── hover.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── keyboard.demo.vue │ │ │ ├── mousewheel.demo.vue │ │ │ ├── simulate-drag.demo.vue │ │ │ ├── slides-per-view-auto.demo.vue │ │ │ ├── slides-per-view.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ ├── transition-name.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── arrow.demo.vue │ │ │ ├── autoplay.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── centered.demo.vue │ │ │ ├── custom-arrow-and-dots.demo.vue │ │ │ ├── custom-card.demo.vue │ │ │ ├── dots.demo.vue │ │ │ ├── effect.demo.vue │ │ │ ├── hover.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── keyboard.demo.vue │ │ │ ├── mousewheel.demo.vue │ │ │ ├── simulate-drag.demo.vue │ │ │ ├── slides-per-view-auto.demo.vue │ │ │ ├── slides-per-view.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ ├── transition-name.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Carousel.tsx │ │ ├── CarouselArrow.tsx │ │ ├── CarouselContext.ts │ │ ├── CarouselDots.tsx │ │ ├── CarouselItem.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils │ │ │ ├── duplicatedLogic.ts │ │ │ ├── event.ts │ │ │ └── index.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Carousel.spec.tsx │ │ └── server.spec.tsx ├── cascader │ ├── demos │ │ ├── enUS │ │ │ ├── action.demo.vue │ │ │ ├── check-strategy.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── custom-render.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple-lazy.demo.vue │ │ │ ├── multiple.demo.vue │ │ │ ├── single-lazy.demo.vue │ │ │ ├── single.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── virtual.demo.vue │ │ └── zhCN │ │ │ ├── action.demo.vue │ │ │ ├── check-strategy.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── custom-render.demo.vue │ │ │ ├── default-value-debug.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple-lazy.demo.vue │ │ │ ├── multiple.demo.vue │ │ │ ├── single-lazy.demo.vue │ │ │ ├── single.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── virtual.demo.vue │ ├── index.ts │ ├── src │ │ ├── Cascader.tsx │ │ ├── CascaderMenu.tsx │ │ ├── CascaderOption.tsx │ │ ├── CascaderSelectMenu.tsx │ │ ├── CascaderSubmenu.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Cascader.spec.ts │ │ ├── __snapshots__ │ │ └── Cascader.spec.ts.snap │ │ └── server.spec.tsx ├── checkbox │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── customize-value.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── grid.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── indeterminate.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── customize-value.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── grid.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── indeterminate.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── rtl-debug.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── CheckMark.tsx │ │ ├── Checkbox.tsx │ │ ├── CheckboxGroup.tsx │ │ ├── LineMark.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Checkbox.spec.tsx │ │ ├── __snapshots__ │ │ └── Checkbox.spec.tsx.snap │ │ └── server.spec.tsx ├── code │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inline.demo.vue │ │ │ ├── line-numbers.demo.vue │ │ │ └── softwrap.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inline.demo.vue │ │ │ ├── line-numbers.demo.vue │ │ │ ├── loop-debug.demo.vue │ │ │ └── softwrap.demo.vue │ ├── index.ts │ ├── src │ │ ├── Code.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Code.spec.tsx │ │ └── server.spec.tsx ├── collapse-transition │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── CollapseTransition.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── CollapseTransition.spec.tsx │ │ └── server.spec.tsx ├── collapse │ ├── demos │ │ ├── enUS │ │ │ ├── accordion.demo.vue │ │ │ ├── arrow-placement.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── default-expanded.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── display-directive.demo.vue │ │ │ ├── header-extra.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-header-click.demo.vue │ │ │ ├── nested.demo.vue │ │ │ └── trigger-areas.demo.vue │ │ └── zhCN │ │ │ ├── accordion.demo.vue │ │ │ ├── arrow-placement.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── default-expanded.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── display-directive.demo.vue │ │ │ ├── header-extra.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-header-click.demo.vue │ │ │ ├── nested.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ └── trigger-areas.demo.vue │ ├── index.ts │ ├── src │ │ ├── Collapse.tsx │ │ ├── CollapseItem.tsx │ │ ├── CollapseItemContent.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Collapse.spec.tsx │ │ └── server.spec.tsx ├── color-picker │ ├── demos │ │ ├── enUS │ │ │ ├── actions.demo.vue │ │ │ ├── alpha.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── modes.demo.vue │ │ │ ├── native.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── swatches.demo.vue │ │ └── zhCN │ │ │ ├── actions.demo.vue │ │ │ ├── alpha.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── close-debug.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── modes.demo.vue │ │ │ ├── native.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── swatches.demo.vue │ ├── index.ts │ ├── src │ │ ├── AlphaSlider.tsx │ │ ├── ColorInput.tsx │ │ ├── ColorInputUnit.tsx │ │ ├── ColorPicker.tsx │ │ ├── ColorPickerSwatches.tsx │ │ ├── ColorPickerTrigger.tsx │ │ ├── ColorPreview.tsx │ │ ├── HueSlider.tsx │ │ ├── Pallete.tsx │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── ColorPicker.spec.tsx │ │ └── server.spec.tsx ├── components.ts ├── composables │ ├── index.ts │ └── use-theme-vars.ts ├── config-consumer │ └── demos │ │ ├── enUS │ │ └── index.demo-entry.md │ │ └── zhCN │ │ └── index.demo-entry.md ├── config-provider │ ├── demos │ │ ├── enUS │ │ │ ├── index.demo-entry.md │ │ │ ├── inherit-theme.demo.vue │ │ │ ├── inline-theme-disabled.demo.vue │ │ │ ├── language.demo.vue │ │ │ ├── namespace.demo.vue │ │ │ ├── os-theme.demo.vue │ │ │ ├── theme.demo.vue │ │ │ └── transparent.demo.vue │ │ └── zhCN │ │ │ ├── index.demo-entry.md │ │ │ ├── inherit-theme.demo.vue │ │ │ ├── inline-theme-disabled.demo.vue │ │ │ ├── language.demo.vue │ │ │ ├── namespace.demo.vue │ │ │ ├── os-theme.demo.vue │ │ │ ├── overrides-inherit-debug.demo.vue │ │ │ ├── theme.demo.vue │ │ │ └── transparent.demo.vue │ ├── index.ts │ ├── src │ │ ├── ConfigProvider.ts │ │ ├── config.ts │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── internal-interface.ts │ │ └── katex.ts │ └── tests │ │ ├── ConfigProvider.spec.ts │ │ └── server.spec.tsx ├── countdown │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── precision.demo.vue │ │ │ ├── render.demo.vue │ │ │ └── reset.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── finish-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── precision.demo.vue │ │ │ ├── render.demo.vue │ │ │ └── reset.demo.vue │ ├── index.ts │ ├── src │ │ └── Countdown.tsx │ └── tests │ │ ├── Countdown.spec.ts │ │ └── server.spec.tsx ├── create.ts ├── data-table │ ├── demos │ │ ├── enUS │ │ │ ├── ajax-usage.demo.md │ │ │ ├── async-expand.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── column-draggable.demo.vue │ │ │ ├── context-menu.demo.vue │ │ │ ├── controlled-filter.demo.vue │ │ │ ├── controlled-multiple-sorter.demo.md │ │ │ ├── controlled-page.demo.vue │ │ │ ├── controlled-sorter.demo.vue │ │ │ ├── custom-filter-menu.demo.vue │ │ │ ├── custom-select.demo.vue │ │ │ ├── custom-style.demo.vue │ │ │ ├── ellipsis-tooltip.demo.vue │ │ │ ├── ellipsis.demo.vue │ │ │ ├── empty.demo.vue │ │ │ ├── expand.demo.vue │ │ │ ├── export-csv.demo.vue │ │ │ ├── filter-and-sorter.demo.md │ │ │ ├── fixed-header-column.demo.vue │ │ │ ├── fixed-header.demo.vue │ │ │ ├── flex-height.demo.vue │ │ │ ├── group-header.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── merge-cell.demo.md │ │ │ ├── multiple-sorter.demo.md │ │ │ ├── pagination-behavior-on-filter.demo.vue │ │ │ ├── render-cell.demo.vue │ │ │ ├── render-header.demo.md │ │ │ ├── row-props.demo.vue │ │ │ ├── select-single.demo.vue │ │ │ ├── select.demo.vue │ │ │ ├── simple-editable.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── striped.demo.vue │ │ │ ├── summary.demo.vue │ │ │ ├── switchable-editable.demo.md │ │ │ ├── tree.demo.vue │ │ │ ├── virtual-x.demo.vue │ │ │ └── virtual.demo.vue │ │ └── zhCN │ │ │ ├── ajax-usage.demo.md │ │ │ ├── async-expand.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── column-draggable.demo.vue │ │ │ ├── context-menu.demo.vue │ │ │ ├── controlled-filter.demo.vue │ │ │ ├── controlled-multiple-sorter.demo.md │ │ │ ├── controlled-page.demo.vue │ │ │ ├── controlled-sorter.demo.vue │ │ │ ├── custom-expand-icon-debug.demo.vue │ │ │ ├── custom-filter-menu.demo.vue │ │ │ ├── custom-select.demo.vue │ │ │ ├── custom-style.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── ellipsis-debug.demo.vue │ │ │ ├── ellipsis-tooltip.demo.vue │ │ │ ├── ellipsis.demo.vue │ │ │ ├── empty.demo.vue │ │ │ ├── expand.demo.vue │ │ │ ├── expandable-debug.demo.vue │ │ │ ├── export-csv.demo.vue │ │ │ ├── filter-and-sorter.demo.md │ │ │ ├── filter-and-sortor.demo.md │ │ │ ├── fixed-column-debug.demo.md │ │ │ ├── fixed-column2-debug.demo.md │ │ │ ├── fixed-header-column.demo.vue │ │ │ ├── fixed-header.demo.vue │ │ │ ├── flex-height.demo.vue │ │ │ ├── group-header.demo.vue │ │ │ ├── height-debug.demo.md │ │ │ ├── index.demo-entry.md │ │ │ ├── keep-alive-debug.demo.vue │ │ │ ├── merge-cell.demo.md │ │ │ ├── multiple-sorter.demo.md │ │ │ ├── pagination-behavior-on-filter.demo.vue │ │ │ ├── render-cell.demo.vue │ │ │ ├── render-header.demo.md │ │ │ ├── row-props.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── scroll-debug.demo.md │ │ │ ├── select-single.demo.vue │ │ │ ├── select.demo.vue │ │ │ ├── simple-editable.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── striped.demo.vue │ │ │ ├── summary-debug.demo.vue │ │ │ ├── summary.demo.vue │ │ │ ├── switchable-editable.demo.md │ │ │ ├── tree.demo.vue │ │ │ ├── virtual-x.demo.vue │ │ │ └── virtual.demo.vue │ ├── index.ts │ ├── src │ │ ├── DataTable.tsx │ │ ├── HeaderButton │ │ │ ├── FilterButton.tsx │ │ │ ├── FilterMenu.tsx │ │ │ ├── RenderFilter.ts │ │ │ ├── RenderSorter.ts │ │ │ ├── ResizeButton.tsx │ │ │ └── SortButton.tsx │ │ ├── MainTable.tsx │ │ ├── TableParts │ │ │ ├── Body.tsx │ │ │ ├── BodyCheckbox.tsx │ │ │ ├── BodyRadio.tsx │ │ │ ├── Cell.tsx │ │ │ ├── ExpandTrigger.tsx │ │ │ ├── Header.tsx │ │ │ └── SelectionMenu.tsx │ │ ├── interface.ts │ │ ├── publicTypes.ts │ │ ├── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ │ ├── use-check.ts │ │ ├── use-expand.ts │ │ ├── use-group-header.ts │ │ ├── use-resizable.ts │ │ ├── use-scroll.ts │ │ ├── use-sorter.ts │ │ ├── use-table-data.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── DataTable.spec.tsx │ │ ├── __snapshots__ │ │ └── DataTable.spec.tsx.snap │ │ └── server.spec.tsx ├── date-picker │ ├── demos │ │ ├── enUS │ │ │ ├── actions.demo.vue │ │ │ ├── date.demo.vue │ │ │ ├── daterange.demo.vue │ │ │ ├── datetime.demo.vue │ │ │ ├── datetimeformat.demo.vue │ │ │ ├── datetimerange.demo.vue │ │ │ ├── default-time.demo.vue │ │ │ ├── disabled-time.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── footerslot.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── month.demo.vue │ │ │ ├── monthrange.demo.vue │ │ │ ├── panel.demo.vue │ │ │ ├── quarter.demo.vue │ │ │ ├── quarterrange.demo.vue │ │ │ ├── shortcuts.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── update-on-close.demo.vue │ │ │ ├── week.demo.vue │ │ │ ├── year.demo.vue │ │ │ └── yearrange.demo.vue │ │ └── zhCN │ │ │ ├── actions.demo.vue │ │ │ ├── date.demo.vue │ │ │ ├── daterange.demo.vue │ │ │ ├── datetime.demo.vue │ │ │ ├── datetimeformat.demo.vue │ │ │ ├── datetimerange.demo.vue │ │ │ ├── default-time.demo.vue │ │ │ ├── disabled-time.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── footerslot.demo.vue │ │ │ ├── form-debug.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── month.demo.vue │ │ │ ├── monthrange.demo.vue │ │ │ ├── panel-debug.demo.vue │ │ │ ├── panel.demo.vue │ │ │ ├── quarter.demo.vue │ │ │ ├── quarterrange.demo.vue │ │ │ ├── shortcuts.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── update-on-close.demo.vue │ │ │ ├── week.demo.vue │ │ │ ├── year.demo.vue │ │ │ └── yearrange.demo.vue │ ├── index.ts │ ├── src │ │ ├── DatePicker.tsx │ │ ├── config.ts │ │ ├── interface.ts │ │ ├── panel │ │ │ ├── date.tsx │ │ │ ├── daterange.tsx │ │ │ ├── datetime.tsx │ │ │ ├── datetimerange.tsx │ │ │ ├── month.tsx │ │ │ ├── monthrange.tsx │ │ │ ├── panelHeader.tsx │ │ │ ├── use-calendar.ts │ │ │ ├── use-dual-calendar.ts │ │ │ └── use-panel-common.ts │ │ ├── props.ts │ │ ├── public-types.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ ├── utils.ts │ │ └── validation-utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── DatePicker.spec.tsx │ │ ├── __snapshots__ │ │ └── DatePicker.spec.tsx.snap │ │ └── server.spec.tsx ├── descriptions │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── columns.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── placement.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── span.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── columns.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── placement.demo.vue │ │ │ ├── single-line-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── span.demo.vue │ ├── index.ts │ ├── src │ │ ├── Descriptions.tsx │ │ ├── DescriptionsItem.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Descriptions.spec.ts │ │ └── server.spec.tsx ├── dialog │ ├── demos │ │ ├── enUS │ │ │ ├── action.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask.demo.vue │ │ │ ├── use-component.demo.vue │ │ │ └── use-dialog-reactive-list.demo.vue │ │ └── zhCN │ │ │ ├── action.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── focus-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── use-component.demo.vue │ │ │ └── use-dialog-reactive-list.demo.vue │ ├── index.ts │ ├── src │ │ ├── Dialog.tsx │ │ ├── DialogEnvironment.tsx │ │ ├── DialogProvider.ts │ │ ├── composables.ts │ │ ├── context.ts │ │ ├── dialogProps.ts │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Dialog.spec.tsx │ │ └── server.spec.tsx ├── discrete │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ └── src │ │ ├── InjectionExtractor.tsx │ │ ├── discrete.ts │ │ ├── discreteApp.ts │ │ └── interface.ts ├── divider │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Divider.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Divider.spec.ts │ │ └── server.spec.tsx ├── drawer │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── resizable.demo.vue │ │ │ ├── scroll.demo.vue │ │ │ ├── slot.demo.vue │ │ │ └── target.demo.vue │ │ └── zhCN │ │ │ ├── a11y-debug.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── custom-style-debug.demo.vue │ │ │ ├── dark-1-debug.demo.vue │ │ │ ├── dark-2-debug.demo.vue │ │ │ ├── dark-3-debug.demo.vue │ │ │ ├── dark-4-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── resizable.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── scroll.demo.vue │ │ │ ├── slot.demo.vue │ │ │ └── target.demo.vue │ ├── index.ts │ ├── src │ │ ├── Drawer.tsx │ │ ├── DrawerBodyWrapper.tsx │ │ ├── DrawerContent.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Drawer.spec.tsx │ │ └── server.spec.tsx ├── dropdown │ ├── demos │ │ ├── enUS │ │ │ ├── arrow.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── batch-render.demo.vue │ │ │ ├── cascade.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-position.demo.vue │ │ │ ├── option-props.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── render-option.demo.vue │ │ │ ├── render.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── trigger.demo.vue │ │ └── zhCN │ │ │ ├── arrow.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── batch-render.demo.vue │ │ │ ├── cascade.demo.vue │ │ │ ├── group-debug.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-position.demo.vue │ │ │ ├── option-props.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── render-option.demo.vue │ │ │ ├── render.demo.vue │ │ │ ├── scrollable-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── trigger.demo.vue │ ├── index.ts │ ├── src │ │ ├── Dropdown.tsx │ │ ├── DropdownDivider.tsx │ │ ├── DropdownGroup.tsx │ │ ├── DropdownGroupHeader.tsx │ │ ├── DropdownMenu.tsx │ │ ├── DropdownOption.tsx │ │ ├── DropdownRenderOption.tsx │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Dropdown.spec.tsx │ │ ├── __snapshots__ │ │ └── Dropdown.spec.tsx.snap │ │ └── server.spec.tsx ├── dynamic-input │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom-action.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── move.demo.vue │ │ │ └── pair.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── create-debug.demo.vue │ │ │ ├── custom-action.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── move.demo.vue │ │ │ ├── pair.demo.vue │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── DynamicInput.tsx │ │ ├── InputPreset.tsx │ │ ├── PairPreset.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── DynamicInput.spec.ts │ │ └── server.spec.tsx ├── dynamic-tags │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── max.demo.vue │ │ │ ├── on-create.demo.vue │ │ │ ├── option-format.demo.vue │ │ │ ├── render-tag.demo.vue │ │ │ └── slot.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── max.demo.vue │ │ │ ├── on-create.demo.vue │ │ │ ├── option-format.demo.vue │ │ │ ├── render-tag.demo.vue │ │ │ └── slot.demo.vue │ ├── index.ts │ ├── src │ │ ├── DynamicTags.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── DynamicTags.spec.ts │ │ ├── __snapshots__ │ │ └── DynamicTags.spec.ts.snap │ │ └── server.spec.tsx ├── element │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ └── Element.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Element.spec.ts │ │ └── server.spec.tsx ├── ellipsis │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom-tooltip.demo.vue │ │ │ ├── expand-trigger.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── line-clamp.demo.vue │ │ │ └── performant-ellipsis.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom-tooltip.demo.vue │ │ │ ├── dynamic-debug.demo.vue │ │ │ ├── expand-trigger.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── line-clamp.demo.vue │ │ │ ├── performant-ellipsis.demo.vue │ │ │ └── width-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Ellipsis.tsx │ │ ├── PerformantEllipsis.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Ellipsis.spec.tsx │ │ └── server.spec.tsx ├── empty │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── locale-debug.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── locale-debug.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Empty.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Empty.spec.ts │ │ ├── __snapshots__ │ │ └── Empty.spec.ts.snap │ │ └── server.spec.tsx ├── equation │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── katex-options.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── katex-options.demo.vue │ ├── index.ts │ ├── src │ │ └── Equation.tsx │ └── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts ├── flex │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── center.demo.vue │ │ │ ├── from-end.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── space-around.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── center.demo.vue │ │ │ ├── from-end.demo.vue │ │ │ ├── grid-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── space-around.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Flex.tsx │ │ ├── styles │ │ │ └── rtl.cssr.ts │ │ └── type.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Flex.spec.tsx │ │ ├── __snapshots__ │ │ └── Flex.spec.tsx.snap │ │ └── server.spec.tsx ├── float-button-group │ ├── index.ts │ ├── src │ │ ├── FloatButtonGroup.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── NFloatButtonGroup.spec.tsx │ │ ├── __snapshots__ │ │ └── NFloatButtonGroup.spec.tsx.snap │ │ └── server.spec.tsx ├── float-button │ ├── demos │ │ ├── enUS │ │ │ ├── badge.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── menu.demo.vue │ │ │ └── tooltip.demo.vue │ │ └── zhCN │ │ │ ├── badge.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── menu.demo.vue │ │ │ └── tooltip.demo.vue │ ├── index.ts │ ├── src │ │ ├── FloatButton.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── FloatButton.spec.tsx │ │ ├── __snapshots__ │ │ └── FloatButton.spec.tsx.snap │ │ └── server.spec.tsx ├── form │ ├── demos │ │ ├── enUS │ │ │ ├── abnormal-warning.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── custom-messages.demo.vue │ │ │ ├── custom-rule.demo.vue │ │ │ ├── custom-validation.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── dynamic.demo.vue │ │ │ ├── feedback-style.demo.vue │ │ │ ├── i18n.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inline.demo.vue │ │ │ ├── item-only.demo.vue │ │ │ ├── left.demo.vue │ │ │ ├── partially-apply-rules.demo.vue │ │ │ ├── show-label.demo.vue │ │ │ └── top.demo.vue │ │ └── zhCN │ │ │ ├── abnormal-warning.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── custom-messages.demo.vue │ │ │ ├── custom-rule.demo.vue │ │ │ ├── custom-validation.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── dynamic.demo.vue │ │ │ ├── feedback-style.demo.vue │ │ │ ├── i18n.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inline.demo.vue │ │ │ ├── item-only.demo.vue │ │ │ ├── left.demo.vue │ │ │ ├── partially-apply-rules.demo.vue │ │ │ ├── render-feedback.demo.vue │ │ │ ├── show-label.demo.vue │ │ │ └── top.demo.vue │ ├── index.ts │ ├── src │ │ ├── Form.tsx │ │ ├── FormItem.tsx │ │ ├── FormItemCol.ts │ │ ├── FormItemGridItem.ts │ │ ├── FormItemRow.ts │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── styles │ │ │ ├── form-item.cssr.ts │ │ │ └── form.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Form.spec.tsx │ │ └── server.spec.tsx ├── global-style │ ├── demos │ │ ├── enUS │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ └── GlobalStyle.ts │ └── tests │ │ └── server.spec.tsx ├── global.d.ts ├── gradient-text │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── GradientText.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── GradientText.spec.ts │ │ ├── __snapshots__ │ │ └── GradientText.spec.ts.snap │ │ └── server.spec.tsx ├── grid │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── gap.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── layout-shift-disabled.demo.vue │ │ │ ├── offset.demo.vue │ │ │ ├── responsive-item.demo.vue │ │ │ └── responsive.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── gap.demo.vue │ │ │ ├── grid-basic-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── layout-shift-disabled.demo.vue │ │ │ ├── offset.demo.vue │ │ │ ├── responsive-item.demo.vue │ │ │ ├── responsive.demo.vue │ │ │ └── vshow-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Grid.tsx │ │ ├── GridItem.tsx │ │ └── config.ts │ └── tests │ │ ├── Grid.spec.tsx │ │ └── server.spec.tsx ├── highlight │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── case-sensitive.demo.vue │ │ │ ├── component.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── style.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── case-sensitive.demo.vue │ │ │ ├── component.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── style.demo.vue │ ├── index.ts │ └── src │ │ ├── Highlight.tsx │ │ ├── public-types.ts │ │ └── utils.ts ├── icon-wrapper │ ├── index.ts │ ├── src │ │ ├── IconWrapper.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── IconWrapper.spec.ts │ │ └── server.spec.tsx ├── icon │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── depth.demo.vue │ │ │ ├── icon-wrapper.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── depth.demo.vue │ │ │ ├── icon-wrapper.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ ├── Icon.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Icon.spec.ts │ │ ├── __snapshots__ │ │ └── Icon.spec.ts.snap │ │ └── server.spec.tsx ├── image │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom-error.demo.vue │ │ │ ├── custom-toolbar.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── error.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── lazy.demo.vue │ │ │ ├── preview-disabled.demo.vue │ │ │ ├── previewed-img-props.demo.vue │ │ │ └── tooltip.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom-error.demo.vue │ │ │ ├── custom-toolbar.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── error.demo.vue │ │ │ ├── full-debug.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── lazy.demo.vue │ │ │ ├── preview-disabled.demo.vue │ │ │ ├── previewed-img-props.demo.vue │ │ │ └── tooltip.demo.vue │ ├── index.ts │ ├── src │ │ ├── Image.tsx │ │ ├── ImageGroup.tsx │ │ ├── ImagePreview.tsx │ │ ├── icons.tsx │ │ ├── interface.ts │ │ ├── public-types.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Image.spec.tsx │ │ └── server.spec.tsx ├── index.ts ├── infinite-scroll │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── chat.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── chat.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ └── src │ │ └── InfiniteScroll.tsx ├── input-number │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── button-placement.demo.vue │ │ │ ├── change-timing.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── disable-keyboard.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── min-max.demo.vue │ │ │ ├── parse.demo.vue │ │ │ ├── precision.demo.vue │ │ │ ├── show-button.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── step.demo.vue │ │ │ └── validator.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── button-placement.demo.vue │ │ │ ├── change-timing.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── disable-keyboard.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── min-max.demo.vue │ │ │ ├── parse.demo.vue │ │ │ ├── precision-debug.demo.vue │ │ │ ├── precision.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── show-button.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── step.demo.vue │ │ │ ├── theme-debug.demo.vue │ │ │ └── validator.demo.vue │ ├── index.ts │ ├── src │ │ ├── InputNumber.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ ├── input-number.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── InputNumber.spec.tsx │ │ └── server.spec.tsx ├── input-opt │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask.demo.vue │ │ │ ├── pattern.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── template.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask.demo.vue │ │ │ ├── pattern.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── template.demo.vue │ ├── index.ts │ ├── src │ │ ├── input-opt.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── input-opt-rtl.cssr.ts │ └── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts ├── input │ ├── demos │ │ ├── enUS │ │ │ ├── autosize.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── count.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── graphemes.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── input-group.demo.vue │ │ │ ├── input-props.demo.vue │ │ │ ├── loading.demo.vue │ │ │ ├── pair.demo.vue │ │ │ ├── passively-activated.demo.vue │ │ │ ├── password.demo.vue │ │ │ ├── pattern.demo.vue │ │ │ ├── round.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── trim.demo.vue │ │ └── zhCN │ │ │ ├── autosize.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── count.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── graphemes.demo.vue │ │ │ ├── icon-debug.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── input-group.demo.vue │ │ │ ├── input-props.demo.vue │ │ │ ├── loading.demo.vue │ │ │ ├── modal-debug.demo.vue │ │ │ ├── pair.demo.vue │ │ │ ├── passively-activated.demo.vue │ │ │ ├── password.demo.vue │ │ │ ├── pattern.demo.vue │ │ │ ├── prefix-debug.demo.vue │ │ │ ├── round.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── textarea-resize-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Input.tsx │ │ ├── InputGroup.tsx │ │ ├── InputGroupLabel.tsx │ │ ├── WordCount.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ ├── input-group-label.cssr.ts │ │ │ ├── input-group.cssr.ts │ │ │ ├── input.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Input.spec.tsx │ │ ├── __snapshots__ │ │ └── Input.spec.tsx.snap │ │ └── server.spec.tsx ├── jest-setup.ts ├── layout │ ├── demos │ │ ├── enUS │ │ │ ├── absolute.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── collapse-right.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── embedded.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inverted.demo.vue │ │ │ ├── scroll-to.demo.vue │ │ │ ├── scrollbar.demo.vue │ │ │ ├── set-padding.demo.vue │ │ │ └── show-sider-content.demo.vue │ │ └── zhCN │ │ │ ├── absolute.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── collapse-right.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── embedded.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inverted.demo.vue │ │ │ ├── keep-alive-debug.demo.vue │ │ │ ├── scroll-to.demo.vue │ │ │ ├── scrollbar.demo.vue │ │ │ ├── set-padding.demo.vue │ │ │ └── show-sider-content.demo.vue │ ├── index.ts │ ├── src │ │ ├── Layout.tsx │ │ ├── LayoutContent.tsx │ │ ├── LayoutFooter.tsx │ │ ├── LayoutHeader.tsx │ │ ├── LayoutSider.tsx │ │ ├── ToggleBar.tsx │ │ ├── ToggleButton.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── layout-footer.cssr.ts │ │ │ ├── layout-header.cssr.ts │ │ │ ├── layout-sider.cssr.ts │ │ │ └── layout.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Layout.spec.ts │ │ ├── __snapshots__ │ │ └── Layout.spec.ts.snap │ │ └── server.spec.tsx ├── legacy-grid │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── gutter.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── offset.demo.vue │ │ │ └── push-pull.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── gutter.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── offset.demo.vue │ │ │ ├── push-pull.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ └── wrap-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Col.tsx │ │ ├── Row.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Grid.spec.tsx │ │ └── server.spec.tsx ├── legacy-transfer │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── large-data.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── large-data.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Transfer.tsx │ │ ├── TransferFilter.tsx │ │ ├── TransferHeader.tsx │ │ ├── TransferList.tsx │ │ ├── TransferListItem.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── use-transfer-data.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Transfer.spec.ts │ │ ├── __snapshots__ │ │ └── Transfer.spec.ts.snap │ │ └── server.spec.tsx ├── list │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── hoverable.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── border.demo.vue │ │ │ ├── hoverable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── List.tsx │ │ ├── ListItem.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── List.spec.ts │ │ └── server.spec.tsx ├── loading-bar │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── container.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── container.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ ├── LoadingBar.tsx │ │ ├── LoadingBarProvider.tsx │ │ ├── context.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── use-loading-bar.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ └── LoadingBar.spec.tsx ├── locales │ ├── __snapshots__ │ │ └── index.spec.tsx.snap │ ├── common │ │ ├── arDZ.ts │ │ ├── azAZ.ts │ │ ├── csCZ.ts │ │ ├── deDE.ts │ │ ├── enGB.ts │ │ ├── enUS.ts │ │ ├── eo.ts │ │ ├── esAR.ts │ │ ├── etEE.ts │ │ ├── faIR.ts │ │ ├── frFR.ts │ │ ├── idID.ts │ │ ├── itIT.ts │ │ ├── jaJP.ts │ │ ├── kmKH.ts │ │ ├── koKR.ts │ │ ├── nbNO.ts │ │ ├── nlNL.ts │ │ ├── plPL.ts │ │ ├── ptBR.ts │ │ ├── ruRU.ts │ │ ├── skSK.ts │ │ ├── svSE.ts │ │ ├── thTH.ts │ │ ├── trTR.ts │ │ ├── ugCN.ts │ │ ├── ukUA.ts │ │ ├── uzUZ.ts │ │ ├── viVN.ts │ │ ├── zhCN.ts │ │ └── zhTW.ts │ ├── date │ │ ├── arDZ.ts │ │ ├── azAZ.ts │ │ ├── csCZ.ts │ │ ├── deDE.ts │ │ ├── enGB.ts │ │ ├── enUS.ts │ │ ├── eo.ts │ │ ├── esAR.ts │ │ ├── etEE.ts │ │ ├── faIR.ts │ │ ├── frFR.ts │ │ ├── idID.ts │ │ ├── itIT.ts │ │ ├── jaJP.ts │ │ ├── kmKH.ts │ │ ├── koKR.ts │ │ ├── nbNO.ts │ │ ├── nlNL.ts │ │ ├── plPL.ts │ │ ├── ptBR.ts │ │ ├── ruRU.ts │ │ ├── skSK.ts │ │ ├── svSE.ts │ │ ├── thTH.ts │ │ ├── trTR.ts │ │ ├── ugCN.ts │ │ ├── ukUA.ts │ │ ├── uzUZ.ts │ │ ├── viVN.ts │ │ ├── zhCN.ts │ │ └── zhTW.ts │ ├── index.spec.tsx │ ├── index.ts │ └── utils │ │ └── index.ts ├── log │ ├── demos │ │ ├── enUS │ │ │ ├── auto-bottom.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── highlight.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── scroll.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── auto-bottom.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── highlight.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── scroll.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Log.tsx │ │ ├── LogLine.tsx │ │ ├── LogLoader.tsx │ │ ├── context.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Log.spec.tsx │ │ └── server.spec.tsx ├── marquee │ ├── demos │ │ ├── enUS │ │ │ ├── auto-fill.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── image.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── auto-fill.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── image.demo.vue │ │ │ └── index.demo-entry.md │ ├── index.ts │ ├── src │ │ ├── Marquee.tsx │ │ ├── props.ts │ │ ├── public-types.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Marquee.spec.ts │ │ └── server.spec.tsx ├── mention │ ├── demos │ │ ├── enUS │ │ │ ├── async.demo.vue │ │ │ ├── autosize.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-prefix.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-trigger.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── textarea.demo.vue │ │ └── zhCN │ │ │ ├── async.demo.vue │ │ │ ├── autosize.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-prefix.demo.vue │ │ │ ├── form.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-trigger.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── status.demo.vue │ │ │ └── textarea.demo.vue │ ├── index.ts │ ├── src │ │ ├── Mention.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Mention.spec.ts │ │ └── server.spec.tsx ├── menu │ ├── demos │ │ ├── enUS │ │ │ ├── accordion.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── customize-field.demo.vue │ │ │ ├── default-expanded-keys.demo.vue │ │ │ ├── expand-selected-option.demo.vue │ │ │ ├── horizontal.demo.vue │ │ │ ├── indent.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inverted.demo.vue │ │ │ ├── long-label.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── router-link.demo.vue │ │ │ ├── select.demo.vue │ │ │ └── show.demo.vue │ │ └── zhCN │ │ │ ├── accordion.demo.vue │ │ │ ├── collapse.demo.vue │ │ │ ├── customize-field.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── default-expanded-keys.demo.vue │ │ │ ├── expand-selected-option.demo.vue │ │ │ ├── horizontal.demo.vue │ │ │ ├── indent.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── inverted.demo.vue │ │ │ ├── long-label.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── router-link.demo.vue │ │ │ ├── select.demo.vue │ │ │ ├── show-debug.demo.vue │ │ │ └── show.demo.vue │ ├── index.ts │ ├── src │ │ ├── Menu.tsx │ │ ├── MenuDivider.tsx │ │ ├── MenuOption.tsx │ │ ├── MenuOptionContent.tsx │ │ ├── MenuOptionGroup.tsx │ │ ├── Submenu.tsx │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ ├── use-menu-child-props.ts │ │ ├── use-menu-child.ts │ │ ├── useCheckDeprecated.ts │ │ └── utils.tsx │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Menu.spec.tsx │ │ └── server.spec.tsx ├── message │ ├── demos │ │ ├── enUS │ │ │ ├── about-theme.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── customize-message.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manually-close.demo.vue │ │ │ ├── modify-content.demo.vue │ │ │ ├── multiple-line.demo.vue │ │ │ ├── no-icon.demo.vue │ │ │ ├── placement.demo.vue │ │ │ └── timing.demo.vue │ │ └── zhCN │ │ │ ├── about-theme.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── customize-message.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manually-close.demo.vue │ │ │ ├── modify-content.demo.vue │ │ │ ├── multiple-line.demo.vue │ │ │ ├── no-icon.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ └── timing.demo.vue │ ├── index.ts │ ├── src │ │ ├── Message.tsx │ │ ├── MessageEnvironment.tsx │ │ ├── MessageProvider.tsx │ │ ├── context.ts │ │ ├── message-props.ts │ │ ├── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ │ ├── types.ts │ │ └── use-message.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Message.spec.tsx │ │ └── server.spec.tsx ├── modal │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── custom-position.demo.vue │ │ │ ├── draggable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask-closable.demo.vue │ │ │ ├── preset-card.demo.vue │ │ │ ├── preset-confirm-slot.demo.vue │ │ │ ├── preset-confirm.demo.vue │ │ │ ├── reactive.demo.vue │ │ │ └── transform-origin.demo.vue │ │ └── zhCN │ │ │ ├── a11y-debug.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── custom-position.demo.vue │ │ │ ├── dark-1-debug.demo.vue │ │ │ ├── dark-10-debug.demo.vue │ │ │ ├── dark-2-debug.demo.vue │ │ │ ├── dark-3-debug.demo.vue │ │ │ ├── dark-4-debug.demo.vue │ │ │ ├── dark-5-debug.demo.vue │ │ │ ├── dark-6-debug.demo.vue │ │ │ ├── dark-7-debug.demo.vue │ │ │ ├── dark-8-debug.demo.vue │ │ │ ├── dark-9-debug.demo.vue │ │ │ ├── draggable.demo.vue │ │ │ ├── drawer-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mask-click-debug.demo.vue │ │ │ ├── mask-closable.demo.vue │ │ │ ├── nested-debug.demo.vue │ │ │ ├── preset-card.demo.vue │ │ │ ├── preset-confirm-slot.demo.vue │ │ │ ├── preset-confirm.demo.vue │ │ │ ├── raw-debug.demo.vue │ │ │ ├── reactive.demo.vue │ │ │ └── transform-origin.demo.vue │ ├── index.ts │ ├── src │ │ ├── BodyWrapper.tsx │ │ ├── Modal.tsx │ │ ├── ModalEnvironment.tsx │ │ ├── ModalProvider.ts │ │ ├── composables.ts │ │ ├── context.ts │ │ ├── interface.ts │ │ ├── presetProps.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Modal.spec.tsx │ │ └── server.spec.tsx ├── notification │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── change-content.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── duration.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── max.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── scrollable.demo.vue │ │ │ └── type.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── change-content.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── duration.demo.vue │ │ │ ├── error-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── max.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── scrollable.demo.vue │ │ │ └── type.demo.vue │ ├── index.ts │ ├── src │ │ ├── Notification.tsx │ │ ├── NotificationContainer.tsx │ │ ├── NotificationEnvironment.tsx │ │ ├── NotificationProvider.tsx │ │ ├── context.ts │ │ ├── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── use-notification.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ └── Notification.spec.tsx ├── number-animation │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── finish.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── intl.demo.vue │ │ │ ├── precision.demo.vue │ │ │ └── separator.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── finish.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── intl.demo.vue │ │ │ ├── precision.demo.vue │ │ │ └── separator.demo.vue │ ├── index.ts │ ├── src │ │ ├── NumberAnimation.tsx │ │ └── utils.ts │ └── tests │ │ ├── NumericAnimation.spec.ts │ │ └── server.spec.tsx ├── page-header │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── PageHeader.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── PageHeader.spec.tsx │ │ └── server.spec.tsx ├── pagination │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-count.demo.vue │ │ │ ├── page-size-option.demo.vue │ │ │ ├── prefix.demo.vue │ │ │ ├── prev.demo.vue │ │ │ ├── quick-jumper.demo.vue │ │ │ ├── simple.demo.vue │ │ │ ├── size-picker.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slot.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── display-order.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-count.demo.vue │ │ │ ├── page-size-option.demo.vue │ │ │ ├── prefix.demo.vue │ │ │ ├── prev.demo.vue │ │ │ ├── quick-jumper.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── simple.demo.vue │ │ │ ├── size-picker.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slot.demo.vue │ ├── index.ts │ ├── src │ │ ├── Pagination.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Pagination.spec.tsx │ │ ├── server.spec.tsx │ │ └── utils.spec.ts ├── popconfirm │ ├── demos │ │ ├── enUS │ │ │ ├── actions.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-action.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── no-icon.demo.vue │ │ └── zhCN │ │ │ ├── actions.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── custom-action.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── no-icon.demo.vue │ ├── index.ts │ ├── src │ │ ├── Popconfirm.ts │ │ ├── PopconfirmPanel.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Popconfirm.spec.ts │ │ └── server.spec.tsx ├── popover │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── delay.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── flip.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-position.demo.vue │ │ │ ├── no-arrow.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── raw-content.demo.vue │ │ │ ├── slots.demo.vue │ │ │ ├── style.demo.vue │ │ │ ├── trigger-width.demo.vue │ │ │ └── trigger.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── center-arrow-debug.demo.vue │ │ │ ├── delay.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── flip.demo.vue │ │ │ ├── hoist-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── manual-position.demo.vue │ │ │ ├── nested-debug.demo.vue │ │ │ ├── nested2-debug.demo.vue │ │ │ ├── nested3-debug.demo.vue │ │ │ ├── no-arrow.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── raw-content.demo.vue │ │ │ ├── slots.demo.vue │ │ │ ├── style.demo.vue │ │ │ ├── trigger-width.demo.vue │ │ │ ├── trigger.demo.vue │ │ │ ├── width-debug.demo.vue │ │ │ └── zindex-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Popover.tsx │ │ ├── PopoverBody.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Popover.spec.tsx │ │ └── server.spec.tsx ├── popselect │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── cancelable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── scrollable.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slot.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── cancelable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── scrollable.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── slot.demo.vue │ ├── index.ts │ ├── src │ │ ├── Popselect.tsx │ │ ├── PopselectPanel.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Popselect.spec.ts │ │ └── server.spec.tsx ├── preset.ts ├── progress │ ├── demos │ │ ├── enUS │ │ │ ├── circle-offset.demo.vue │ │ │ ├── circle.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── custom-indicator.demo.vue │ │ │ ├── dashboard.demo.vue │ │ │ ├── gradient.demo.vue │ │ │ ├── height.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── line.demo.vue │ │ │ ├── multiple-circle.demo.vue │ │ │ ├── no-indicator.demo.vue │ │ │ └── processing.demo.vue │ │ └── zhCN │ │ │ ├── circle-offset.demo.vue │ │ │ ├── circle.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── custom-indicator.demo.vue │ │ │ ├── dashboard.demo.vue │ │ │ ├── gradient.demo.vue │ │ │ ├── height.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── line.demo.vue │ │ │ ├── multiple-circle.demo.vue │ │ │ ├── no-indicator.demo.vue │ │ │ └── processing.demo.vue │ ├── index.ts │ ├── src │ │ ├── Circle.tsx │ │ ├── Line.tsx │ │ ├── MultipleCircle.tsx │ │ ├── Progress.tsx │ │ ├── public-types.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Progress.spec.ts │ │ └── server.spec.tsx ├── qr-code │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── download.demo.vue │ │ │ ├── error-correction.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── size.demo.vue │ │ │ └── type.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── download.demo.vue │ │ │ ├── error-correction.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── size.demo.vue │ │ │ └── type.demo.vue │ ├── index.ts │ ├── src │ │ ├── QrCode.tsx │ │ ├── qrcodegen.ts │ │ └── styles │ │ │ └── index.cssr.ts │ └── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts ├── radio │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── button-group.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── button-group.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── radio-focus-debug.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── uncontrolled-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Radio.tsx │ │ ├── RadioButton.tsx │ │ ├── RadioGroup.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ ├── radio-group.cssr.ts │ │ │ ├── radio.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── use-radio.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Radio.spec.ts │ │ ├── __snapshots__ │ │ └── Radio.spec.ts.snap │ │ └── server.spec.tsx ├── rate │ ├── demos │ │ ├── enUS │ │ │ ├── allow-half.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── readonly.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── allow-half.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── readonly.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Rate.tsx │ │ ├── StarIcon.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Rate.spec.ts │ │ ├── __snapshots__ │ │ └── Rate.spec.ts.snap │ │ └── server.spec.tsx ├── result │ ├── demos │ │ ├── enUS │ │ │ ├── custom.demo.vue │ │ │ ├── error.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── info.demo.vue │ │ │ ├── s-403.demo.vue │ │ │ ├── s-404.demo.vue │ │ │ ├── s-418.demo.vue │ │ │ ├── s-500.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── success.demo.vue │ │ │ └── warning.demo.vue │ │ └── zhCN │ │ │ ├── custom.demo.vue │ │ │ ├── error.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── info.demo.vue │ │ │ ├── s-403.demo.vue │ │ │ ├── s-404.demo.vue │ │ │ ├── s-418.demo.vue │ │ │ ├── s-500.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── success.demo.vue │ │ │ └── warning.demo.vue │ ├── index.ts │ ├── src │ │ ├── 403.tsx │ │ ├── 404.tsx │ │ ├── 418.tsx │ │ ├── 500.tsx │ │ ├── Result.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Result.spec.ts │ │ ├── __snapshots__ │ │ └── Result.spec.ts.snap │ │ └── server.spec.tsx ├── scrollbar │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── no-sync.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── trigger.demo.vue │ │ │ └── x.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── no-sync.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── trigger.demo.vue │ │ │ └── x.demo.vue │ ├── index.ts │ ├── src │ │ └── Scrollbar.tsx │ └── tests │ │ ├── Scrollbar.spec.ts │ │ └── server.spec.tsx ├── select │ ├── demos │ │ ├── enUS │ │ │ ├── action.demo.vue │ │ │ ├── add-tooltip.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── custom-option.demo.vue │ │ │ ├── custom-suffix.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── fallback-option.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── many-options.demo.vue │ │ │ ├── max-tag-count.demo.vue │ │ │ ├── menu-width.demo.vue │ │ │ ├── multiple.demo.vue │ │ │ ├── remote-multiple.demo.vue │ │ │ ├── remote.demo.vue │ │ │ ├── render-person.demo.vue │ │ │ ├── render-tag.demo.vue │ │ │ ├── scroll-event.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── tag-input.demo.vue │ │ │ └── tag.demo.vue │ │ └── zhCN │ │ │ ├── action.demo.vue │ │ │ ├── add-tooltip.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── clearable.demo.vue │ │ │ ├── create-debug.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── custom-option.demo.vue │ │ │ ├── custom-suffix.demo.vue │ │ │ ├── empty-debug.demo.vue │ │ │ ├── events.demo.vue │ │ │ ├── fallback-option.demo.vue │ │ │ ├── filterable-debug.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── fullscreen-debug.demo.vue │ │ │ ├── group.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── many-options.demo.vue │ │ │ ├── max-tag-count.demo.vue │ │ │ ├── menu-debug.demo.vue │ │ │ ├── menu-width.demo.vue │ │ │ ├── multiple.demo.vue │ │ │ ├── options-change-debug.demo.vue │ │ │ ├── placeholder-debug.demo.vue │ │ │ ├── remote-multiple.demo.vue │ │ │ ├── remote.demo.vue │ │ │ ├── render-debug.demo.vue │ │ │ ├── render-person.demo.vue │ │ │ ├── render-tag.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── scroll-event.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── spin-debug.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── tag-input.demo.vue │ │ │ └── tag.demo.vue │ ├── index.ts │ ├── src │ │ ├── Select.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Select.spec.tsx │ │ ├── __snapshots__ │ │ └── Select.spec.tsx.snap │ │ └── server.spec.tsx ├── shims-vue.d.ts ├── skeleton │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── box.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── box.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Skeleton.tsx │ │ ├── bug.md │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Skeleton.spec.tsx │ │ ├── __snapshots__ │ │ └── Skeleton.spec.tsx.snap │ │ └── server.spec.tsx ├── slider │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── custom-marks.demo.vue │ │ │ ├── custom-thumb.demo.vue │ │ │ ├── disable-tooltip.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── mark.demo.vue │ │ │ ├── multiple-debug.demo.vue │ │ │ ├── range.demo.vue │ │ │ ├── restrict-selectable-values.demo.vue │ │ │ ├── reverse.demo.vue │ │ │ ├── show-tooltip.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── custom-marks.demo.vue │ │ │ ├── custom-thumb.demo.vue │ │ │ ├── disable-tooltip.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── keyboard-debug.demo.vue │ │ │ ├── mark.demo.vue │ │ │ ├── multiple-debug.demo.vue │ │ │ ├── range.demo.vue │ │ │ ├── restrict-selectable-values.demo.vue │ │ │ ├── reverse.demo.vue │ │ │ ├── show-tooltip.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Slider.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Slider.spec.ts │ │ └── server.spec.tsx ├── space │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── center.demo.vue │ │ │ ├── from-end.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── reverse.demo.vue │ │ │ ├── space-around.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── center.demo.vue │ │ │ ├── from-end.demo.vue │ │ │ ├── grid-debug.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── reverse.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── space-around.demo.vue │ │ │ ├── space-between.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Space.tsx │ │ ├── styles │ │ │ └── rtl.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Space.spec.tsx │ │ ├── __snapshots__ │ │ └── Space.spec.tsx.snap │ │ └── server.spec.tsx ├── spin │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── delay.demo.vue │ │ │ ├── description.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── wrap.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── blocking-debug.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── delay.demo.vue │ │ │ ├── description.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── wrap.demo.vue │ ├── index.ts │ ├── src │ │ ├── Spin.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Spin.spec.ts │ │ ├── __snapshots__ │ │ └── Spin.spec.ts.snap │ │ └── server.spec.tsx ├── split │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── nest.demo.vue │ │ │ ├── slot.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── nest.demo.vue │ │ │ ├── pixel-value.demo.vue │ │ │ ├── slot.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Split.tsx │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── types.ts │ └── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts ├── statistic │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Statistic.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Statistic.spec.ts │ │ └── server.spec.tsx ├── steps │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── click.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── size.demo.vue │ │ │ └── vertical.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── click.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── custom-icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── vertical-debug.demo.vue │ │ │ └── vertical.demo.vue │ ├── index.ts │ ├── src │ │ ├── Step.tsx │ │ ├── Steps.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Steps.spec.ts │ │ └── server.spec.tsx ├── styles.ts ├── switch │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── customize-value.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── shape.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── content.demo.vue │ │ │ ├── customize-value.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── loading.demo.vue │ │ │ ├── shape.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Switch.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Switch.spec.tsx │ │ ├── __snapshots__ │ │ └── Switch.spec.tsx.snap │ │ └── server.spec.tsx ├── table │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── single-column.demo.vue │ │ │ ├── single-line.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── striped.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── single-column.demo.vue │ │ │ ├── single-line.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── striped.demo.vue │ ├── index.ts │ ├── src │ │ ├── Table.tsx │ │ ├── Tbody.tsx │ │ ├── Td.tsx │ │ ├── Th.tsx │ │ ├── Thead.tsx │ │ ├── Tr.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Table.spec.ts │ │ ├── __snapshots__ │ │ └── Table.spec.ts.snap │ │ └── server.spec.tsx ├── tabs │ ├── demos │ │ ├── enUS │ │ │ ├── addable.demo.vue │ │ │ ├── bar-width.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── before-leave.demo.vue │ │ │ ├── card.demo.vue │ │ │ ├── display-directive.demo.vue │ │ │ ├── flex-label.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── no-pane.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── prefix.demo.vue │ │ │ ├── segment.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── trigger.demo.vue │ │ │ └── update-bar-manually.demo.vue │ │ └── zhCN │ │ │ ├── addable-debug.demo.vue │ │ │ ├── addable.demo.vue │ │ │ ├── animation-debug.demo.vue │ │ │ ├── animationx-debug.demo.vue │ │ │ ├── bar-width.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── before-leave.demo.vue │ │ │ ├── card.demo.vue │ │ │ ├── display-directive.demo.vue │ │ │ ├── flex-label.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── line-debug.demo.vue │ │ │ ├── modal-debug.demo.vue │ │ │ ├── no-pane.demo.vue │ │ │ ├── none-debug.demo.vue │ │ │ ├── placement.demo.vue │ │ │ ├── prefix.demo.vue │ │ │ ├── segment.demo.vue │ │ │ ├── shadow-debug.demo.vue │ │ │ ├── size.demo.vue │ │ │ ├── style-inherit-debug.demo.vue │ │ │ ├── trigger.demo.vue │ │ │ ├── unkeyed-debug.demo.vue │ │ │ └── update-bar-manually.demo.vue │ ├── index.ts │ ├── src │ │ ├── Tab.tsx │ │ ├── TabPane.tsx │ │ ├── Tabs.tsx │ │ ├── interface.ts │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Tabs.spec.tsx │ │ ├── __snapshots__ │ │ └── Tabs.spec.tsx.snap │ │ └── server.spec.tsx ├── tag │ ├── demos │ │ ├── enUS │ │ │ ├── avatar.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── checkable.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── shape.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── avatar.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── bordered.demo.vue │ │ │ ├── checkable.demo.vue │ │ │ ├── closable.demo.vue │ │ │ ├── color.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── icon.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── shape.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Tag.tsx │ │ ├── common-props.ts │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Tag.spec.ts │ │ ├── __snapshots__ │ │ └── Tag.spec.ts.snap │ │ └── server.spec.tsx ├── theme-editor │ ├── index.ts │ └── src │ │ ├── MaximizeIcon.tsx │ │ ├── MinimizeIcon.tsx │ │ └── ThemeEditor.tsx ├── themes │ ├── dark.ts │ ├── index.ts │ ├── interface.ts │ ├── light.ts │ └── utils.ts ├── thing │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── indent.demo.vue │ │ │ └── index.demo-entry.md │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── indent.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ └── rtl-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Thing.tsx │ │ └── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Thing.spec.ts │ │ └── server.spec.tsx ├── time-picker │ ├── demos │ │ ├── enUS │ │ │ ├── actions.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── confirm.demo.vue │ │ │ ├── disabled-time.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── formatted.demo.vue │ │ │ ├── hours12.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── step-time.demo.vue │ │ │ └── timezone.demo.vue │ │ └── zhCN │ │ │ ├── actions.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── confirm.demo.vue │ │ │ ├── disabled-time.demo.vue │ │ │ ├── focus.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── formatted.demo.vue │ │ │ ├── hours12.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── size.demo.vue │ │ │ ├── status.demo.vue │ │ │ ├── step-time.demo.vue │ │ │ ├── timezone-debug.demo.vue │ │ │ └── timezone.demo.vue │ ├── index.ts │ ├── src │ │ ├── Panel.tsx │ │ ├── PanelCol.tsx │ │ ├── TimePicker.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── TimePicker.spec.ts │ │ ├── __snapshots__ │ │ └── TimePicker.spec.ts.snap │ │ └── server.spec.tsx ├── time │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── relative.demo.vue │ │ │ ├── timezone.demo.vue │ │ │ ├── type.demo.vue │ │ │ └── unix.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── format.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── relative.demo.vue │ │ │ ├── timezone-debug.demo.vue │ │ │ ├── timezone.demo.vue │ │ │ ├── type.demo.vue │ │ │ └── unix.demo.vue │ ├── index.ts │ ├── src │ │ └── Time.ts │ └── tests │ │ ├── Time.spec.ts │ │ └── server.spec.tsx ├── timeline │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── horizontal.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-placement.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── customize-icon.demo.vue │ │ │ ├── horizontal.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── item-placement.demo.vue │ │ │ ├── nested-debug.demo.vue │ │ │ └── size.demo.vue │ ├── index.ts │ ├── src │ │ ├── Timeline.tsx │ │ ├── TimelineItem.tsx │ │ └── styles │ │ │ └── index.cssr.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Timeline.spec.ts │ │ └── server.spec.tsx ├── tooltip │ ├── demos │ │ ├── enUS │ │ │ ├── arrow.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── body-style.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── placement.demo.vue │ │ │ └── trigger.demo.vue │ │ └── zhCN │ │ │ ├── arrow.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── body-style.demo.vue │ │ │ ├── event.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── placement.demo.vue │ │ │ └── trigger.demo.vue │ ├── index.ts │ ├── src │ │ └── Tooltip.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Tooltip.spec.ts │ │ └── server.spec.tsx ├── transfer │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── large-data.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── render-source-list.demo.vue │ │ │ └── size.demo.vue │ │ └── zhCN │ │ │ ├── asynchronous-options-debug.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── large-data.demo.vue │ │ │ ├── render-label.demo.vue │ │ │ ├── render-source-list.demo.vue │ │ │ ├── size.demo.vue │ │ │ └── value-debug.demo.vue │ ├── index.ts │ ├── src │ │ ├── Transfer.tsx │ │ ├── TransferFilter.tsx │ │ ├── TransferHeader.tsx │ │ ├── TransferList.tsx │ │ ├── TransferListItem.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── use-transfer-data.ts │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Transfer.spec.ts │ │ ├── __snapshots__ │ │ └── Transfer.spec.ts.snap │ │ └── server.spec.tsx ├── tree-select │ ├── demos │ │ ├── enUS │ │ │ ├── action.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── check-strategy.demo.vue │ │ │ ├── checkbox.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── file-picker.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ └── status.demo.vue │ │ └── zhCN │ │ │ ├── action.demo.vue │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── check-strategy-debug.demo.vue │ │ │ ├── check-strategy.demo.vue │ │ │ ├── checkbox.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── field-search-debug.demo.vue │ │ │ ├── file-picker.demo.vue │ │ │ ├── filterable.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── render-debug.demo.vue │ │ │ └── status.demo.vue │ ├── index.ts │ ├── src │ │ ├── TreeSelect.tsx │ │ ├── interface.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── TreeSelect.spec.ts │ │ └── server.spec.tsx ├── tree │ ├── demos │ │ ├── enUS │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── batch-render.demo.vue │ │ │ ├── cascade.demo.vue │ │ │ ├── checkbox-placement.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── drag-drop.demo.vue │ │ │ ├── file-tree.demo.vue │ │ │ ├── filter.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── node-props.demo.vue │ │ │ ├── override-click-behavior.demo.vue │ │ │ ├── prefix-and-suffix.demo.vue │ │ │ ├── show-line.demo.vue │ │ │ ├── switcher-icon.demo.vue │ │ │ └── virtual.demo.vue │ │ └── zhCN │ │ │ ├── async.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── batch-render.demo.vue │ │ │ ├── cascade.demo.vue │ │ │ ├── change-debug.demo.vue │ │ │ ├── check-strategy-debug.demo.vue │ │ │ ├── checkbox-placement.demo.vue │ │ │ ├── custom-field.demo.vue │ │ │ ├── disabled.demo.vue │ │ │ ├── drag-drop.demo.vue │ │ │ ├── expand-debug.demo.vue │ │ │ ├── file-tree.demo.vue │ │ │ ├── filter.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── multiple.demo.vue │ │ │ ├── node-props.demo.vue │ │ │ ├── override-click-behavior.demo.vue │ │ │ ├── prefix-and-suffix.demo.vue │ │ │ ├── rtl-debug.demo.vue │ │ │ ├── scroll-debug.demo.vue │ │ │ ├── scrollbar-debug.demo.vue │ │ │ ├── show-line.demo.vue │ │ │ ├── switcher-icon.demo.vue │ │ │ └── virtual.demo.vue │ ├── index.ts │ ├── src │ │ ├── MotionWrapper.tsx │ │ ├── Tree.tsx │ │ ├── TreeNode.tsx │ │ ├── TreeNodeCheckbox.tsx │ │ ├── TreeNodeContent.tsx │ │ ├── TreeNodeSwitcher.tsx │ │ ├── dnd.tsx │ │ ├── interface.ts │ │ ├── keyboard.tsx │ │ ├── styles │ │ │ ├── index.cssr.ts │ │ │ └── rtl.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ ├── light.ts │ │ └── rtl.ts │ └── tests │ │ ├── Tree.spec.ts │ │ └── server.spec.tsx ├── tsconfig.cjs.json ├── tsconfig.demo.json ├── tsconfig.esm.json ├── typography │ ├── demos │ │ ├── enUS │ │ │ ├── header.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── router-link.demo.vue │ │ │ ├── tags.demo.vue │ │ │ └── text.demo.vue │ │ └── zhCN │ │ │ ├── header.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── router-link.demo.vue │ │ │ ├── tags.demo.vue │ │ │ └── text.demo.vue │ ├── index.ts │ ├── src │ │ ├── a.tsx │ │ ├── blockquote.tsx │ │ ├── create-header.ts │ │ ├── headers.ts │ │ ├── hr.tsx │ │ ├── li.tsx │ │ ├── ol.tsx │ │ ├── p.tsx │ │ ├── styles │ │ │ ├── a.cssr.ts │ │ │ ├── blockquote.cssr.ts │ │ │ ├── header.cssr.ts │ │ │ ├── hr.cssr.ts │ │ │ ├── list.cssr.ts │ │ │ ├── p.cssr.ts │ │ │ └── text.cssr.ts │ │ ├── text.tsx │ │ └── ul.tsx │ ├── styles │ │ ├── _common.ts │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Typography.spec.ts │ │ ├── __snapshots__ │ │ └── Typography.spec.ts.snap │ │ └── server.spec.tsx ├── upload │ ├── demos │ │ ├── enUS │ │ │ ├── abstract.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── before-upload.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── custom-download.demo.vue │ │ │ ├── custom-request.demo.vue │ │ │ ├── default-files.demo.vue │ │ │ ├── download.demo.vue │ │ │ ├── drag.demo.vue │ │ │ ├── image-card-style.demo.vue │ │ │ ├── image-style.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── on-finish.demo.vue │ │ │ └── submit-manually.demo.vue │ │ └── zhCN │ │ │ ├── abstract.demo.vue │ │ │ ├── basic.demo.vue │ │ │ ├── before-upload.demo.vue │ │ │ ├── controlled.demo.vue │ │ │ ├── custom-download.demo.vue │ │ │ ├── custom-request.demo.vue │ │ │ ├── debug.demo.vue │ │ │ ├── default-files.demo.vue │ │ │ ├── download.demo.vue │ │ │ ├── drag.demo.vue │ │ │ ├── image-card-style.demo.vue │ │ │ ├── image-style.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── on-finish.demo.vue │ │ │ └── submit-manually.demo.vue │ ├── index.ts │ ├── src │ │ ├── Upload.tsx │ │ ├── UploadDragger.tsx │ │ ├── UploadFile.tsx │ │ ├── UploadFileList.tsx │ │ ├── UploadProgress.tsx │ │ ├── UploadTrigger.tsx │ │ ├── icons.tsx │ │ ├── interface.ts │ │ ├── public-types.ts │ │ ├── styles │ │ │ └── index.cssr.ts │ │ └── utils.ts │ ├── styles │ │ ├── dark.ts │ │ ├── index.ts │ │ └── light.ts │ └── tests │ │ ├── Upload.spec.tsx │ │ └── server.spec.tsx ├── version.ts ├── virtual-list │ ├── demos │ │ ├── enUS │ │ │ ├── basic.demo.vue │ │ │ ├── dynamic-size.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── keep-alive.demo.vue │ │ │ └── scroll.demo.vue │ │ └── zhCN │ │ │ ├── basic.demo.vue │ │ │ ├── dynamic-size.demo.vue │ │ │ ├── index.demo-entry.md │ │ │ ├── keep-alive.demo.vue │ │ │ └── scroll.demo.vue │ ├── index.ts │ └── src │ │ └── VirtualList.tsx └── watermark │ ├── demos │ ├── enUS │ │ ├── basic.demo.vue │ │ ├── custom.demo.vue │ │ ├── fullscreen.demo.vue │ │ ├── image.demo.vue │ │ ├── index.demo-entry.md │ │ └── multiline.demo.vue │ └── zhCN │ │ ├── basic.demo.vue │ │ ├── custom.demo.vue │ │ ├── fullscreen.demo.vue │ │ ├── image.demo.vue │ │ ├── index.demo-entry.md │ │ └── multiline.demo.vue │ ├── index.ts │ ├── src │ ├── Watermark.tsx │ └── styles │ │ └── index.cssr.ts │ ├── styles │ ├── dark.ts │ ├── index.ts │ └── light.ts │ └── tests │ ├── Watermark.spec.ts │ └── server.spec.tsx ├── test.html ├── themes └── tusimple │ ├── .npmignore │ ├── README.md │ ├── package.json │ ├── src │ ├── TsConfigProvider.tsx │ ├── data-table.tsx │ ├── icons.tsx │ ├── index.ts │ ├── theme-overrides-dark.ts │ ├── theme-overrides-light.ts │ ├── unconfigurable-style-dark.ts │ ├── unconfigurable-style-light.ts │ ├── use-ts-dialog.ts │ ├── use-ts-message.ts │ └── vars.ts │ ├── tsconfig.cjs.json │ └── tsconfig.esm.json ├── tsconfig.cjs.json ├── tsconfig.esbuild.json ├── tsconfig.esm.json ├── tsconfig.json ├── tsconfig.test.json ├── umd-test ├── index.spec.js └── setupVue.js ├── vercel.json ├── vite.config.js ├── volar.d.ts └── vue3.md /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | npx lint-staged 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shell-emulator=true -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | *.cssr.js 2 | *.cssr.ts 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "printWidth": 80, 5 | "trailingComma": "none", 6 | "proseWrap": "never" 7 | } 8 | -------------------------------------------------------------------------------- /build/loaders/project-path.js: -------------------------------------------------------------------------------- 1 | const path = require('node:path') 2 | 3 | module.exports = path.resolve(__dirname, '..', '..') 4 | -------------------------------------------------------------------------------- /build/loaders/test/component.test.md: -------------------------------------------------------------------------------- 1 | # 按钮 2 | 3 | 按钮需要一些说明 4 | 5 | ## 演示 6 | 7 | ```demo 8 | demo1 9 | ``` 10 | 11 | ## API 12 | 13 | | 属性 | 说明 | 类型 | 默认值 | 版本 | 14 | | ---- | -------- | ------ | ----------- | ---- | 15 | | type | 按钮类型 | string | `'default'` | | 16 | -------------------------------------------------------------------------------- /build/vite-plugin-css-render.js: -------------------------------------------------------------------------------- 1 | const terseCssr = require('./utils/terse-cssr') 2 | 3 | module.exports = () => { 4 | return { 5 | name: 'css-render-vite', 6 | transform(src, id) { 7 | if (id.endsWith('.cssr.ts') || id.endsWith('.cssr.js')) { 8 | return terseCssr(src) 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /demo/Caveat.md: -------------------------------------------------------------------------------- 1 | # Caveat 2 | 3 | Code is messy here because I've no time to refactor it. 4 | 5 | It works matter. 6 | -------------------------------------------------------------------------------- /demo/assets/images/naivelogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tusen-ai/naive-ui/5ab9e8e0d763df1efede824599d86428dfff7253/demo/assets/images/naivelogo.png -------------------------------------------------------------------------------- /demo/pages/docs/changelog/enUS/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /demo/pages/docs/changelog/zhCN/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /demo/pages/docs/theme/zhCN/index.demo-entry.md: -------------------------------------------------------------------------------- 1 | # 创建适配主题的组件 2 | 3 | 你可能觉得只用内置的组件不够爽,想自己也写适配主题的组件。 4 | 5 | Naive UI 提供一些工具帮助开发者简单的创建支持主题的组件。 6 | 7 | ## 演示 8 | 9 | ```demo 10 | provide-theme 11 | element 12 | use-theme-vars 13 | ``` 14 | -------------------------------------------------------------------------------- /demo/pages/docs/vue3/enUS/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /demo/pages/docs/vue3/zhCN/index.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /demo/styles/Metropolis-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tusen-ai/naive-ui/5ab9e8e0d763df1efede824599d86428dfff7253/demo/styles/Metropolis-Bold.woff2 -------------------------------------------------------------------------------- /demo/styles/Metropolis.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Metropolis'; 3 | font-weight: 600; 4 | src: url('./Metropolis-Bold.woff2'); 5 | } -------------------------------------------------------------------------------- /demo/utils/github-url.js: -------------------------------------------------------------------------------- 1 | export const repoUrl = 'https://github.com/tusen-ai/naive-ui' 2 | export const blobUrl = `${repoUrl}/blob/main/` 3 | -------------------------------------------------------------------------------- /playground/collect-vars.js: -------------------------------------------------------------------------------- 1 | const varRegex = /var\(--([^)]+)\)/g 2 | 3 | function getVars (input) { 4 | console.log( 5 | Array.from( 6 | new Set(Array.from(input.matchAll(varRegex)).map((v) => '// --' + v[1])) 7 | ) 8 | .sort() 9 | .join('\n') 10 | ) 11 | } 12 | 13 | getVars(document.body.textContent) 14 | -------------------------------------------------------------------------------- /playground/ssr/build.sh: -------------------------------------------------------------------------------- 1 | webpack ./client.js --mode=development --output-filename=client.js 2 | webpack --config ./webpack.config.server.js -------------------------------------------------------------------------------- /playground/ssr/client.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import App from './app' 3 | 4 | createApp(App).mount('#app') 5 | -------------------------------------------------------------------------------- /playground/ssr/pre-build.sh: -------------------------------------------------------------------------------- 1 | # make sure cwd is the sh's dir 2 | 3 | cd ./../../ 4 | 5 | ./scripts/pre-build-site/pre-build-site.sh 6 | -------------------------------------------------------------------------------- /playground/ssr/readme.md: -------------------------------------------------------------------------------- 1 | You need to install `webpack` & `webpack-cli` globally. 2 | 3 | ``` 4 | ./pre-build.sh 5 | ./build.sh 6 | 7 | node dist/server.js 8 | 9 | # browse localhost:8086 10 | ``` 11 | -------------------------------------------------------------------------------- /playground/ssr/webpack.config.server.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | mode: 'development', 3 | externalsPresets: { node: true }, 4 | externals: [/^[@/a-z\-0-9]+$/], 5 | target: 'node', 6 | entry: './server.js', 7 | output: { 8 | filename: 'server.js', 9 | library: { 10 | type: 'commonjs2' 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /playground/testColor.js: -------------------------------------------------------------------------------- 1 | const tinyColor = require('tinycolor2') 2 | 3 | const red = tinyColor('#ce347c').getBrightness() 4 | const green = tinyColor('#00c060').getBrightness() 5 | const orange = tinyColor('#EF8745').getBrightness() 6 | const blue = tinyColor('#2090f0').getBrightness() 7 | console.log(red, green, orange, blue) 8 | -------------------------------------------------------------------------------- /scripts/gen-version.js: -------------------------------------------------------------------------------- 1 | const version = require('../package.json').version 2 | 3 | require('node:fs').writeFileSync( 4 | require('node:path').resolve(__dirname, '..', 'src', 'version.ts'), 5 | `export default '${version}'\n` 6 | ) 7 | -------------------------------------------------------------------------------- /scripts/md-to-vue.js: -------------------------------------------------------------------------------- 1 | const { convertFilesByComponentName } = require('./utils/loader') 2 | 3 | async function translateMdToVue() { 4 | const componentName = require('node:process').argv[2] 5 | await convertFilesByComponentName(componentName) 6 | } 7 | 8 | translateMdToVue() 9 | -------------------------------------------------------------------------------- /scripts/post-build-site/post-build-site.sh: -------------------------------------------------------------------------------- 1 | cp site/index.html site/404.html 2 | 3 | rm -rf node_modules/naive-ui 4 | -------------------------------------------------------------------------------- /scripts/pre-build/pre-cjs-build.js: -------------------------------------------------------------------------------- 1 | // replace lodash-es 2 | const { replaceDefine, srcDir } = require('../utils') 3 | 4 | ; 5 | 6 | (async () => { 7 | await replaceDefine([srcDir], { 8 | '\'lodash-es\'': '\'lodash\'' 9 | }) 10 | })() 11 | -------------------------------------------------------------------------------- /src/_internal/README.md: -------------------------------------------------------------------------------- 1 | Themeable components: 2 | 3 | - selection 4 | - select-menu 5 | - clear 6 | -------------------------------------------------------------------------------- /src/_internal/clear/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/Clear' 2 | -------------------------------------------------------------------------------- /src/_internal/close/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NBaseClose } from './src/Close' 2 | -------------------------------------------------------------------------------- /src/_internal/fade-in-expand-transition/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/FadeInExpandTransition' 2 | -------------------------------------------------------------------------------- /src/_internal/focus-detector/index.tsx: -------------------------------------------------------------------------------- 1 | import FocusDetector from './src/FocusDetector' 2 | 3 | export default FocusDetector 4 | -------------------------------------------------------------------------------- /src/_internal/icon-switch-transition/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/IconSwitchTransition' 2 | -------------------------------------------------------------------------------- /src/_internal/icon/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NBaseIcon } from './src/Icon' 2 | -------------------------------------------------------------------------------- /src/_internal/icons/Switcher.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Switcher', 5 | render() { 6 | return ( 7 | 8 | 9 | 10 | ) 11 | } 12 | }) 13 | -------------------------------------------------------------------------------- /src/_internal/loading/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/Loading' 2 | export type { BaseLoadingExposedProps } from './src/Loading' 3 | -------------------------------------------------------------------------------- /src/_internal/menu-mask/index.ts: -------------------------------------------------------------------------------- 1 | export type { MenuMaskRef } from './src/interface' 2 | export { default } from './src/MenuMask' 3 | -------------------------------------------------------------------------------- /src/_internal/menu-mask/src/interface.ts: -------------------------------------------------------------------------------- 1 | export interface MenuMaskRef { 2 | showOnce: (message: string, duration?: number) => void 3 | } 4 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | default as NScrollbar, 3 | XScrollbar as NxScrollbar 4 | } from './src/Scrollbar' 5 | export type { ScrollbarInst, ScrollbarProps } from './src/Scrollbar' 6 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/styles/common.ts: -------------------------------------------------------------------------------- 1 | export const commonVars = { 2 | railInsetHorizontalBottom: 'auto 2px 4px 2px', 3 | railInsetHorizontalTop: '4px 2px auto 2px', 4 | railInsetVerticalRight: '2px 4px 2px auto', 5 | railInsetVerticalLeft: '2px auto 2px 4px', 6 | railColor: 'transparent' 7 | } 8 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ScrollbarTheme } from './light' 2 | import { commonDark } from '../../../_styles/common' 3 | import { self } from './light' 4 | 5 | const scrollbarDark: ScrollbarTheme = { 6 | name: 'Scrollbar', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default scrollbarDark 12 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as scrollbarDark } from './dark' 2 | export { default as scrollbarLight } from './light' 3 | export type { ScrollbarTheme, ScrollbarThemeVars } from './light' 4 | export { default as scrollbarRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const scrollbarRtl: RtlItem = { 5 | name: 'Scrollbar', 6 | style: rtlStyle 7 | } 8 | 9 | export default scrollbarRtl 10 | -------------------------------------------------------------------------------- /src/_internal/scrollbar/tests/Scrollbar.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from '@vue/test-utils' 2 | import { NScrollbar } from '../index' 3 | 4 | describe('n-scrollbar', () => { 5 | it('should work with import on demand', () => { 6 | mount(NScrollbar) 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /src/_internal/select-menu/index.ts: -------------------------------------------------------------------------------- 1 | export type { InternalSelectMenuRef } from './src/interface' 2 | export { default } from './src/SelectMenu' 3 | -------------------------------------------------------------------------------- /src/_internal/select-menu/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as internalSelectMenuDark } from './dark' 2 | export { default as internalSelectMenuLight } from './light' 3 | export type { 4 | InternalSelectMenuTheme, 5 | InternalSelectMenuThemeVars 6 | } from './light' 7 | export { internalSelectMenuRtl } from './rtl' 8 | -------------------------------------------------------------------------------- /src/_internal/select-menu/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const internalSelectMenuRtl: RtlItem = { 5 | name: 'InternalSelectMenu', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/_internal/selection/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/Selection' 2 | export type { InternalSelectionInst } from './src/Selection' 3 | -------------------------------------------------------------------------------- /src/_internal/selection/src/interface.ts: -------------------------------------------------------------------------------- 1 | import type { VNodeChild } from 'vue' 2 | import type { SelectOption } from '../../../select/src/interface' 3 | 4 | export type RenderTag = (props: { 5 | option: SelectOption 6 | handleClose: () => void 7 | }) => VNodeChild 8 | -------------------------------------------------------------------------------- /src/_internal/selection/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | paddingSingle: '0 26px 0 12px', 3 | paddingMultiple: '3px 26px 0 12px', 4 | clearSize: '16px', 5 | arrowSize: '16px' 6 | } 7 | -------------------------------------------------------------------------------- /src/_internal/selection/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as internalSelectionDark } from './dark' 2 | export { default as internalSelectionLight } from './light' 3 | export type { 4 | InternalSelectionTheme, 5 | InternalSelectionThemeVars 6 | } from './light' 7 | export { internalSelectionRtl } from './rtl' 8 | -------------------------------------------------------------------------------- /src/_internal/selection/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const internalSelectionRtl: RtlItem = { 5 | name: 'InternalSelection', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/_internal/slot-machine/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/SlotMachine' 2 | -------------------------------------------------------------------------------- /src/_internal/suffix/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/Suffix' 2 | -------------------------------------------------------------------------------- /src/_internal/wave/index.ts: -------------------------------------------------------------------------------- 1 | export { default } from './src/Wave' 2 | export type { BaseWaveRef } from './src/Wave' 3 | -------------------------------------------------------------------------------- /src/_internal/wave/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB } from '../../../../_utils/cssr/index' 2 | 3 | export default cB('base-wave', ` 4 | position: absolute; 5 | left: 0; 6 | right: 0; 7 | top: 0; 8 | bottom: 0; 9 | border-radius: inherit; 10 | `) 11 | -------------------------------------------------------------------------------- /src/_mixins/common.ts: -------------------------------------------------------------------------------- 1 | export const cssrAnchorMetaName = 'naive-ui-style' 2 | -------------------------------------------------------------------------------- /src/_styles/common/index.ts: -------------------------------------------------------------------------------- 1 | export { default as commonDark } from './dark' 2 | export { default as commonLight } from './light' 3 | export type { ThemeCommonVars } from './light' 4 | -------------------------------------------------------------------------------- /src/_utils/color/index.ts: -------------------------------------------------------------------------------- 1 | import { composite } from 'seemly' 2 | 3 | export function createHoverColor(rgb: string): string { 4 | return composite(rgb, [255, 255, 255, 0.16]) 5 | } 6 | 7 | export function createPressedColor(rgb: string): string { 8 | return composite(rgb, [0, 0, 0, 0.12]) 9 | } 10 | -------------------------------------------------------------------------------- /src/_utils/css/color-to-class.ts: -------------------------------------------------------------------------------- 1 | export function color2Class(color: string): string { 2 | return color.replace(/#|\(|\)|,|\s|\./g, '_') 3 | } 4 | -------------------------------------------------------------------------------- /src/_utils/css/index.ts: -------------------------------------------------------------------------------- 1 | export { color2Class } from './color-to-class' 2 | export { formatLength } from './format-length' 3 | export { rtlInset } from './rtl-inset' 4 | -------------------------------------------------------------------------------- /src/_utils/css/rtl-inset.ts: -------------------------------------------------------------------------------- 1 | import { getPadding } from 'seemly' 2 | 3 | export function rtlInset(inset: string): string { 4 | const { left, right, top, bottom } = getPadding(inset) 5 | return `${top} ${left} ${bottom} ${right}` 6 | } 7 | -------------------------------------------------------------------------------- /src/_utils/dom/index.ts: -------------------------------------------------------------------------------- 1 | export { download } from './download' 2 | export { isDocument } from './is-document' 3 | -------------------------------------------------------------------------------- /src/_utils/dom/is-document.ts: -------------------------------------------------------------------------------- 1 | export function isDocument(node: Node): node is Document { 2 | return node.nodeName === '#document' 3 | } 4 | -------------------------------------------------------------------------------- /src/_utils/env/browser.ts: -------------------------------------------------------------------------------- 1 | import { isBrowser } from './is-browser' 2 | 3 | export const isChrome = isBrowser && 'chrome' in window 4 | export const isFirefox = isBrowser && navigator.userAgent.includes('Firefox') 5 | export const isSafari 6 | = isBrowser && navigator.userAgent.includes('Safari') && !isChrome 7 | -------------------------------------------------------------------------------- /src/_utils/env/is-browser.ts: -------------------------------------------------------------------------------- 1 | export const isBrowser 2 | = typeof document !== 'undefined' && typeof window !== 'undefined' 3 | -------------------------------------------------------------------------------- /src/_utils/env/is-jsdom.ts: -------------------------------------------------------------------------------- 1 | let _isJsdom: boolean | undefined 2 | 3 | export function isJsdom(): boolean { 4 | if (_isJsdom === undefined) { 5 | _isJsdom 6 | = navigator.userAgent.includes('Node.js') 7 | || navigator.userAgent.includes('jsdom') 8 | } 9 | return _isJsdom 10 | } 11 | -------------------------------------------------------------------------------- /src/_utils/env/is-native-lazy-load.ts: -------------------------------------------------------------------------------- 1 | import { isBrowser } from './is-browser' 2 | 3 | export const isImageSupportNativeLazy 4 | = isBrowser && 'loading' in document.createElement('img') 5 | -------------------------------------------------------------------------------- /src/_utils/event/index.ts: -------------------------------------------------------------------------------- 1 | const eventSet = new WeakSet() 2 | 3 | export function markEventEffectPerformed(event: Event): void { 4 | eventSet.add(event) 5 | } 6 | 7 | export function eventEffectNotPerformed(event: Event): boolean { 8 | return !eventSet.has(event) 9 | } 10 | -------------------------------------------------------------------------------- /src/_utils/naive/index.ts: -------------------------------------------------------------------------------- 1 | export { getTitleAttribute } from './attribute' 2 | export type { 3 | ExtractInternalPropTypes, 4 | ExtractPublicPropTypes 5 | } from './extract-public-props' 6 | export type { Mutable } from './mutable' 7 | export { largerSize, smallerSize } from './prop' 8 | export { throwError, warn, warnOnce } from './warn' 9 | -------------------------------------------------------------------------------- /src/_utils/naive/mutable.ts: -------------------------------------------------------------------------------- 1 | export type Mutable = T extends Record 2 | ? { 3 | -readonly [P in keyof T]: T[P] extends ReadonlyArray 4 | ? Array> 5 | : Mutable 6 | } 7 | : T 8 | -------------------------------------------------------------------------------- /src/_utils/vue/create-data-key.ts: -------------------------------------------------------------------------------- 1 | export function createDataKey(key: string | number): string { 2 | return typeof key === 'string' ? `s-${key}` : `n-${key}` 3 | } 4 | -------------------------------------------------------------------------------- /src/_utils/vue/create-injection-key.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | 3 | export function createInjectionKey(key: string): InjectionKey { 4 | return key as any 5 | } 6 | -------------------------------------------------------------------------------- /src/_utils/vue/create-ref-setter.ts: -------------------------------------------------------------------------------- 1 | import type { Ref } from 'vue' 2 | 3 | export function createRefSetter(ref: Ref): any { 4 | return (inst: { $el: HTMLElement | null } | null) => { 5 | if (inst) { 6 | ref.value = inst.$el 7 | } 8 | else { 9 | ref.value = null 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/_utils/vue/is-node-v-show-false.ts: -------------------------------------------------------------------------------- 1 | import { type VNode, vShow } from 'vue' 2 | 3 | export function isNodeVShowFalse(vNode: VNode): boolean { 4 | const showDir = vNode.dirs?.find(({ dir }) => dir === vShow) 5 | return !!(showDir && showDir.value === false) 6 | } 7 | -------------------------------------------------------------------------------- /src/_utils/vue/keep.ts: -------------------------------------------------------------------------------- 1 | export function keep( 2 | object: T, 3 | keys: K[] = [], 4 | rest?: R 5 | ): Pick & R { 6 | const keepedObject: any = {} 7 | keys.forEach((key) => { 8 | keepedObject[key] = (object as any)[key] 9 | }) 10 | return Object.assign(keepedObject, rest) 11 | } 12 | -------------------------------------------------------------------------------- /src/_utils/vue/keysOf.ts: -------------------------------------------------------------------------------- 1 | export function keysOf>( 2 | obj: T 3 | ): Array { 4 | return Object.keys(obj) as any 5 | } 6 | -------------------------------------------------------------------------------- /src/_utils/vue/wrapper.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent } from 'vue' 2 | 3 | export const Wrapper = defineComponent({ 4 | render() { 5 | return this.$slots.default?.() 6 | } 7 | }) 8 | -------------------------------------------------------------------------------- /src/affix/index.ts: -------------------------------------------------------------------------------- 1 | export { affixProps, default as NAffix } from './src/Affix' 2 | export type { AffixProps } from './src/Affix' 3 | -------------------------------------------------------------------------------- /src/affix/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('affix', [ 4 | cM('affixed', { 5 | position: 'fixed' 6 | }, [ 7 | cM('absolute-positioned', { 8 | position: 'absolute' 9 | }) 10 | ]) 11 | ]) 12 | -------------------------------------------------------------------------------- /src/alert/demos/enUS/no-icon.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No icon 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/alert/demos/zhCN/marquee.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 跑马灯 3 | 4 | 你可以配合 `n-marquee` 实现轮播的效果。 5 | 6 | 7 | 16 | -------------------------------------------------------------------------------- /src/alert/demos/zhCN/no-icon.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 没有图标 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/alert/index.ts: -------------------------------------------------------------------------------- 1 | export { alertProps, default as NAlert } from './src/Alert' 2 | export type { AlertProps, AlertSlots } from './src/Alert' 3 | -------------------------------------------------------------------------------- /src/alert/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | iconMargin: '11px 8px 0 12px', 3 | iconMarginRtl: '11px 12px 0 8px', 4 | iconSize: '24px', 5 | closeIconSize: '16px', 6 | closeSize: '20px', 7 | closeMargin: '13px 14px 0 0', 8 | closeMarginRtl: '13px 0 0 14px', 9 | padding: '13px' 10 | } 11 | -------------------------------------------------------------------------------- /src/alert/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as alertDark } from './dark' 2 | export { default as alertLight } from './light' 3 | export type { AlertTheme, AlertThemeVars } from './light' 4 | export { alertRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/alert/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const alertRtl: RtlItem = { 5 | name: 'Alert', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/anchor/index.ts: -------------------------------------------------------------------------------- 1 | export { anchorProps, default as NAnchor } from './src/AnchorAdapter' 2 | export type { AnchorInst, AnchorProps } from './src/AnchorAdapter' 3 | export { anchorLinkProps, default as NAnchorLink } from './src/Link' 4 | export type { AnchorLinkProps } from './src/Link' 5 | -------------------------------------------------------------------------------- /src/anchor/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | linkFontSize: '13px', 3 | linkPadding: '0 0 0 16px', 4 | railWidth: '4px' 5 | } 6 | -------------------------------------------------------------------------------- /src/anchor/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { AnchorTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const anchorDark: AnchorTheme = { 6 | name: 'Anchor', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default anchorDark 12 | -------------------------------------------------------------------------------- /src/anchor/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as anchorDark } from './dark' 2 | export { default as anchorLight } from './light' 3 | export type { AnchorTheme, AnchorThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/auto-complete/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/auto-complete/index.ts: -------------------------------------------------------------------------------- 1 | export { autoCompleteProps, default as NAutoComplete } from './src/AutoComplete' 2 | export type { AutoCompleteProps, AutoCompleteSlots } from './src/AutoComplete' 3 | export type { 4 | AutoCompleteDefaultSlotProps, 5 | AutoCompleteGroupOption, 6 | AutoCompleteInst, 7 | AutoCompleteOption 8 | } from './src/interface' 9 | -------------------------------------------------------------------------------- /src/auto-complete/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as autoCompleteDark } from './dark' 2 | export { default as autoCompleteLight } from './light' 3 | export type { AutoCompleteTheme, AutoCompleteThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/avatar-group/index.ts: -------------------------------------------------------------------------------- 1 | export { avatarGroupProps, default as NAvatarGroup } from './src/AvatarGroup' 2 | export type { 3 | AvatarGroupOption, 4 | AvatarGroupProps, 5 | AvatarGroupSlots 6 | } from './src/AvatarGroup' 7 | export type { 8 | AvatarGroupAvatarSlotProps, 9 | AvatarGroupRestSlotProps 10 | } from './src/interface' 11 | -------------------------------------------------------------------------------- /src/avatar-group/src/interface.ts: -------------------------------------------------------------------------------- 1 | import type { AvatarGroupOption } from './AvatarGroup' 2 | 3 | export interface AvatarGroupAvatarSlotProps { 4 | option: AvatarGroupOption 5 | } 6 | 7 | export interface AvatarGroupRestSlotProps { 8 | options: Array 9 | rest: number 10 | } 11 | -------------------------------------------------------------------------------- /src/avatar-group/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as avatarGroupDark } from './dark' 2 | export { default as avatarGroupLight } from './light' 3 | export type { AvatarGroupTheme, AvatarGroupThemeVars } from './light' 4 | export { avatarGroupRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/avatar-group/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/avatar-group-rtl.cssr' 3 | 4 | export const avatarGroupRtl: RtlItem = { 5 | name: 'AvatarGroup', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/avatar/demos/enUS/badge.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Badge 3 | 4 | Using it with `badge` would be nice (if you like tons of notifications). 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/avatar/demos/enUS/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Color 3 | 4 | You can set colors related to things you want to eat. 5 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /src/avatar/demos/enUS/fallback.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Fallback 3 | 4 | Show 07akioni if loading fails. 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /src/avatar/demos/zhCN/badge.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 标记 3 | 4 | 和 `Badge` 一起用也挺好的 (如果你喜欢看到一堆一堆的推送)。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/avatar/demos/zhCN/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 颜色 3 | 4 | 你可以把它设成某种和你爱吃的东西有关的颜色。 5 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /src/avatar/demos/zhCN/fallback.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 加载失败时显示的图像 3 | 4 | 下面的头像加载失败时会展示 07akioni。 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /src/avatar/demos/zhCN/icon.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 图标 3 | 4 | 我喜欢用图标当头像。 5 | 6 | 7 | 10 | 11 | 18 | -------------------------------------------------------------------------------- /src/avatar/index.ts: -------------------------------------------------------------------------------- 1 | export { avatarProps, default as NAvatar } from './src/Avatar' 2 | export type { AvatarProps, AvatarSlots } from './src/Avatar' 3 | -------------------------------------------------------------------------------- /src/avatar/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { AvatarGroupInjection } from '../../avatar-group/src/AvatarGroup' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const avatarGroupInjectionKey 5 | = createInjectionKey('n-avatar-group') 6 | -------------------------------------------------------------------------------- /src/avatar/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type Size = number | 'small' | 'medium' | 'large' 2 | export type ObjectFit = 'fill' | 'contain' | 'cover' | 'none' | 'scale-down' 3 | -------------------------------------------------------------------------------- /src/avatar/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { AvatarTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const avatarDark: AvatarTheme = { 6 | name: 'Avatar', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default avatarDark 12 | -------------------------------------------------------------------------------- /src/avatar/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as avatarDark } from './dark' 2 | export { default as avatarLight } from './light' 3 | export type { AvatarTheme, AvatarThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/back-top/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | BackTop will find its first scrollable ascendant element and listen scroll event on it. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/back-top/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | BackTop 会找到首个可滚动的祖先元素并且监听它的滚动事件。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/back-top/index.ts: -------------------------------------------------------------------------------- 1 | export { backTopProps, default as NBackTop } from './src/BackTop' 2 | export type { BackTopProps } from './src/BackTop' 3 | -------------------------------------------------------------------------------- /src/back-top/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | width: '44px', 3 | height: '44px', 4 | borderRadius: '22px', 5 | iconSize: '26px' 6 | } 7 | -------------------------------------------------------------------------------- /src/back-top/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as backTopDark } from './dark' 2 | export { default as backTopLight } from './light' 3 | export type { BackTopTheme, BackTopThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/badge/demos/enUS/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Customizing color 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/badge/demos/zhCN/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 自定义颜色 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/badge/index.ts: -------------------------------------------------------------------------------- 1 | export { badgeProps, default as NBadge } from './src/Badge' 2 | export type { BadgeProps } from './src/Badge' 3 | -------------------------------------------------------------------------------- /src/badge/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('badge', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `, [ 7 | cB('badge-sup', ` 8 | right: 100%; 9 | left: unset; 10 | transform: translateX(50%); 11 | direction: initial; 12 | `) 13 | ]) 14 | ]) 15 | -------------------------------------------------------------------------------- /src/badge/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as badgeDark } from './dark' 2 | export { default as badgeLight } from './light' 3 | export type { BadgeTheme, BadgeThemeVars } from './light' 4 | export { badgeRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/badge/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const badgeRtl: RtlItem = { 5 | name: 'Badge', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/breadcrumb/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | fontWeightActive: '400' 3 | } 4 | -------------------------------------------------------------------------------- /src/breadcrumb/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { BreadcrumbTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const breadcrumbDark: BreadcrumbTheme = { 6 | name: 'Breadcrumb', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default breadcrumbDark 12 | -------------------------------------------------------------------------------- /src/breadcrumb/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as breadcrumbDark } from './dark' 2 | export { default as breadcrumbLight } from './light' 3 | export type { BreadcrumbTheme, BreadcrumbThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/button-group/index.ts: -------------------------------------------------------------------------------- 1 | export { buttonGroupProps, default as NButtonGroup } from './src/ButtonGroup' 2 | export type { ButtonGroupProps } from './src/ButtonGroup' 3 | -------------------------------------------------------------------------------- /src/button-group/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { ButtonGroupInjection } from './ButtonGroup' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const buttonGroupInjectionKey 5 | = createInjectionKey('n-button-group') 6 | -------------------------------------------------------------------------------- /src/button-group/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ButtonGroupTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | 4 | const buttonGroupDark: ButtonGroupTheme = { 5 | name: 'ButtonGroup', 6 | common: commonDark 7 | } 8 | 9 | export default buttonGroupDark 10 | -------------------------------------------------------------------------------- /src/button-group/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as buttonGroupDark } from './dark' 2 | export { default as buttonGroupLight } from './light' 3 | export { buttonGroupRtl } from './rtl' 4 | -------------------------------------------------------------------------------- /src/button-group/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const buttonGroupRtl: RtlItem = { 5 | name: 'ButtonGroup', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/button/demos/enUS/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disabled 3 | 4 | Buttons can be disabled. 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/button/demos/zhCN/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁用 3 | 4 | 按钮可以被禁用。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/button/demos/zhCN/tag.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 标签 3 | 4 | 你可以把按钮渲染成不同的标签,比如 ``。 5 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/button/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | buttonProps, 3 | default as NButton, 4 | XButton as NxButton 5 | } from './src/Button' 6 | export type { ButtonProps, ButtonSlots } from './src/Button' 7 | -------------------------------------------------------------------------------- /src/button/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type Size = 'tiny' | 'small' | 'medium' | 'large' 2 | 3 | export type Type = 4 | | 'default' 5 | | 'tertiary' 6 | | 'primary' 7 | | 'info' 8 | | 'success' 9 | | 'warning' 10 | | 'error' 11 | -------------------------------------------------------------------------------- /src/button/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as buttonDark } from './dark' 2 | export { default as buttonLight } from './light' 3 | export type { ButtonTheme, ButtonThemeVars } from './light' 4 | export { buttonRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/button/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const buttonRtl: RtlItem = { 5 | name: 'Button', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/calendar/index.ts: -------------------------------------------------------------------------------- 1 | export { calendarProps, default as NCalendar } from './src/Calendar' 2 | export type { CalendarProps } from './src/Calendar' 3 | -------------------------------------------------------------------------------- /src/calendar/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | titleFontSize: '22px' 3 | } 4 | -------------------------------------------------------------------------------- /src/calendar/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as calendarDark } from './dark' 2 | export { default as calendarLight } from './light' 3 | export type { CalendarTheme, CalendarThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/card/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | A basic card. 5 | 6 | 7 | 12 | 13 | 18 | -------------------------------------------------------------------------------- /src/card/demos/enUS/border.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Border 3 | 4 | Card can be used without border. 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/card/demos/enUS/hoverable.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Hoverable 3 | 4 | 5 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /src/card/demos/enUS/no-title.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No title 3 | 4 | Nobody said a card must have a title. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/card/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 基础卡片 5 | 6 | 7 | 12 | 13 | 18 | -------------------------------------------------------------------------------- /src/card/demos/zhCN/border.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 边框 3 | 4 | 卡片可以没有边框。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/card/demos/zhCN/hoverable.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 可悬浮 3 | 4 | 5 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /src/card/demos/zhCN/no-title.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 没有标题 3 | 4 | 谁说卡片一定要有标题呢。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/card/index.ts: -------------------------------------------------------------------------------- 1 | export { cardProps, default as NCard } from './src/Card' 2 | export type { CardProps, CardSegmented, CardSlots } from './src/Card' 3 | -------------------------------------------------------------------------------- /src/card/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as cardDark } from './dark' 2 | export { default as cardLight } from './light' 3 | export type { CardTheme, CardThemeVars } from './light' 4 | export { cardRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/card/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const cardRtl: RtlItem = { 5 | name: 'Card', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/carousel/src/utils/event.ts: -------------------------------------------------------------------------------- 1 | export function isTouchEvent(e: MouseEvent | TouchEvent): e is TouchEvent { 2 | return window.TouchEvent && e instanceof window.TouchEvent 3 | } 4 | -------------------------------------------------------------------------------- /src/carousel/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { CarouselTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const carouselDark: CarouselTheme = { 6 | name: 'Carousel', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default carouselDark 12 | -------------------------------------------------------------------------------- /src/carousel/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as carouselDark } from './dark' 2 | export { default as carouselLight } from './light' 3 | export type { CarouselTheme, CarouselThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/cascader/demos/enUS/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Validation status 3 | 4 | Validation status can be applied outside form. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/cascader/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/cascader/index.ts: -------------------------------------------------------------------------------- 1 | export { cascaderProps, default as NCascader } from './src/Cascader' 2 | export type { CascaderProps, CascaderSlots } from './src/Cascader' 3 | export type { CascaderInst, CascaderOption } from './src/interface' 4 | -------------------------------------------------------------------------------- /src/cascader/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as cascaderDark } from './dark' 2 | export { default as cascaderLight } from './light' 3 | export type { CascaderTheme, CascaderThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/checkbox/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 尺寸 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/checkbox/src/LineMark.tsx: -------------------------------------------------------------------------------- 1 | import type { VNode } from 'vue' 2 | import { h } from 'vue' 3 | 4 | export default (): VNode => ( 5 | 6 | 7 | 8 | ) 9 | -------------------------------------------------------------------------------- /src/checkbox/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('checkbox', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `) 7 | ]) 8 | -------------------------------------------------------------------------------- /src/checkbox/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | sizeSmall: '14px', 3 | sizeMedium: '16px', 4 | sizeLarge: '18px', 5 | labelPadding: '0 8px', 6 | labelFontWeight: '400' 7 | } 8 | -------------------------------------------------------------------------------- /src/checkbox/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as checkboxDark } from './dark' 2 | export { default as checkboxLight } from './light' 3 | export type { CheckboxTheme, CheckboxThemeVars } from './light' 4 | export { checkboxRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/checkbox/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const checkboxRtl: RtlItem = { 5 | name: 'Checkbox', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/code/index.ts: -------------------------------------------------------------------------------- 1 | export { codeProps, default as NCode } from './src/Code' 2 | export type { CodeProps } from './src/Code' 3 | -------------------------------------------------------------------------------- /src/code/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as codeDark } from './dark' 2 | export { default as codeLight } from './light' 3 | export type { CodeTheme, CodeThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/collapse-transition/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | collapseTransitionProps, 3 | default as NCollapseTransition 4 | } from './src/CollapseTransition' 5 | export type { CollapseTransitionProps } from './src/CollapseTransition' 6 | -------------------------------------------------------------------------------- /src/collapse-transition/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { fadeInHeightExpandTransition } from '../../../_styles/transitions/fade-in-height-expand.cssr' 2 | import { cB } from '../../../_utils/cssr' 3 | 4 | export default cB('collapse-transition', { 5 | width: '100%' 6 | }, [ 7 | fadeInHeightExpandTransition() 8 | ]) 9 | -------------------------------------------------------------------------------- /src/collapse-transition/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('collapse-transition', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | text-align: right; 7 | `) 8 | ]) 9 | -------------------------------------------------------------------------------- /src/collapse-transition/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as collapseTransitionDark } from './dark' 2 | export { default as collapseTransitionLight } from './light' 3 | export type { 4 | CollapseTransitionTheme, 5 | CollapseTransitionThemeVars 6 | } from './light' 7 | export { collapseTransitionRtl } from './rtl' 8 | -------------------------------------------------------------------------------- /src/collapse-transition/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const collapseTransitionRtl: RtlItem = { 5 | name: 'CollapseTransition', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/collapse/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { CollapseTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const collapseDark: CollapseTheme = { 6 | name: 'Collapse', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default collapseDark 12 | -------------------------------------------------------------------------------- /src/collapse/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as collapseDark } from './dark' 2 | export { default as collapseLight } from './light' 3 | export type { CollapseTheme, CollapseThemeVars } from './light' 4 | export { collapseRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/collapse/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const collapseRtl: RtlItem = { 5 | name: 'Collapse', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/color-picker/demos/enUS/actions.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Clearable 3 | 4 | If you want the color picker to be clearable, you can add `'clear'` in `'actions'` prop. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | A basic color picker. Note: when choosing a color in a particular mode, that's the mode that will be used. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/enUS/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disabled 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/color-picker/demos/enUS/modes.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Set mode 3 | 4 | Use `modes` to set restrict the available modes. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/enUS/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Size 3 | 4 | `small`, `medium`, `large`. 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/actions.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 可清除 3 | 4 | 如果你希望颜色选择器可以清空,你可以在 `'actions'` 属性中添加 `'clear'`。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 一个基本的颜色选择器。注意如果你在某个模式下选择了值,那么颜色选择器的值的格式会跟随模式。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/close-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Close debug 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁用 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/modes.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 设定模式 3 | 4 | 使用 `modes` 设定可选模式。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/native.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 原生 3 | 4 | 我们提供了一种通过点击颜色预览块来触发浏览器原生的颜色选择器的方式,因为浏览器厂商在原生的颜色选择器上实现了一些很棒的功能,你可能会需要。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 尺寸 3 | 4 | `small`、`medium`、`large`。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/color-picker/demos/zhCN/swatches.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 色板 3 | 4 | 你也可以预设一个色板供用户选择。 5 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/color-picker/index.ts: -------------------------------------------------------------------------------- 1 | export { colorPickerProps, default as NColorPicker } from './src/ColorPicker' 2 | export type { ColorPickerProps, ColorPickerSlots } from './src/ColorPicker' 3 | -------------------------------------------------------------------------------- /src/color-picker/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as colorPickerDark } from './dark' 2 | export { default as colorPickerLight } from './light' 3 | export type { ColorPickerTheme, ColorPickerThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export { useThemeVars } from './use-theme-vars' 2 | -------------------------------------------------------------------------------- /src/config-provider/demos/enUS/inherit-theme.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Inherit theme 3 | 4 | If you don't set theme of `n-config-provider`, the theme of `n-config-provider` is inherited by default. 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/config-provider/demos/enUS/transparent.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No wrapper DOM 3 | 4 | If you don't need wrapper DOM, set `abstract` on it. 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/config-provider/demos/zhCN/inherit-theme.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 继承主题 3 | 4 | 如果不设置 `n-config-provider` 的主题,则 `n-config-provider` 主题默认继承外面的主题。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/config-provider/demos/zhCN/transparent.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 不需要包裹 DOM 3 | 4 | 如果不需要包裹 DOM,设置 `abstract`。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/config-provider/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | configProviderProps, 3 | default as NConfigProvider 4 | } from './src/ConfigProvider' 5 | export type { ConfigProviderProps } from './src/ConfigProvider' 6 | export * from './src/interface' 7 | -------------------------------------------------------------------------------- /src/config-provider/src/config.ts: -------------------------------------------------------------------------------- 1 | export const defaultBreakpoints = { 2 | xs: 0, // mobile 3 | s: 640, // tablet 4 | m: 1024, // laptop s 5 | l: 1280, // laptop 6 | xl: 1536, // laptop l 7 | xxl: 1920 // normal desktop display 8 | } as const 9 | -------------------------------------------------------------------------------- /src/config-provider/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { ConfigProviderInjection } from './internal-interface' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const configProviderInjectionKey 5 | = createInjectionKey('n-config-provider') 6 | -------------------------------------------------------------------------------- /src/config-provider/src/katex.ts: -------------------------------------------------------------------------------- 1 | import type katex from 'katex' 2 | 3 | export type Katex = typeof katex 4 | -------------------------------------------------------------------------------- /src/config-provider/tests/ConfigProvider.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from '@vue/test-utils' 2 | import { NConfigProvider } from '../index' 3 | 4 | describe('n-config-provider', () => { 5 | it('should work with import on demand', () => { 6 | mount(NConfigProvider) 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /src/countdown/index.ts: -------------------------------------------------------------------------------- 1 | export { countdownProps, default as NCountdown } from './src/Countdown' 2 | export type { 3 | CountdownInst, 4 | CountdownProps, 5 | CountdownTimeInfo 6 | } from './src/Countdown' 7 | -------------------------------------------------------------------------------- /src/data-table/src/publicTypes.ts: -------------------------------------------------------------------------------- 1 | import type { TableBaseColumn } from './interface' 2 | 3 | export type DataTableGetCsvCell = ( 4 | value: any, 5 | rowData: object, 6 | column: TableBaseColumn 7 | ) => string 8 | export type DataTableGetCsvHeader = (column: TableBaseColumn) => string 9 | -------------------------------------------------------------------------------- /src/data-table/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dataTableDark } from './dark' 2 | export { default as dataTableLight } from './light' 3 | export type { DataTableTheme, DataTableThemeVars } from './light' 4 | export { DataTableRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/date-picker/demos/enUS/panel.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Use panel only 3 | 4 | It may be useful sometimes. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/date-picker/demos/enUS/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Validation status 3 | 4 | Validation status can be applied outside form. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/date-picker/demos/zhCN/panel.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 只使用面板 3 | 4 | 这个功能或许有的时候能管点用,我实在不忍心看大家强行调样式。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/date-picker/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/date-picker/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NDatePicker } from './src/DatePicker' 2 | export type { DatePickerSlots } from './src/DatePicker' 3 | export { datePickerProps } from './src/props' 4 | export type * from './src/public-types' 5 | -------------------------------------------------------------------------------- /src/date-picker/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as datePickerDark } from './dark' 2 | export { default as datePickerLight } from './light' 3 | export type { DatePickerTheme, DatePickerThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/descriptions/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { DescriptionsTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const descriptionsDark: DescriptionsTheme = { 6 | name: 'Descriptions', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default descriptionsDark 12 | -------------------------------------------------------------------------------- /src/descriptions/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as descriptionsDark } from './dark' 2 | export { default as descriptionsLight } from './light' 3 | export type { DescriptionsTheme, DescriptionsThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/dialog/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type IconPlacement = 'left' | 'top' 2 | -------------------------------------------------------------------------------- /src/dialog/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dialogDark } from './dark' 2 | export { default as dialogLight } from './light' 3 | export type { DialogTheme, DialogThemeVars } from './light' 4 | export { dialogRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/dialog/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const dialogRtl: RtlItem = { 5 | name: 'Dialog', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/discrete/index.ts: -------------------------------------------------------------------------------- 1 | export { createDiscreteApi } from './src/discrete' 2 | export type { DiscreteApi, DiscreteApiOptions } from './src/interface' 3 | -------------------------------------------------------------------------------- /src/divider/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/divider/demos/enUS/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Vertical 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/divider/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/divider/demos/zhCN/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 垂直 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/divider/index.ts: -------------------------------------------------------------------------------- 1 | export { dividerProps, default as NDivider } from './src/Divider' 2 | export type { DividerProps } from './src/Divider' 3 | -------------------------------------------------------------------------------- /src/divider/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { DividerTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const dividerDark: DividerTheme = { 6 | name: 'Divider', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default dividerDark 12 | -------------------------------------------------------------------------------- /src/divider/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dividerDark } from './dark' 2 | export { default as dividerLight } from './light' 3 | export type { DividerTheme, DividerThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/drawer/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as drawerDark } from './dark' 2 | export { default as drawerLight } from './light' 3 | export type { DrawerTheme, DrawerThemeVars } from './light' 4 | export { default as drawerRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/dropdown/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dropdownDark } from './dark' 2 | export { default as dropdownLight } from './light' 3 | export type { DropdownTheme, DropdownThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/dynamic-input/index.ts: -------------------------------------------------------------------------------- 1 | export { dynamicInputProps, default as NDynamicInput } from './src/DynamicInput' 2 | export type { DynamicInputProps, DynamicInputSlots } from './src/DynamicInput' 3 | export type { 4 | DynamicInputActionSlotProps, 5 | DynamicInputDefaultSlotProps 6 | } from './src/interface' 7 | -------------------------------------------------------------------------------- /src/dynamic-input/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | actionMargin: '0 0 0 20px', 3 | actionMarginRtl: '0 20px 0 0' 4 | } 5 | -------------------------------------------------------------------------------- /src/dynamic-input/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dynamicInputDark } from './dark' 2 | export { default as dynamicInputLight } from './light' 3 | export type { DynamicInputTheme, DynamicInputThemeVars } from './light' 4 | export { dynamicInputRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/dynamic-tags/index.ts: -------------------------------------------------------------------------------- 1 | export { dynamicTagsProps, default as NDynamicTags } from './src/DynamicTags' 2 | export type { DynamicTagsProps, DynamicTagsSlots } from './src/DynamicTags' 3 | export type { 4 | DynamicTagsInputSlotProps, 5 | DynamicTagsOption, 6 | DynamicTagsTriggerSlotProps 7 | } from './src/interface' 8 | -------------------------------------------------------------------------------- /src/dynamic-tags/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB } from '../../../_utils/cssr' 2 | 3 | // vars: 4 | // --input-width 5 | export default cB('dynamic-tags', [ 6 | cB('input', { 7 | minWidth: 'var(--n-input-width)' 8 | }) 9 | ]) 10 | -------------------------------------------------------------------------------- /src/dynamic-tags/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as dynamicTagsDark } from './dark' 2 | export { default as dynamicTagsLight } from './light' 3 | export type { DynamicTagsTheme, DynamicTagsThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/element/index.ts: -------------------------------------------------------------------------------- 1 | export { elementProps, default as NElement } from './src/Element' 2 | export { default as NEl } from './src/Element' 3 | export type { ElementProps } from './src/Element' 4 | -------------------------------------------------------------------------------- /src/element/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ElementTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | 4 | const elementDark: ElementTheme = { 5 | name: 'Element', 6 | common: commonDark 7 | } 8 | 9 | export default elementDark 10 | -------------------------------------------------------------------------------- /src/element/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as elementDark } from './dark' 2 | export { default as elementLight } from './light' 3 | export type { ElementTheme } from './light' 4 | -------------------------------------------------------------------------------- /src/element/styles/light.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from '../../_mixins' 2 | import { commonLight } from '../../_styles/common' 3 | 4 | const elementLight: Theme<'Element'> = { 5 | name: 'Element', 6 | common: commonLight 7 | } 8 | 9 | export default elementLight 10 | export type ElementTheme = typeof elementLight 11 | -------------------------------------------------------------------------------- /src/ellipsis/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础 3 | 4 | 带弹出提示基本的单行省略。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/ellipsis/demos/zhCN/width-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Width debug 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/ellipsis/index.ts: -------------------------------------------------------------------------------- 1 | export { ellipsisProps, default as NEllipsis } from './src/Ellipsis' 2 | export type { EllipsisProps, EllipsisSlots } from './src/Ellipsis' 3 | export { NPerformantEllipsis } from './src/PerformantEllipsis' 4 | -------------------------------------------------------------------------------- /src/ellipsis/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ellipsisDark } from './dark' 2 | export { default as ellipsisLight } from './light' 3 | export type { EllipsisTheme } from './light' 4 | -------------------------------------------------------------------------------- /src/empty/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /src/empty/demos/enUS/locale-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Locale Debug 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/empty/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 14 | -------------------------------------------------------------------------------- /src/empty/demos/zhCN/locale-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Locale Debug 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/empty/index.ts: -------------------------------------------------------------------------------- 1 | export { emptyProps, default as NEmpty } from './src/Empty' 2 | export type { EmptyProps, EmptySlots } from './src/Empty' 3 | -------------------------------------------------------------------------------- /src/empty/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | iconSizeTiny: '28px', 3 | iconSizeSmall: '34px', 4 | iconSizeMedium: '40px', 5 | iconSizeLarge: '46px', 6 | iconSizeHuge: '52px' 7 | } 8 | -------------------------------------------------------------------------------- /src/empty/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { EmptyTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const emptyDark: EmptyTheme = { 6 | name: 'Empty', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default emptyDark 12 | -------------------------------------------------------------------------------- /src/empty/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as emptyDark } from './dark' 2 | export { default as emptyLight } from './light' 3 | export type { EmptyTheme, EmptyThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/equation/index.ts: -------------------------------------------------------------------------------- 1 | export { equationProps, Equation as NEquation } from './src/Equation' 2 | export type { EquationProps } from './src/Equation' 3 | -------------------------------------------------------------------------------- /src/equation/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { EquationTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const equationDark: EquationTheme = { 6 | name: 'Equation', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default equationDark 12 | -------------------------------------------------------------------------------- /src/equation/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as equationDark } from './dark' 2 | export { default as equationLight } from './light' 3 | export type { EquationTheme, EquationThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/center.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # From Center 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/from-end.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # From End 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/space-around.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Space Around 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/space-between.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Space Between 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/enUS/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Vertical 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/center.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 从中间 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/from-end.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 从尾部 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/space-around.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 空间围绕 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/space-between.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 间隙 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/demos/zhCN/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 垂直 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/flex/index.ts: -------------------------------------------------------------------------------- 1 | export { flexProps, default as NFlex } from './src/Flex' 2 | export type { FlexProps } from './src/Flex' 3 | export type { FlexAlign, FlexJustify } from './src/type' 4 | -------------------------------------------------------------------------------- /src/flex/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('space', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `) 7 | ]) 8 | -------------------------------------------------------------------------------- /src/flex/src/type.ts: -------------------------------------------------------------------------------- 1 | import type { Property } from 'csstype' 2 | 3 | export type FlexAlign = Property.AlignItems 4 | 5 | export type FlexJustify = Property.JustifyContent 6 | -------------------------------------------------------------------------------- /src/flex/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | gapSmall: '4px 8px', 3 | gapMedium: '8px 12px', 4 | gapLarge: '12px 16px' 5 | } 6 | -------------------------------------------------------------------------------- /src/flex/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { FlexTheme } from './light' 2 | import commonVars from './_common' 3 | 4 | const flexDark: FlexTheme = { 5 | name: 'Flex', 6 | self() { 7 | return commonVars 8 | } 9 | } 10 | 11 | export default flexDark 12 | -------------------------------------------------------------------------------- /src/flex/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as flexDark } from './dark' 2 | export { default as flexLight } from './light' 3 | export type { FlexTheme, FlexThemeVars } from './light' 4 | export { flexRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/flex/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const flexRtl: RtlItem = { 5 | name: 'Flex', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/float-button-group/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | floatButtonGroupProps, 3 | default as NFloatButtonGroup 4 | } from './src/FloatButtonGroup' 5 | export type { FloatButtonGroupProps } from './src/FloatButtonGroup' 6 | -------------------------------------------------------------------------------- /src/float-button-group/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as floatButtonGroupDark } from './dark' 2 | export { default as floatButtonGroupLight } from './light' 3 | export type { FloatButtonGroupTheme } from './light' 4 | -------------------------------------------------------------------------------- /src/float-button/index.ts: -------------------------------------------------------------------------------- 1 | export { floatButtonProps, default as NFloatButton } from './src/FloatButton' 2 | export type { FloatButtonProps, FloatButtonSlots } from './src/FloatButton' 3 | -------------------------------------------------------------------------------- /src/float-button/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as floatButtonDark } from './dark' 2 | export { default as floatButtonLight } from './light' 3 | export type { FloatButtonTheme, FloatButtonThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/form/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { FormInjection } from './interface' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const formInjectionKey = createInjectionKey('n-form') 5 | export const formItemInstsInjectionKey 6 | = createInjectionKey('n-form-item-insts') 7 | -------------------------------------------------------------------------------- /src/form/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { FormTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const formItemDark: FormTheme = { 6 | name: 'Form', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default formItemDark 12 | -------------------------------------------------------------------------------- /src/form/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as formDark } from './dark' 2 | export { default as formLight } from './light' 3 | export type { FormTheme, FormThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/global-style/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NGlobalStyle } from './src/GlobalStyle' 2 | -------------------------------------------------------------------------------- /src/global.d.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | 3 | declare global { 4 | const __DEV__: boolean 5 | } 6 | -------------------------------------------------------------------------------- /src/gradient-text/index.ts: -------------------------------------------------------------------------------- 1 | export { gradientTextProps, default as NGradientText } from './src/GradientText' 2 | export type { GradientTextProps } from './src/GradientText' 3 | -------------------------------------------------------------------------------- /src/gradient-text/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as gradientTextDark } from './dark' 2 | export { default as gradientTextLight } from './light' 3 | export type { GradientTextTheme, GradientTextThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/grid/index.ts: -------------------------------------------------------------------------------- 1 | export { gridProps, default as NGrid } from './src/Grid' 2 | export type { GridProps } from './src/Grid' 3 | export { gridItemProps, default as NGridItem } from './src/GridItem' 4 | export { gridItemProps as giProps, default as NGi } from './src/GridItem' 5 | export type { GridItemProps } from './src/GridItem' 6 | -------------------------------------------------------------------------------- /src/grid/src/config.ts: -------------------------------------------------------------------------------- 1 | import type { NGridInjection } from './Grid' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const defaultSpan = 1 5 | export const gridInjectionKey = createInjectionKey('n-grid') 6 | -------------------------------------------------------------------------------- /src/highlight/index.ts: -------------------------------------------------------------------------------- 1 | export { highlightProps, default as NHighlight } from './src/Highlight' 2 | export type * from './src/public-types' 3 | -------------------------------------------------------------------------------- /src/highlight/src/public-types.ts: -------------------------------------------------------------------------------- 1 | import type { ExtractPublicPropTypes } from '../../_utils' 2 | import type { highlightProps } from './Highlight' 3 | 4 | export type HighlightProps = ExtractPublicPropTypes 5 | -------------------------------------------------------------------------------- /src/icon-wrapper/index.ts: -------------------------------------------------------------------------------- 1 | export { iconWrapperProps, NIconWrapper } from './src/IconWrapper' 2 | export type { IconWrapperProps } from './src/IconWrapper' 3 | -------------------------------------------------------------------------------- /src/icon-wrapper/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { IconWrapperTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const iconDark: IconWrapperTheme = { 6 | name: 'IconWrapper', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default iconDark 12 | -------------------------------------------------------------------------------- /src/icon-wrapper/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as iconWrapperDark } from './dark' 2 | export { default as iconWrapperLight } from './light' 3 | export type { IconWrapperTheme, IconWrapperThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/icon/index.ts: -------------------------------------------------------------------------------- 1 | export { iconProps, NIcon } from './src/Icon' 2 | export type { IconProps } from './src/Icon' 3 | -------------------------------------------------------------------------------- /src/icon/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { IconTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const iconDark: IconTheme = { 6 | name: 'Icon', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default iconDark 12 | -------------------------------------------------------------------------------- /src/icon/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as iconDark } from './dark' 2 | export { default as iconLight } from './light' 3 | export type { IconTheme, IconThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/icon/tests/__snapshots__/Icon.spec.ts.snap: -------------------------------------------------------------------------------- 1 | // Jest Snapshot v1, https://goo.gl/fbAQLP 2 | 3 | exports[`n-icon should work with \`depth\` prop 1`] = `"--n-bezier: cubic-bezier(.4, 0, .2, 1); --n-color: #000; --n-opacity: 0.18;"`; 4 | -------------------------------------------------------------------------------- /src/image/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/image/demos/enUS/preview-disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disable preview 3 | 4 | You can use `preview-disabled` to disable preview. 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/image/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/image/demos/zhCN/error.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 加载失败 3 | 4 | 使用 `fallback-src` 设定失败时的图像。或者你可以使用下一个例子里的 `error` slot。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/image/demos/zhCN/full-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 原始尺寸展示图片 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/image/demos/zhCN/preview-disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁止预览 3 | 4 | 你可以使用 `preview-disabled` 来禁止预览。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/image/index.ts: -------------------------------------------------------------------------------- 1 | export { imageProps, default as NImage } from './src/Image' 2 | export type { ImageProps, ImageSlots } from './src/Image' 3 | export { imageGroupProps, default as NImageGroup } from './src/ImageGroup' 4 | export type { ImageGroupProps } from './src/ImageGroup' 5 | export type * from './src/public-types' 6 | -------------------------------------------------------------------------------- /src/image/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { imageDark } from './dark' 2 | export { imageLight } from './light' 3 | export type { ImageTheme, ImageThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/infinite-scroll/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | infiniteScrollProps, 3 | default as NInfiniteScroll 4 | } from './src/InfiniteScroll' 5 | export type { InfiniteScrollProps } from './src/InfiniteScroll' 6 | -------------------------------------------------------------------------------- /src/input-number/demos/enUS/disable-keyboard.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disable keyboard arrow up & down 3 | 4 | Set `:keyboard="{ ArrowUp: false, ArrowDown: false }"` to disabled keyboard arrow up & down. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/input-number/demos/zhCN/disable-keyboard.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁用键盘上下 3 | 4 | 设定 `:keyboard="{ ArrowUp: false, ArrowDown: false }"` 来禁用键盘上下键。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/input-number/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/input-number/demos/zhCN/theme-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Theme debug 3 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /src/input-number/index.ts: -------------------------------------------------------------------------------- 1 | export { inputNumberProps, default as NInputNumber } from './src/InputNumber' 2 | export type { InputNumberProps, InputNumberSlots } from './src/InputNumber' 3 | export type { InputNumberInst } from './src/interface' 4 | -------------------------------------------------------------------------------- /src/input-number/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type OnUpdateValue = (value: number | null) => void 2 | export type Size = 'tiny' | 'small' | 'medium' | 'large' 3 | 4 | export interface InputNumberInst { 5 | focus: () => void 6 | blur: () => void 7 | select: () => void 8 | } 9 | -------------------------------------------------------------------------------- /src/input-number/src/styles/input-number.cssr.ts: -------------------------------------------------------------------------------- 1 | import { c, cB } from '../../../_utils/cssr' 2 | 3 | export default c([ 4 | cB('input-number-suffix', ` 5 | display: inline-block; 6 | margin-right: 10px; 7 | `), 8 | cB('input-number-prefix', ` 9 | display: inline-block; 10 | margin-left: 10px; 11 | `) 12 | ]) 13 | -------------------------------------------------------------------------------- /src/input-number/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('input-number', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `) 7 | ]) 8 | -------------------------------------------------------------------------------- /src/input-number/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as inputNumberDark } from './dark' 2 | export { default as inputNumberLight } from './light' 3 | export type { InputNumberTheme, InputNumberThemeVars } from './light' 4 | export { inputNumberRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/input-opt/demos/enUS/mask.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # mask 3 | 4 | Use mask = true to turn on password mode 5 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/input-opt/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 字符数由 length 选项定义,默认情况下设置为 6。 5 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/input-opt/demos/zhCN/mask.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 密码模式 3 | 4 | 指定 mask = true,可开启密码模式 5 | 6 | 7 | 12 | 13 | 16 | -------------------------------------------------------------------------------- /src/input-opt/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NInputOpt } from './src/input-opt' 2 | -------------------------------------------------------------------------------- /src/input-opt/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type Size = 'small' | 'medium' | 'large' 2 | export type FormValidationStatus = 'success' | 'error' | 'warning' 3 | 4 | export type OnUpdateValue = (value: string & (string | null)) => void 5 | -------------------------------------------------------------------------------- /src/input-opt/src/styles/input-opt-rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | // --n-gap 4 | export default cB('input-opt', [ 5 | cM('rtl', ` 6 | direction: rtl; 7 | `) 8 | ]) 9 | -------------------------------------------------------------------------------- /src/input-opt/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as inputOptDark } from './dark' 2 | export { default as inputOptLight } from './light' 3 | export type { InputOptTheme } from './light' 4 | export { inputOptRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/input-opt/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/input-opt-rtl.cssr' 3 | 4 | export const inputOptRtl: RtlItem = { 5 | name: 'InputOpt', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/input/demos/enUS/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Validation status 3 | 4 | Validation status can be applied outside form. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/input/demos/zhCN/round.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 圆角 3 | 4 | 文本输入可以是圆角的。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/input/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/input/demos/zhCN/textarea-resize-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # textarea-resize-debug 3 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /src/input/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | paddingTiny: '0 8px', 3 | paddingSmall: '0 10px', 4 | paddingMedium: '0 12px', 5 | paddingLarge: '0 14px', 6 | clearSize: '16px' 7 | } 8 | -------------------------------------------------------------------------------- /src/input/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as inputDark } from './dark' 2 | export { default as inputLight } from './light' 3 | export type { InputTheme, InputThemeVars } from './light' 4 | export { inputRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/input/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const inputRtl: RtlItem = { 5 | name: 'Input', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/jest-setup.ts: -------------------------------------------------------------------------------- 1 | import { isBrowser } from './_utils' 2 | 3 | // https://github.com/jsdom/jsdom/issues/1422 4 | if (isBrowser) { 5 | HTMLDivElement.prototype.scrollTo = () => {} 6 | } 7 | -------------------------------------------------------------------------------- /src/layout/demos/zhCN/embedded.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 嵌入效果 3 | 4 | 有的时候你希望背景色暗一点,来突出上面显示的内容(尤其是卡片)。 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /src/layout/src/LayoutContent.tsx: -------------------------------------------------------------------------------- 1 | import { createLayoutComponent } from './Layout' 2 | 3 | export default createLayoutComponent(true) 4 | -------------------------------------------------------------------------------- /src/layout/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as layoutDark } from './dark' 2 | export { default as layoutLight } from './light' 3 | export type { LayoutTheme, LayoutThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/legacy-grid/index.ts: -------------------------------------------------------------------------------- 1 | export { colProps, default as NCol } from './src/Col' 2 | export type { ColProps } from './src/Col' 3 | export { default as NRow, rowProps } from './src/Row' 4 | export type { RowProps } from './src/Row' 5 | -------------------------------------------------------------------------------- /src/legacy-grid/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from '../../_mixins' 2 | import { commonDark } from '../../_styles/common' 3 | 4 | const rowDark: Theme<'Row'> = { 5 | name: 'Row', 6 | common: commonDark 7 | } 8 | 9 | export default rowDark 10 | export type RowTheme = typeof rowDark 11 | -------------------------------------------------------------------------------- /src/legacy-grid/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as rowDark } from './dark' 2 | export { default as rowLight } from './light' 3 | export type { RowTheme } from './light' 4 | export { rowRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/legacy-grid/styles/light.ts: -------------------------------------------------------------------------------- 1 | import type { Theme } from '../../_mixins' 2 | import { commonLight } from '../../_styles/common' 3 | 4 | const rowLight: Theme<'Row'> = { 5 | name: 'Row', 6 | common: commonLight 7 | } 8 | 9 | export default rowLight 10 | export type RowTheme = typeof rowLight 11 | -------------------------------------------------------------------------------- /src/legacy-grid/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const rowRtl: RtlItem = { 5 | name: 'Row', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/legacy-transfer/index.ts: -------------------------------------------------------------------------------- 1 | export type { Option as LegacyTransferOption } from './src/interface' 2 | export { 3 | transferProps as legacyTransferProps, 4 | default as NLegacyTransfer 5 | } from './src/Transfer' 6 | export type { transferProps as LegacyTransferProps } from './src/Transfer' 7 | -------------------------------------------------------------------------------- /src/legacy-transfer/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | extraFontSize: '12px', 3 | width: '440px' 4 | } 5 | -------------------------------------------------------------------------------- /src/legacy-transfer/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as legacyTransferDark } from './dark' 2 | export { default as legacyTransferLight } from './light' 3 | export type { 4 | TransferTheme as LegacyTransferTheme, 5 | TransferThemeVars as LegacyTransferThemeVars 6 | } from './light' 7 | -------------------------------------------------------------------------------- /src/list/index.ts: -------------------------------------------------------------------------------- 1 | export { listProps, default as NList } from './src/List' 2 | export type { ListProps, ListSlots } from './src/List' 3 | export { default as NListItem } from './src/ListItem' 4 | export type { ListItemSlots } from './src/ListItem' 5 | -------------------------------------------------------------------------------- /src/list/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ListTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const listDark: ListTheme = { 6 | name: 'List', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default listDark 12 | -------------------------------------------------------------------------------- /src/list/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as listDark } from './dark' 2 | export { default as listLight } from './light' 3 | export type { ListTheme, ListThemeVars } from './light' 4 | export { listRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/list/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const listRtl: RtlItem = { 5 | name: 'List', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/loading-bar/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as loadingBarDark } from './dark' 2 | export { default as loadingBarLight } from './light' 3 | export type { LoadingBarTheme, LoadingBarThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/locales/date/arDZ.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { arDZ } from 'date-fns/locale' 3 | 4 | const dateArDZ: NDateLocale = { 5 | name: 'ar-DZ', 6 | locale: arDZ 7 | } 8 | 9 | export default dateArDZ 10 | -------------------------------------------------------------------------------- /src/locales/date/azAZ.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { az } from 'date-fns/locale' 3 | 4 | const dateAzAZ: NDateLocale = { 5 | name: 'az-AZ', 6 | locale: az 7 | } 8 | 9 | export default dateAzAZ 10 | -------------------------------------------------------------------------------- /src/locales/date/csCZ.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { cs } from 'date-fns/locale' 3 | 4 | const dateCsCZ: NDateLocale = { 5 | name: 'cs-CZ', 6 | locale: cs 7 | } 8 | 9 | export default dateCsCZ 10 | -------------------------------------------------------------------------------- /src/locales/date/deDE.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { de } from 'date-fns/locale' 3 | 4 | const dateDeDE: NDateLocale = { 5 | name: 'de-DE', 6 | locale: de 7 | } 8 | 9 | export default dateDeDE 10 | -------------------------------------------------------------------------------- /src/locales/date/enGB.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { enGB } from 'date-fns/locale' 3 | 4 | const dateEnGB: NDateLocale = { 5 | name: 'en-GB', 6 | locale: enGB 7 | } 8 | 9 | export default dateEnGB 10 | -------------------------------------------------------------------------------- /src/locales/date/eo.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { eo } from 'date-fns/locale' 3 | 4 | const dateEo: NDateLocale = { 5 | name: 'eo', 6 | locale: eo 7 | } 8 | 9 | export default dateEo 10 | -------------------------------------------------------------------------------- /src/locales/date/esAR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { es } from 'date-fns/locale' 3 | 4 | const dateEsAR: NDateLocale = { 5 | name: 'es-AR', 6 | locale: es 7 | } 8 | 9 | export default dateEsAR 10 | -------------------------------------------------------------------------------- /src/locales/date/etEE.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { et } from 'date-fns/locale' 3 | 4 | const dateEtEE: NDateLocale = { 5 | name: 'et-EE', 6 | locale: et 7 | } 8 | 9 | export default dateEtEE 10 | -------------------------------------------------------------------------------- /src/locales/date/faIR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { faIR } from 'date-fns/locale' 3 | 4 | const dateFaIR: NDateLocale = { 5 | name: 'fa-IR', 6 | locale: faIR 7 | } 8 | 9 | export default dateFaIR 10 | -------------------------------------------------------------------------------- /src/locales/date/frFR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { fr } from 'date-fns/locale' 3 | 4 | const dateFrFR: NDateLocale = { 5 | name: 'fr-FR', 6 | locale: fr 7 | } 8 | 9 | export default dateFrFR 10 | -------------------------------------------------------------------------------- /src/locales/date/idID.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { id } from 'date-fns/locale' 3 | 4 | const dateIdID: NDateLocale = { 5 | name: 'id-ID', 6 | locale: id 7 | } 8 | 9 | export default dateIdID 10 | -------------------------------------------------------------------------------- /src/locales/date/itIT.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { it } from 'date-fns/locale' 3 | 4 | const dateItIT: NDateLocale = { 5 | name: 'it-IT', 6 | locale: it 7 | } 8 | 9 | export default dateItIT 10 | -------------------------------------------------------------------------------- /src/locales/date/jaJP.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { ja } from 'date-fns/locale' 3 | 4 | const dateJaJP: NDateLocale = { 5 | name: 'ja-JP', 6 | locale: ja 7 | } 8 | 9 | export default dateJaJP 10 | -------------------------------------------------------------------------------- /src/locales/date/kmKH.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { km } from 'date-fns/locale' 3 | 4 | const dateKmKH: NDateLocale = { 5 | name: 'km-KH', 6 | locale: km 7 | } 8 | 9 | export default dateKmKH 10 | -------------------------------------------------------------------------------- /src/locales/date/koKR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { ko } from 'date-fns/locale' 3 | 4 | const dateKoKR: NDateLocale = { 5 | name: 'ko-KR', 6 | locale: ko 7 | } 8 | 9 | export default dateKoKR 10 | -------------------------------------------------------------------------------- /src/locales/date/nbNO.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { nb } from 'date-fns/locale' 3 | 4 | const dateNbNO: NDateLocale = { 5 | name: 'nb-NO', 6 | locale: nb 7 | } 8 | 9 | export default dateNbNO 10 | -------------------------------------------------------------------------------- /src/locales/date/nlNL.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { nl } from 'date-fns/locale' 3 | 4 | const dateNlNL: NDateLocale = { 5 | name: 'nl-NL', 6 | locale: nl 7 | } 8 | 9 | export default dateNlNL 10 | -------------------------------------------------------------------------------- /src/locales/date/plPL.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { pl } from 'date-fns/locale' 3 | 4 | const datePlPL: NDateLocale = { 5 | name: 'pl-PL', 6 | locale: pl 7 | } 8 | 9 | export default datePlPL 10 | -------------------------------------------------------------------------------- /src/locales/date/ptBR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { ptBR } from 'date-fns/locale' 3 | 4 | const datePtBr: NDateLocale = { 5 | name: 'pt-BR', 6 | locale: ptBR 7 | } 8 | 9 | export default datePtBr 10 | -------------------------------------------------------------------------------- /src/locales/date/ruRU.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { ru } from 'date-fns/locale' 3 | 4 | const dateRuRU: NDateLocale = { 5 | name: 'ru-RU', 6 | locale: ru 7 | } 8 | 9 | export default dateRuRU 10 | -------------------------------------------------------------------------------- /src/locales/date/skSK.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { sk } from 'date-fns/locale' 3 | 4 | const dateSkSK: NDateLocale = { 5 | name: 'sk-SK', 6 | locale: sk 7 | } 8 | 9 | export default dateSkSK 10 | -------------------------------------------------------------------------------- /src/locales/date/svSE.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { sv } from 'date-fns/locale' 3 | 4 | const dateSvSE: NDateLocale = { 5 | name: 'sv-SE', 6 | locale: sv 7 | } 8 | 9 | export default dateSvSE 10 | -------------------------------------------------------------------------------- /src/locales/date/thTH.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { th } from 'date-fns/locale' 3 | 4 | const dateThTH: NDateLocale = { 5 | name: 'th-TH', 6 | locale: th 7 | } 8 | 9 | export default dateThTH 10 | -------------------------------------------------------------------------------- /src/locales/date/trTR.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { tr } from 'date-fns/locale' 3 | 4 | const dateTrTR: NDateLocale = { 5 | name: 'tr-TR', 6 | locale: tr 7 | } 8 | 9 | export default dateTrTR 10 | -------------------------------------------------------------------------------- /src/locales/date/ugCN.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { ug } from 'date-fns/locale' 3 | 4 | const dateUgCN: NDateLocale = { 5 | name: 'ug-CN', 6 | locale: ug 7 | } 8 | 9 | export default dateUgCN 10 | -------------------------------------------------------------------------------- /src/locales/date/ukUA.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { uk } from 'date-fns/locale' 3 | 4 | const dateUkUA: NDateLocale = { 5 | name: 'uk-UA', 6 | locale: uk 7 | } 8 | 9 | export default dateUkUA 10 | -------------------------------------------------------------------------------- /src/locales/date/uzUZ.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { uz } from 'date-fns/locale' 3 | 4 | const dateUzUZ: NDateLocale = { 5 | name: 'uz-UZ', 6 | locale: uz 7 | } 8 | 9 | export default dateUzUZ 10 | -------------------------------------------------------------------------------- /src/locales/date/viVN.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { vi } from 'date-fns/locale' 3 | 4 | const dateVi: NDateLocale = { 5 | name: 'vi-VN', 6 | locale: vi 7 | } 8 | 9 | export default dateVi 10 | -------------------------------------------------------------------------------- /src/locales/date/zhCN.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { zhCN } from 'date-fns/locale' 3 | 4 | const dateZhCN: NDateLocale = { 5 | name: 'zh-CN', 6 | locale: zhCN 7 | } 8 | 9 | export default dateZhCN 10 | -------------------------------------------------------------------------------- /src/locales/date/zhTW.ts: -------------------------------------------------------------------------------- 1 | import type { NDateLocale } from './enUS' 2 | import { zhTW } from 'date-fns/locale' 3 | 4 | const datezhTW: NDateLocale = { 5 | name: 'zh-TW', 6 | locale: zhTW 7 | } 8 | 9 | export default datezhTW 10 | -------------------------------------------------------------------------------- /src/log/demos/enUS/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Rows 3 | 4 | Use `rows` to change the size of log. 5 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/log/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 行数 3 | 4 | 使用 `rows` 来设定 Log 的尺寸。 5 | 6 | 7 | 18 | -------------------------------------------------------------------------------- /src/log/index.ts: -------------------------------------------------------------------------------- 1 | export { logProps, default as NLog } from './src/Log' 2 | export type { LogInst, LogProps } from './src/Log' 3 | -------------------------------------------------------------------------------- /src/log/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { LogInjection } from './Log' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const logInjectionKey = createInjectionKey('n-log') 5 | -------------------------------------------------------------------------------- /src/log/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as logDark } from './dark' 2 | export { default as logLight } from './light' 3 | export type { LogTheme, LogThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/marquee/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 在跑马灯中输入文字: 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/marquee/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NMarquee } from './src/Marquee' 2 | export type * from './src/public-types' 3 | -------------------------------------------------------------------------------- /src/marquee/src/public-types.ts: -------------------------------------------------------------------------------- 1 | export type { MarqueeProps } from './props' 2 | -------------------------------------------------------------------------------- /src/marquee/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { MarqueeTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const marqueeDark: MarqueeTheme = { 6 | name: 'Marquee', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default marqueeDark 12 | -------------------------------------------------------------------------------- /src/marquee/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as marqueeDark } from './dark' 2 | export { default as marqueeLight } from './light' 3 | export type { MarqueeTheme, MarqueeThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/marquee/tests/Marquee.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from '@vue/test-utils' 2 | import { NMarquee } from '../index' 3 | 4 | describe('n-marquee', () => { 5 | it('should work with import on demand', () => { 6 | mount(NMarquee) 7 | }) 8 | }) 9 | -------------------------------------------------------------------------------- /src/mention/demos/enUS/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Validation status 3 | 4 | Validation status can be applied outside form. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/mention/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/mention/index.ts: -------------------------------------------------------------------------------- 1 | export type { MentionInst, MentionOption } from './src/interface' 2 | export { mentionProps, default as NMention } from './src/Mention' 3 | export type { MentionProps, MentionSlots } from './src/Mention' 4 | -------------------------------------------------------------------------------- /src/mention/src/interface.ts: -------------------------------------------------------------------------------- 1 | import type { SelectBaseOption } from '../../select/src/interface' 2 | 3 | export type MentionOption = SelectBaseOption 4 | 5 | export interface MentionInst { 6 | focus: () => void 7 | blur: () => void 8 | } 9 | -------------------------------------------------------------------------------- /src/mention/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as mentionDark } from './dark' 2 | export { default as mentionLight } from './light' 3 | export type { MentionTheme, MentionThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/menu/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | MenuDividerOption, 3 | MenuGroupOption, 4 | MenuInst, 5 | MenuNodeProps, 6 | MenuOption 7 | } from './src/interface' 8 | export { menuProps, default as NMenu } from './src/Menu' 9 | export type { MenuProps } from './src/Menu' 10 | -------------------------------------------------------------------------------- /src/menu/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as menuDark } from './dark' 2 | export { default as menuLight } from './light' 3 | export type { MenuTheme, MenuThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/message/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cE, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('message', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `, [ 7 | cE('close', ` 8 | margin: 0 10px 0 0; 9 | `), 10 | cE('icon', ` 11 | margin: 0 0 0 10px; 12 | `) 13 | ]) 14 | ]) 15 | -------------------------------------------------------------------------------- /src/message/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | margin: '0 0 8px 0', 3 | padding: '10px 20px', 4 | maxWidth: '720px', 5 | minWidth: '420px', 6 | iconMargin: '0 10px 0 0', 7 | closeMargin: '0 0 0 10px', 8 | closeSize: '20px', 9 | closeIconSize: '16px', 10 | iconSize: '20px', 11 | fontSize: '14px' 12 | } 13 | -------------------------------------------------------------------------------- /src/message/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { MessageTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const messageDark: MessageTheme = { 6 | name: 'Message', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default messageDark 12 | -------------------------------------------------------------------------------- /src/message/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as messageDark } from './dark' 2 | export { default as messageLight } from './light' 3 | export type { MessageTheme, MessageThemeVars } from './light' 4 | export { messageRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/message/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const messageRtl: RtlItem = { 5 | name: 'Message', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/modal/demos/zhCN/dark-7-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # pop debug 2 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/modal/demos/zhCN/dark-8-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # pop debug 3 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/modal/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as modalDark } from './dark' 2 | export { default as modalLight } from './light' 3 | export type { ModalTheme, ModalThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/notification/src/context.ts: -------------------------------------------------------------------------------- 1 | import type { NotificationProviderInjection } from './NotificationProvider' 2 | import { createInjectionKey } from '../../_utils' 3 | 4 | export const notificationProviderInjectionKey 5 | = createInjectionKey('n-notification-provider') 6 | -------------------------------------------------------------------------------- /src/notification/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | closeMargin: '16px 12px', 3 | closeSize: '20px', 4 | closeIconSize: '16px', 5 | width: '365px', 6 | padding: '16px', 7 | titleFontSize: '16px', 8 | metaFontSize: '12px', 9 | descriptionFontSize: '12px' 10 | } 11 | -------------------------------------------------------------------------------- /src/notification/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as notificationDark } from './dark' 2 | export { default as notificationLight } from './light' 3 | export type { NotificationTheme, NotificationThemeVars } from './light' 4 | export { notificationRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/notification/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const notificationRtl: RtlItem = { 5 | name: 'Notification', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/number-animation/index.ts: -------------------------------------------------------------------------------- 1 | export { 2 | default as NNumberAnimation, 3 | numberAnimationProps 4 | } from './src/NumberAnimation' 5 | export type { NumberAnimationProps } from './src/NumberAnimation' 6 | export type { NumberAnimationInst } from './src/NumberAnimation' 7 | -------------------------------------------------------------------------------- /src/page-header/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NPageHeader, pageHeaderProps } from './src/PageHeader' 2 | export type { PageHeaderProps, PageHeaderSlots } from './src/PageHeader' 3 | -------------------------------------------------------------------------------- /src/page-header/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | titleFontSize: '18px', 3 | backSize: '22px' 4 | } 5 | -------------------------------------------------------------------------------- /src/page-header/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { PageHeaderTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | export const pageHeaderDark: PageHeaderTheme = { 6 | name: 'PageHeader', 7 | common: commonDark, 8 | self 9 | } 10 | -------------------------------------------------------------------------------- /src/page-header/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { pageHeaderDark } from './dark' 2 | export { pageHeaderLight } from './light' 3 | export type { PageHeaderTheme, PageHeaderThemeVars } from './light' 4 | export { default as pageHeaderRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/page-header/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import rtlStyle from '../src/styles/rtl.cssr' 2 | 3 | export default { 4 | name: 'PageHeader', 5 | style: rtlStyle 6 | } 7 | -------------------------------------------------------------------------------- /src/pagination/demos/enUS/prev.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Customize the previous and next button 3 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /src/pagination/demos/zhCN/display-order.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 展示顺序 3 | 4 | 你可以通过 `display-order` 来调整展示顺序。 5 | 6 | 7 | 15 | -------------------------------------------------------------------------------- /src/pagination/demos/zhCN/item-count.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 使用元素个数控制分页 3 | 4 | 有的时候你不想传递 `page-count`,这个时候你可以设定 `item-count` 和 `page-size`。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/pagination/demos/zhCN/prev.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 自定义上一步和下一步 3 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /src/pagination/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | PaginationInfo, 3 | PaginationRenderLabel, 4 | PaginationSizeOption 5 | } from './src/interface' 6 | export { default as NPagination, paginationProps } from './src/Pagination' 7 | export type { PaginationProps, PaginationSlots } from './src/Pagination' 8 | -------------------------------------------------------------------------------- /src/pagination/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as paginationDark } from './dark' 2 | export { default as paginationLight } from './light' 3 | export type { PaginationTheme, PaginationThemeVars } from './light' 4 | export { paginationRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/popconfirm/demos/enUS/no-icon.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No icon 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popconfirm/demos/zhCN/no-icon.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 没有图标 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popconfirm/index.ts: -------------------------------------------------------------------------------- 1 | export type { PopconfirmInst } from './src/interface' 2 | export { default as NPopconfirm, popconfirmProps } from './src/Popconfirm' 3 | export type { PopconfirmProps, PopconfirmSlots } from './src/Popconfirm' 4 | -------------------------------------------------------------------------------- /src/popconfirm/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | iconSize: '22px' 3 | } 4 | -------------------------------------------------------------------------------- /src/popconfirm/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as popconfirmDark } from './dark' 2 | export { default as popconfirmLight } from './light' 3 | export type { PopconfirmTheme, PopconfirmThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/popover/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popover/demos/enUS/no-arrow.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No arrow 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popover/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popover/demos/zhCN/no-arrow.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 不要箭头 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/popover/index.ts: -------------------------------------------------------------------------------- 1 | export type { PopoverInst, PopoverTrigger } from './src/interface' 2 | export { default as NPopover, popoverProps } from './src/Popover' 3 | export type { PopoverProps, PopoverSlots } from './src/Popover' 4 | export type { FollowerPlacement as PopoverPlacement } from 'vueuc' 5 | -------------------------------------------------------------------------------- /src/popover/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | space: '6px', 3 | spaceArrow: '10px', 4 | arrowOffset: '10px', 5 | arrowOffsetVertical: '10px', 6 | arrowHeight: '6px', 7 | padding: '8px 14px' 8 | } 9 | -------------------------------------------------------------------------------- /src/popover/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { PopoverTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const popoverDark: PopoverTheme = { 6 | name: 'Popover', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default popoverDark 12 | -------------------------------------------------------------------------------- /src/popover/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as popoverDark } from './dark' 2 | export { default as popoverLight } from './light' 3 | export type { PopoverTheme, PopoverThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/popselect/index.ts: -------------------------------------------------------------------------------- 1 | export type { PopselectInst } from './src/interface' 2 | export { default as NPopselect, popselectProps } from './src/Popselect' 3 | export type { PopselectProps, PopselectSlots } from './src/Popselect' 4 | -------------------------------------------------------------------------------- /src/popselect/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB } from '../../../_utils/cssr' 2 | 3 | // --n-menu-box-shadow 4 | export default cB('popselect-menu', ` 5 | box-shadow: var(--n-menu-box-shadow); 6 | `) 7 | -------------------------------------------------------------------------------- /src/popselect/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as popselectDark } from './dark' 2 | export { default as popselectLight } from './light' 3 | export type { PopselectTheme, PopselectThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/preset.ts: -------------------------------------------------------------------------------- 1 | import * as components from './components' 2 | import create from './create' 3 | 4 | const naive = create({ 5 | components: Object.keys(components).map( 6 | key => components[key as keyof typeof components] 7 | ) 8 | }) 9 | 10 | export default naive 11 | export const install = naive.install 12 | -------------------------------------------------------------------------------- /src/progress/demos/enUS/circle-offset.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Offset 3 | 4 | Circular progress can have `offset-degree`. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/progress/demos/enUS/processing.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Processing 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/progress/demos/zhCN/circle-offset.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 偏移 3 | 4 | 环状的进度可以偏移。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/progress/demos/zhCN/processing.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 进行时 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/progress/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NProgress, progressProps } from './src/Progress' 2 | export type { ProgressProps } from './src/Progress' 3 | export type * from './src/public-types' 4 | -------------------------------------------------------------------------------- /src/progress/src/public-types.ts: -------------------------------------------------------------------------------- 1 | export type ProgressStatus = 2 | | 'success' 3 | | 'error' 4 | | 'warning' 5 | | 'info' 6 | | 'default' 7 | export interface ProgressGradient { 8 | stops: string[] 9 | } 10 | -------------------------------------------------------------------------------- /src/progress/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as progressDark } from './dark' 2 | export { default as progressLight } from './light' 3 | export type { ProgressTheme, ProgressThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/qr-code/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NQrCode, qrCodeProps } from './src/QrCode' 2 | export type { QrCodeProps } from './src/QrCode' 3 | -------------------------------------------------------------------------------- /src/qr-code/src/styles/index.cssr.ts: -------------------------------------------------------------------------------- 1 | import { c, cB } from '../../../_utils/cssr' 2 | 3 | // vars: 4 | // --n-border-radius 5 | export default c([ 6 | cB('qr-code', ` 7 | background: #fff; 8 | border-radius: var(--n-border-radius); 9 | display: inline-flex; 10 | `) 11 | ]) 12 | -------------------------------------------------------------------------------- /src/qr-code/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as qrcodeDark } from './dark' 2 | export { default as qrcodeLight } from './light' 3 | export type { QrCodeTheme, QrCodeThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/radio/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type OnUpdateValue = (value: string & number & boolean) => void 2 | 3 | export type OnUpdateValueImpl = (value: string | number | boolean) => void 4 | -------------------------------------------------------------------------------- /src/radio/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | radioSizeSmall: '14px', 3 | radioSizeMedium: '16px', 4 | radioSizeLarge: '18px', 5 | labelPadding: '0 8px', 6 | labelFontWeight: '400' 7 | } 8 | -------------------------------------------------------------------------------- /src/radio/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as radioDark } from './dark' 2 | export { default as radioLight } from './light' 3 | export type { RadioTheme, RadioThemeVars } from './light' 4 | export { radioRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/radio/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const radioRtl: RtlItem = { 5 | name: 'Radio', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/rate/demos/enUS/allow-half.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Allow Selecting Half Star 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/enUS/clearable.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Clearable 3 | 4 | After `clearable` is set, you can click at current value's corresponding value to reset value to `null`. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/rate/demos/enUS/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Color 3 | 4 | This can end in disaster. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/rate/demos/enUS/readonly.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Readonly 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/allow-half.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 允许半颗 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/clearable.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 可清空 3 | 4 | 设定 `clearable` 后 `n-rate` 可清空,在你点击当前值对应的图标后值会被设为 `null`。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 颜色 3 | 4 | 灾难就是这么发生的。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/readonly.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 只读 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/rate/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 尺寸 3 | 4 | 有 `small`、`medium` 和 `large` 尺寸。 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/rate/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NRate, rateProps } from './src/Rate' 2 | export type { RateProps } from './src/Rate' 3 | -------------------------------------------------------------------------------- /src/rate/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type RateOnUpdateValue = (value: number & null) => void 2 | export type RateOnUpdateValueImpl = (value: number | null) => void 3 | -------------------------------------------------------------------------------- /src/rate/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as rateDark } from './dark' 2 | export { default as rateLight } from './light' 3 | export type { RateTheme, RateThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/result/demos/enUS/error.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Error 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/enUS/success.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Success 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/error.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 错误 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/info.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 信息 3 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/s-403.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 403 3 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/s-404.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 404 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/s-418.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 418 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/s-500.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 500 3 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 尺寸 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/success.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 成功 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/result/demos/zhCN/warning.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 警告 3 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /src/result/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NResult, resultProps } from './src/Result' 2 | export type { ResultProps, ResultSlots } from './src/Result' 3 | -------------------------------------------------------------------------------- /src/result/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ResultTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const resultDark: ResultTheme = { 6 | name: 'Result', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default resultDark 12 | -------------------------------------------------------------------------------- /src/result/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as resultDark } from './dark' 2 | export { default as resultLight } from './light' 3 | export type { ResultTheme, ResultThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/scrollbar/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NScrollbar, scrollbarProps } from './src/Scrollbar' 2 | export type { ScrollbarInst, ScrollbarProps } from './src/Scrollbar' 3 | -------------------------------------------------------------------------------- /src/select/demos/enUS/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Validation status 3 | 4 | Validation status can be applied outside form. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/select/demos/zhCN/empty-debug.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Empty debug 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/select/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/select/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as selectDark } from './dark' 2 | export { default as selectLight } from './light' 3 | export type { SelectTheme, SelectThemeVars } from './light' 4 | export { selectRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/shims-vue.d.ts: -------------------------------------------------------------------------------- 1 | // shims-vue.d.ts 2 | declare module '*.vue' { 3 | import type { DefineComponent } from 'vue' 4 | 5 | const component: DefineComponent< 6 | Record, 7 | Record, 8 | any 9 | > 10 | export default component 11 | } 12 | -------------------------------------------------------------------------------- /src/skeleton/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic usage 3 | 4 | Use `text` to create text skeleton. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/skeleton/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 使用 `text` 设定文本骨架。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/skeleton/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSkeleton, skeletonProps } from './src/Skeleton' 2 | export type { SkeletonProps } from './src/Skeleton' 3 | -------------------------------------------------------------------------------- /src/skeleton/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { skeletonDark } from './dark' 2 | export { skeletonLight } from './light' 3 | export type { SkeletonTheme, SkeletonThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/slider/demos/enUS/disable-tooltip.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disable tooltip 3 | 4 | Set `:tooltip="false"` to disabled the tooltip. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/slider/demos/enUS/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Disabled 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/slider/demos/enUS/show-tooltip.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Always show tooltip 3 | 4 | Set `show-tooltip` to always show tooltip. 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/slider/demos/zhCN/disable-tooltip.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁用 Tooltip 3 | 4 | 设定 `:tooltip="false"` 来禁用 tooltip。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/slider/demos/zhCN/disabled.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 禁用 3 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /src/slider/demos/zhCN/show-tooltip.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 始终显示 Tooltip 3 | 4 | 设定 `show-tooltip` 来让 Tooltip 被一直显示。 5 | 6 | 7 | 10 | -------------------------------------------------------------------------------- /src/slider/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSlider, sliderProps } from './src/Slider' 2 | export type { SliderProps, SliderSlots } from './src/Slider' 3 | -------------------------------------------------------------------------------- /src/slider/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type OnUpdateValueImpl = (value: number | number[]) => void 2 | -------------------------------------------------------------------------------- /src/slider/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | railHeight: '4px', 3 | railWidthVertical: '4px', 4 | handleSize: '18px', 5 | dotHeight: '8px', 6 | dotWidth: '8px', 7 | dotBorderRadius: '4px' 8 | } 9 | -------------------------------------------------------------------------------- /src/slider/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as sliderDark } from './dark' 2 | export { default as sliderLight } from './light' 3 | export type { SliderTheme, SliderThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/space/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/space/demos/enUS/center.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # From Center 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/enUS/from-end.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # From End 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/enUS/reverse.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Reverse 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/enUS/space-around.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Space Around 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/enUS/space-between.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Space Between 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/enUS/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Vertical 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/center.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 从中间 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/from-end.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 从尾部 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/reverse.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 反向 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/space-around.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 空间围绕 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/space-between.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 间隙 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/demos/zhCN/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 垂直 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/space/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSpace, spaceProps } from './src/Space' 2 | export type { SpaceProps } from './src/Space' 3 | -------------------------------------------------------------------------------- /src/space/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('space', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | `) 7 | ]) 8 | -------------------------------------------------------------------------------- /src/space/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | gapSmall: '4px 8px', 3 | gapMedium: '8px 12px', 4 | gapLarge: '12px 16px' 5 | } 6 | -------------------------------------------------------------------------------- /src/space/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { SpaceTheme } from './light' 2 | import commonVars from './_common' 3 | 4 | const spaceDark: SpaceTheme = { 5 | name: 'Space', 6 | self() { 7 | return commonVars 8 | } 9 | } 10 | 11 | export default spaceDark 12 | -------------------------------------------------------------------------------- /src/space/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as spaceDark } from './dark' 2 | export { default as spaceLight } from './light' 3 | export type { SpaceTheme, SpaceThemeVars } from './light' 4 | export { spaceRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/space/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const spaceRtl: RtlItem = { 5 | name: 'Space', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/spin/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | Here are `small`, `medium` and `large` spins. 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/spin/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 有 `small`、`medium` 和 `large` 的 Spin. 5 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /src/spin/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSpin, spinProps } from './src/Spin' 2 | export type { SpinProps, SpinSlots } from './src/Spin' 3 | -------------------------------------------------------------------------------- /src/spin/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { SpinTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const spinDark: SpinTheme = { 6 | name: 'Spin', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default spinDark 12 | -------------------------------------------------------------------------------- /src/spin/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as spinDark } from './dark' 2 | export { default as spinLight } from './light' 3 | export type { SpinTheme, SpinThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/split/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /src/split/demos/zhCN/vertical.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 垂直布局 3 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /src/split/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSplit, splitProps } from './src/Split' 2 | export type { SplitProps, SplitSlots } from './src/Split' 3 | export type { SplitOnUpdateSize } from './src/types' 4 | -------------------------------------------------------------------------------- /src/split/src/types.ts: -------------------------------------------------------------------------------- 1 | export type SplitOnUpdateSize = (size: string & number) => void 2 | -------------------------------------------------------------------------------- /src/split/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { SplitTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | 4 | const splitDark: SplitTheme = { 5 | name: 'Split', 6 | common: commonDark 7 | } 8 | 9 | export default splitDark 10 | -------------------------------------------------------------------------------- /src/split/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as splitDark } from './dark' 2 | export { default as splitLight } from './light' 3 | export type { SplitTheme, SplitThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/statistic/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NStatistic, statisticProps } from './src/Statistic' 2 | export type { StatisticProps, StatisticSlots } from './src/Statistic' 3 | -------------------------------------------------------------------------------- /src/statistic/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { StatisticTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const statisticDark: StatisticTheme = { 6 | name: 'Statistic', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default statisticDark 12 | -------------------------------------------------------------------------------- /src/statistic/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as statisticDark } from './dark' 2 | export { default as statisticLight } from './light' 3 | export type { StatisticTheme, StatisticThemeVars } from './light' 4 | export { statisticRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/statistic/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const statisticRtl: RtlItem = { 5 | name: 'Statistic', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/steps/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NStep, stepProps } from './src/Step' 2 | export type { StepProps, StepSlots } from './src/Step' 3 | export { default as NSteps, stepsProps } from './src/Steps' 4 | export type { StepsProps, StepsSlots } from './src/Steps' 5 | -------------------------------------------------------------------------------- /src/steps/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { StepsTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const stepsDark: StepsTheme = { 6 | name: 'Steps', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default stepsDark 12 | -------------------------------------------------------------------------------- /src/steps/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as stepsDark } from './dark' 2 | export { default as stepsLight } from './light' 3 | export type { StepsTheme, StepsThemeVars } from './light' 4 | export { stepsRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/steps/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const stepsRtl: RtlItem = { 5 | name: 'Steps', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/switch/demos/enUS/shape.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Shape 3 | 4 | Switch can have square shape. 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/switch/demos/enUS/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Size 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/switch/demos/zhCN/content.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 内容 3 | 4 | 向开关中加入内容。 5 | 6 | 7 | 17 | -------------------------------------------------------------------------------- /src/switch/demos/zhCN/shape.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 形状 3 | 4 | 开关可以设为方形。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/switch/demos/zhCN/size.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 尺寸 3 | 4 | 5 | 12 | -------------------------------------------------------------------------------- /src/switch/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NSwitch, switchProps } from './src/Switch' 2 | export type { SwitchProps, SwitchSlots } from './src/Switch' 3 | -------------------------------------------------------------------------------- /src/switch/src/interface.ts: -------------------------------------------------------------------------------- 1 | export type OnUpdateValue = (value: string & number & boolean) => void 2 | export type OnUpdateValueImpl = (value: string | number | boolean) => void 3 | -------------------------------------------------------------------------------- /src/switch/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as switchDark } from './dark' 2 | export { default as switchLight } from './light' 3 | export type { SwitchTheme, SwitchThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/table/src/Tbody.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Tbody', 5 | render() { 6 | return {this.$slots} 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/table/src/Td.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Td', 5 | render() { 6 | return {this.$slots} 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/table/src/Th.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Th', 5 | render() { 6 | return {this.$slots} 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/table/src/Thead.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Thead', 5 | render() { 6 | return {this.$slots} 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/table/src/Tr.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Tr', 5 | render() { 6 | return {this.$slots} 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/table/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | thPaddingSmall: '6px', 3 | thPaddingMedium: '12px', 4 | thPaddingLarge: '12px', 5 | tdPaddingSmall: '6px', 6 | tdPaddingMedium: '12px', 7 | tdPaddingLarge: '12px' 8 | } 9 | -------------------------------------------------------------------------------- /src/table/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { TableTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const tableDark: TableTheme = { 6 | name: 'Table', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default tableDark 12 | -------------------------------------------------------------------------------- /src/table/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as tableDark } from './dark' 2 | export { default as tableLight } from './light' 3 | export type { TableTheme, TableThemeVars } from './light' 4 | export { tableRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/table/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const tableRtl: RtlItem = { 5 | name: 'Table', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/tabs/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as tabsDark } from './dark' 2 | export { default as tabsLight } from './light' 3 | export type { TabsTheme, TabsThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/tag/demos/enUS/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Color 3 | 4 | Use a color object to customize color. 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/tag/demos/zhCN/color.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 颜色 3 | 4 | 使用一个颜色对象定制标签的颜色。 5 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /src/tag/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NTag, tagProps } from './src/Tag' 2 | export type { TagProps, TagSlots } from './src/Tag' 3 | -------------------------------------------------------------------------------- /src/tag/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as tagDark } from './dark' 2 | export { default as tagLight } from './light' 3 | export type { TagTheme, TagThemeVars } from './light' 4 | export { tagRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/tag/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const tagRtl: RtlItem = { 5 | name: 'Tag', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/theme-editor/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NThemeEditor } from './src/ThemeEditor' 2 | -------------------------------------------------------------------------------- /src/themes/index.ts: -------------------------------------------------------------------------------- 1 | export { darkTheme } from './dark' 2 | export { lightTheme } from './light' 3 | export { createTheme } from './utils' 4 | -------------------------------------------------------------------------------- /src/themes/interface.ts: -------------------------------------------------------------------------------- 1 | import type { GlobalTheme } from '../config-provider' 2 | 3 | export type BuiltInGlobalTheme = Omit< 4 | Required, 5 | 'InternalSelectMenu' | 'InternalSelection' 6 | > 7 | -------------------------------------------------------------------------------- /src/thing/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NThing, thingProps } from './src/Thing' 2 | export type { ThingProps, ThingSlots } from './src/Thing' 3 | -------------------------------------------------------------------------------- /src/thing/src/styles/rtl.cssr.ts: -------------------------------------------------------------------------------- 1 | import { cB, cM } from '../../../_utils/cssr' 2 | 3 | export default cB('thing', [ 4 | cM('rtl', ` 5 | direction: rtl; 6 | text-align: right; 7 | `, [ 8 | cB('thing-avatar', ` 9 | margin-left: 12px; 10 | margin-right: 0; 11 | `) 12 | ]) 13 | ]) 14 | -------------------------------------------------------------------------------- /src/thing/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { ThingTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const thingDark: ThingTheme = { 6 | name: 'Thing', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default thingDark 12 | -------------------------------------------------------------------------------- /src/thing/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as thingDark } from './dark' 2 | export { default as thingLight } from './light' 3 | export type { ThingTheme, ThingThemeVars } from './light' 4 | export { thingRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/time-picker/demos/enUS/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Basic 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/time-picker/demos/enUS/hours12.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 12 hours 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/time-picker/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/time-picker/demos/zhCN/hours12.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 12 小时 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /src/time-picker/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/time-picker/index.ts: -------------------------------------------------------------------------------- 1 | export type { TimePickerInst } from './src/interface' 2 | export { default as NTimePicker, timePickerProps } from './src/TimePicker' 3 | export type { TimePickerProps, TimePickerSlots } from './src/TimePicker' 4 | -------------------------------------------------------------------------------- /src/time-picker/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | itemFontSize: '12px', 3 | itemHeight: '36px', 4 | itemWidth: '52px', 5 | panelActionPadding: '8px 0' 6 | } 7 | -------------------------------------------------------------------------------- /src/time-picker/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as timePickerDark } from './dark' 2 | export { default as timePickerLight } from './light' 3 | export type { TimePickerTheme, TimePickerThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/time/demos/enUS/timezone.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Time zone 3 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /src/time/demos/zhCN/timezone.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 时区 3 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /src/time/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NTime, timeProps } from './src/Time' 2 | export type { TimeProps } from './src/Time' 3 | -------------------------------------------------------------------------------- /src/timeline/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NTimeline, timelineProps } from './src/Timeline' 2 | export type { TimelineProps } from './src/Timeline' 3 | export { default as NTimelineItem, timelineItemProps } from './src/TimelineItem' 4 | export type { TimelineItemProps, TimelineItemSlots } from './src/TimelineItem' 5 | -------------------------------------------------------------------------------- /src/timeline/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | titleMarginMedium: '0 0 6px 0', 3 | titleMarginLarge: '-2px 0 6px 0', 4 | titleFontSizeMedium: '14px', 5 | titleFontSizeLarge: '16px', 6 | iconSizeMedium: '14px', 7 | iconSizeLarge: '14px' 8 | } 9 | -------------------------------------------------------------------------------- /src/timeline/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as timelineDark } from './dark' 2 | export { default as timelineLight } from './light' 3 | export type { TimelineTheme, TimelineThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/tooltip/demos/enUS/arrow.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # No arrow 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/tooltip/demos/enUS/placement.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # Placement 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/tooltip/demos/zhCN/arrow.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 不要箭头 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/tooltip/demos/zhCN/basic.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 基础用法 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/tooltip/demos/zhCN/placement.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 位置 3 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /src/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NTooltip, tooltipProps } from './src/Tooltip' 2 | export type { TooltipInst, TooltipProps, TooltipSlots } from './src/Tooltip' 3 | -------------------------------------------------------------------------------- /src/tooltip/styles/_common.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | padding: '8px 14px' 3 | } 4 | -------------------------------------------------------------------------------- /src/tooltip/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as tooltipDark } from './dark' 2 | export { default as tooltipLight } from './light' 3 | export type { TooltipTheme, TooltipThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/transfer/index.ts: -------------------------------------------------------------------------------- 1 | export type { 2 | Option as TransferOption, 3 | TransferRenderSourceLabel, 4 | TransferRenderSourceList, 5 | TransferRenderTargetLabel 6 | } from './src/interface' 7 | export { default as NTransfer, transferProps } from './src/Transfer' 8 | export type { TransferProps } from './src/Transfer' 9 | -------------------------------------------------------------------------------- /src/transfer/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as transferDark } from './dark' 2 | export { default as transferLight } from './light' 3 | export type { TransferTheme, TransferThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/tree-select/demos/zhCN/status.demo.vue: -------------------------------------------------------------------------------- 1 | 2 | # 验证状态 3 | 4 | 输入的验证状态可以脱离表单使用。 5 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /src/tree-select/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as treeSelectDark } from './dark' 2 | export { default as treeSelectLight } from './light' 3 | export type { TreeSelectTheme, TreeSelectThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/tree/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as treeDark } from './dark' 2 | export { default as treeLight } from './light' 3 | export type { TreeTheme, TreeThemeVars } from './light' 4 | export { treeRtl } from './rtl' 5 | -------------------------------------------------------------------------------- /src/tree/styles/rtl.ts: -------------------------------------------------------------------------------- 1 | import type { RtlItem } from '../../config-provider/src/internal-interface' 2 | import rtlStyle from '../src/styles/rtl.cssr' 3 | 4 | export const treeRtl: RtlItem = { 5 | name: 'Tree', 6 | style: rtlStyle 7 | } 8 | -------------------------------------------------------------------------------- /src/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "exclude": ["./**/*.spec.*"], 4 | "compilerOptions": { 5 | "rootDir": ".", 6 | "outDir": "../lib", 7 | "module": "CommonJS", 8 | "target": "ES6", 9 | "jsx": "react" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "exclude": ["./**/*.spec.*"], 4 | "compilerOptions": { 5 | "rootDir": ".", 6 | "outDir": "../es", 7 | "module": "ES6", 8 | "target": "ES6", 9 | "jsx": "react" 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/typography/src/headers.ts: -------------------------------------------------------------------------------- 1 | import createHeader from './create-header' 2 | 3 | export const NH1 = createHeader('1') 4 | export const NH2 = createHeader('2') 5 | export const NH3 = createHeader('3') 6 | export const NH4 = createHeader('4') 7 | export const NH5 = createHeader('5') 8 | export const NH6 = createHeader('6') 9 | -------------------------------------------------------------------------------- /src/typography/src/li.tsx: -------------------------------------------------------------------------------- 1 | import { defineComponent, h } from 'vue' 2 | 3 | export default defineComponent({ 4 | name: 'Li', 5 | render() { 6 | return
  • {this.$slots}
  • 7 | } 8 | }) 9 | -------------------------------------------------------------------------------- /src/typography/styles/dark.ts: -------------------------------------------------------------------------------- 1 | import type { TypographyTheme } from './light' 2 | import { commonDark } from '../../_styles/common' 3 | import { self } from './light' 4 | 5 | const typographyDark: TypographyTheme = { 6 | name: 'Typography', 7 | common: commonDark, 8 | self 9 | } 10 | 11 | export default typographyDark 12 | -------------------------------------------------------------------------------- /src/typography/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as typographyDark } from './dark' 2 | export { default as typographyLight } from './light' 3 | export type { TypographyTheme, TypographyThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/upload/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as uploadDark } from './dark' 2 | export { default as uploadLight } from './light' 3 | export type { UploadTheme, UploadThemeVars } from './light' 4 | -------------------------------------------------------------------------------- /src/version.ts: -------------------------------------------------------------------------------- 1 | export default '2.41.0' 2 | -------------------------------------------------------------------------------- /src/virtual-list/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NVirtualList, virtualListProps } from './src/VirtualList' 2 | export type { VirtualListInst, VirtualListProps } from './src/VirtualList' 3 | -------------------------------------------------------------------------------- /src/watermark/index.ts: -------------------------------------------------------------------------------- 1 | export { default as NWatermark, watermarkProps } from './src/Watermark' 2 | export type { WatermarkProps } from './src/Watermark' 3 | -------------------------------------------------------------------------------- /src/watermark/styles/index.ts: -------------------------------------------------------------------------------- 1 | export { default as watermarkDark } from './dark' 2 | export { default as watermarkLight } from './light' 3 | export type { WatermarkTheme } from './light' 4 | -------------------------------------------------------------------------------- /themes/tusimple/.npmignore: -------------------------------------------------------------------------------- 1 | ~* 2 | *.tsbuildinfo -------------------------------------------------------------------------------- /themes/tusimple/src/index.ts: -------------------------------------------------------------------------------- 1 | export { default as TsConfigProvider } from './TsConfigProvider' 2 | export { useDialog } from './use-ts-dialog' 3 | export { useMessage } from './use-ts-message' 4 | -------------------------------------------------------------------------------- /themes/tusimple/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./lib", 6 | "module": "CommonJS", 7 | "target": "ES6", 8 | "jsx": "react" 9 | }, 10 | "references": [{ "path": "../../src/tsconfig.cjs.json" }] 11 | } 12 | -------------------------------------------------------------------------------- /themes/tusimple/tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "./src", 5 | "outDir": "./es", 6 | "module": "ES6", 7 | "target": "ES6", 8 | "jsx": "react" 9 | }, 10 | "references": [{ "path": "../../src/tsconfig.esm.json" }] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { 5 | "path": "./src/tsconfig.cjs.json" 6 | }, 7 | { 8 | "path": "./themes/tusimple/tsconfig.cjs.json" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.esbuild.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react", 5 | "jsxFactory": "h", 6 | "jsxFragmentFactory": "Fragment" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { 5 | "path": "./src/tsconfig.esm.json" 6 | }, 7 | { 8 | "path": "./themes/tusimple/tsconfig.esm.json" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /tsconfig.test.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "jsx": "react" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /umd-test/setupVue.js: -------------------------------------------------------------------------------- 1 | import * as Vue from 'vue' 2 | 3 | window.Vue = Vue 4 | -------------------------------------------------------------------------------- /vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }] 3 | } 4 | --------------------------------------------------------------------------------