├── .nvmrc ├── docs ├── public │ ├── .nojekyll │ ├── CORS │ ├── images │ │ ├── web.png │ │ ├── bit-l.png │ │ ├── qrcode.png │ │ ├── renren.png │ │ ├── vform.png │ │ ├── cloud-1.png │ │ ├── cloud-2.png │ │ ├── compo-1.png │ │ ├── compo-2.png │ │ ├── compo-3.png │ │ ├── figure-1.png │ │ ├── figure-2.png │ │ ├── hamburger.png │ │ ├── js-design.png │ │ ├── plant-1.png │ │ ├── plant-2.png │ │ ├── formmaking.png │ │ ├── jnpf_index.png │ │ ├── theme-intro.png │ │ ├── typography.png │ │ ├── element-demo.jpeg │ │ ├── intro-theme-b.png │ │ ├── vform-banner.png │ │ ├── js-design-banner.jpg │ │ ├── sponsors │ │ │ ├── MISBoot.png │ │ │ ├── jeeplus.png │ │ │ ├── buildadmin.png │ │ │ ├── jnpfsoft.jpg │ │ │ ├── buildadmin-l.png │ │ │ ├── fantasticadmin.png │ │ │ └── jeeplus_banner.jpg │ │ ├── theme-index-blue.png │ │ └── typography │ │ │ ├── term-arial.png │ │ │ ├── line-height.png │ │ │ ├── term-hiragino.png │ │ │ ├── term-pingfang.png │ │ │ ├── term-arial-dark.png │ │ │ ├── term-helvetica.png │ │ │ ├── term-microsoft.png │ │ │ ├── line-height-dark.png │ │ │ ├── term-hiragino-dark.png │ │ │ ├── term-pingfang-dark.png │ │ │ ├── term-helvetica-dark.png │ │ │ └── term-microsoft-dark.png │ ├── apple-touch-icon.png │ ├── mstile-150x150.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── sw.js │ └── browserconfig.xml ├── .vitepress │ ├── config │ │ ├── features.ts │ │ ├── index.ts │ │ └── analytics.ts │ ├── utils │ │ ├── types.ts │ │ └── lang.ts │ ├── env.d.ts │ ├── crowdin │ │ └── en-US │ │ │ ├── component │ │ │ ├── api-typing.json │ │ │ ├── last-update-at.json │ │ │ ├── skip-link.json │ │ │ ├── search.json │ │ │ ├── navbar.json │ │ │ ├── icons.json │ │ │ ├── translation.json │ │ │ ├── edit-link.json │ │ │ ├── changelog.json │ │ │ ├── footer.json │ │ │ ├── sponsor.json │ │ │ └── pwa.json │ │ │ └── pages │ │ │ ├── not-found.json │ │ │ └── sidebar.json │ ├── vitepress │ │ ├── styles │ │ │ ├── common │ │ │ │ └── index.scss │ │ │ ├── nav │ │ │ │ └── menu.scss │ │ │ ├── content │ │ │ │ └── hero-content.scss │ │ │ ├── app.scss │ │ │ ├── overlay.scss │ │ │ └── vars.scss │ │ ├── types.ts │ │ ├── components │ │ │ ├── dev │ │ │ │ ├── deprecated-tag.vue │ │ │ │ ├── version-tag.vue │ │ │ │ └── a11y-tag.vue │ │ │ ├── globals │ │ │ │ ├── vp-api-bool.vue │ │ │ │ ├── vp-api-number.vue │ │ │ │ ├── vp-api-string.vue │ │ │ │ └── vp-api-primitive.vue │ │ │ ├── vp-overlay.vue │ │ │ ├── icons │ │ │ │ ├── expand.vue │ │ │ │ └── dark.vue │ │ │ └── navbar │ │ │ │ └── vp-menu.vue │ │ ├── composables │ │ │ ├── dark.ts │ │ │ ├── fullscreen.ts │ │ │ ├── locale.ts │ │ │ ├── social-links.ts │ │ │ ├── navbar-locale.ts │ │ │ └── nav.ts │ │ └── constant.ts │ ├── plugins │ │ └── table-wrapper.ts │ └── dark-mode.js ├── en-US │ ├── resource │ │ └── index.md │ └── index.md ├── examples │ ├── empty │ │ ├── image-size.vue │ │ ├── basic-usage.vue │ │ ├── bottom-content.vue │ │ └── custom-image.vue │ ├── skeleton │ │ ├── animation.vue │ │ ├── configurable-rows.vue │ │ └── basic-usage.vue │ ├── calendar │ │ ├── range.vue │ │ ├── basic.vue │ │ └── customize.vue │ ├── pagination │ │ ├── background-color.vue │ │ ├── number-of-pagers.vue │ │ ├── small-pagination.vue │ │ └── auto-hide-pagination.vue │ ├── backtop │ │ └── basic.vue │ ├── affix │ │ ├── basic.vue │ │ └── fixed.vue │ ├── .eslintrc.json │ ├── alert │ │ ├── description.vue │ │ └── basic.vue │ ├── space │ │ ├── auto-wrapping.vue │ │ └── literal-type-spacer.vue │ ├── text │ │ ├── sizes.vue │ │ ├── truncated.vue │ │ └── basic.vue │ ├── tooltip │ │ ├── animations.vue │ │ ├── rich-content.vue │ │ └── html-content.vue │ ├── input │ │ ├── basic.vue │ │ ├── disabled.vue │ │ ├── clearable.vue │ │ ├── textarea.vue │ │ ├── password.vue │ │ └── formatter.vue │ ├── rate │ │ ├── allow-half.vue │ │ ├── clearable.vue │ │ ├── text.vue │ │ ├── sizes.vue │ │ └── readonly.vue │ ├── input-number │ │ ├── steps.vue │ │ ├── disabled.vue │ │ ├── step-strictly.vue │ │ ├── precision.vue │ │ ├── basic.vue │ │ └── size.vue │ ├── container │ │ ├── layout-hm.vue │ │ ├── layout-am.vue │ │ ├── layout-hmf.vue │ │ ├── layout-ahm.vue │ │ ├── layout-ham.vue │ │ └── layout-ahmf.vue │ ├── page-header │ │ ├── no-icon.vue │ │ ├── basic.vue │ │ ├── custom-icon.vue │ │ └── main-content.vue │ ├── popconfirm │ │ └── basic-usage.vue │ ├── steps │ │ ├── with-status.vue │ │ ├── vertical.vue │ │ ├── with-description.vue │ │ ├── centered.vue │ │ └── with-icon.vue │ ├── color-picker │ │ └── alpha.vue │ ├── divider │ │ ├── vertical-divider.vue │ │ └── basic-usage.vue │ ├── tooltip-v2 │ │ ├── render-to-root.vue │ │ ├── basic-usage.vue │ │ └── arrow.vue │ ├── switch │ │ ├── disabled.vue │ │ ├── loading.vue │ │ ├── custom-action-icon.vue │ │ └── basic.vue │ ├── tag │ │ └── basic.vue │ ├── tabs │ │ └── border-card.vue │ ├── time-select │ │ ├── basic.vue │ │ └── time-formats.vue │ ├── checkbox │ │ └── disabled.vue │ ├── link │ │ └── underline.vue │ ├── card │ │ ├── simple.vue │ │ └── shadow.vue │ ├── badge │ │ ├── customize.vue │ │ └── max.vue │ ├── button │ │ └── tag.vue │ ├── radio │ │ ├── disabled.vue │ │ └── radio-button-group.vue │ ├── message │ │ ├── grouping.vue │ │ ├── centered-content.vue │ │ └── raw-html.vue │ ├── avatar │ │ └── fallback.vue │ ├── notification │ │ ├── offsetting.vue │ │ └── no-close.vue │ └── drawer │ │ └── no-title.vue ├── index.md └── .gitignore ├── .env ├── packages ├── theme-chalk │ ├── src │ │ ├── sub-menu.scss │ │ ├── tab-pane.scss │ │ ├── tooltip.scss │ │ ├── collapse-item.scss │ │ ├── dropdown-item.scss │ │ ├── dropdown-menu.scss │ │ ├── form-item.scss │ │ ├── menu-item.scss │ │ ├── breadcrumb-item.scss │ │ ├── config-provider.scss │ │ ├── infinite-scroll.scss │ │ ├── menu-item-group.scss │ │ ├── collapse-transition.scss │ │ ├── base.scss │ │ ├── affix.scss │ │ ├── checkbox-group.scss │ │ ├── mixins │ │ │ └── config.scss │ │ ├── aside.scss │ │ ├── radio-group.scss │ │ ├── time-picker.scss │ │ ├── container.scss │ │ ├── select │ │ │ └── common.scss │ │ ├── display.scss │ │ ├── footer.scss │ │ ├── header.scss │ │ ├── main.scss │ │ ├── popconfirm.scss │ │ ├── overlay.scss │ │ └── space.scss │ └── .gitignore ├── components │ ├── table-v2 │ │ ├── src │ │ │ ├── .gitkeep │ │ │ ├── private.ts │ │ │ ├── composables │ │ │ │ └── index.ts │ │ │ ├── renderers │ │ │ │ └── overlay.tsx │ │ │ └── header-cell.ts │ │ ├── __tests__ │ │ │ └── .gitkeep │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── teleport │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── base │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── collection │ │ ├── index.ts │ │ └── src │ │ │ ├── collection.vue │ │ │ └── collection-item.vue │ ├── form │ │ ├── src │ │ │ ├── hooks │ │ │ │ └── index.ts │ │ │ └── constants.ts │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── table │ │ ├── src │ │ │ ├── tableColumn.ts │ │ │ └── tokens.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── slot │ │ └── index.ts │ ├── affix │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── alert │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── aside │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── badge │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── card │ │ ├── src │ │ │ └── instance.ts │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── col │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── empty │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── icon │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── input │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── link │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── main │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── radio │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ └── constants.ts │ ├── rate │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── row │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── constants.ts │ │ └── index.ts │ ├── space │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── step │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── steps │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── tabs │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── tag │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── text │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── avatar │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── backtop │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── button │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ ├── instance.ts │ │ │ └── constants.ts │ ├── divider │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── footer │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── header │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── loading │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── option │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── overlay │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── popper │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ └── composables │ │ │ └── index.ts │ ├── result │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── switch │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── breadcrumb │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ ├── constants.ts │ │ │ └── instances.ts │ ├── carousel │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ ├── instance.ts │ │ │ └── carousel-item.ts │ ├── check-tag │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── checkbox │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ └── composables │ │ │ └── index.ts │ ├── collapse │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ ├── instance.ts │ │ │ └── constants.ts │ ├── countdown │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── form-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── menu-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── progress │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── scrollbar │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ ├── src │ │ │ └── constants.ts │ │ └── index.ts │ ├── statistic │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── sub-menu │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── tab-pane │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── timeline │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── button-group │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── image-viewer │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── notification │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── option-group │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── radio-button │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── radio-group │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── breadcrumb-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── carousel-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── cascader │ │ ├── src │ │ │ └── instances.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── checkbox-button │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── checkbox-group │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── collapse-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── config-provider │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ └── constants.ts │ ├── dropdown-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── dropdown-menu │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── dropdown │ │ ├── src │ │ │ └── instance.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── infinite-scroll │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── menu-item-group │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── skeleton-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── timeline-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── descriptions-item │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── collapse-transition │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── cascader-panel │ │ ├── src │ │ │ └── instance.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── menu │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── src │ │ │ └── menu-item-group.ts │ ├── dialog │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── drawer │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── message │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── popover │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── tooltip │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── tree │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── upload │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ ├── src │ │ │ └── constants.ts │ │ └── index.ts │ ├── image │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── input-number │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── page-header │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── pagination │ │ ├── src │ │ │ └── usePagination.ts │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── index.ts │ ├── skeleton │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── tree-select │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── tree-v2 │ │ ├── index.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── virtual-list │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── descriptions │ │ ├── style │ │ │ ├── css.ts │ │ │ └── index.ts │ │ └── src │ │ │ ├── descriptions-row.ts │ │ │ └── token.ts │ ├── focus-trap │ │ └── index.ts │ ├── visual-hidden │ │ ├── index.ts │ │ └── src │ │ │ └── visual-hidden.ts │ ├── transfer │ │ ├── src │ │ │ └── composables │ │ │ │ └── index.ts │ │ ├── index.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── calendar │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ ├── src │ │ │ └── instance.ts │ │ └── index.ts │ ├── color-picker │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── popconfirm │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── slider │ │ ├── src │ │ │ └── composables │ │ │ │ └── index.ts │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── index.ts │ ├── table-column │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── autocomplete │ │ ├── index.ts │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── message-box │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── time-picker │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── container │ │ ├── src │ │ │ └── main.vue │ │ └── style │ │ │ ├── css.ts │ │ │ └── index.ts │ ├── date-picker │ │ ├── style │ │ │ ├── index.ts │ │ │ └── css.ts │ │ └── src │ │ │ ├── constants.ts │ │ │ └── instance.ts │ ├── select-v2 │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ ├── time-select │ │ └── style │ │ │ ├── index.ts │ │ │ └── css.ts │ └── tooltip-v2 │ │ └── index.ts ├── utils │ ├── functions.ts │ ├── vue │ │ ├── props │ │ │ ├── index.ts │ │ │ └── util.ts │ │ ├── typescript.ts │ │ ├── size.ts │ │ └── index.ts │ ├── i18n.ts │ ├── dom │ │ └── index.ts │ ├── browser.ts │ ├── package.json │ ├── __tests__ │ │ ├── typescript.test.ts │ │ └── rand.test.ts │ ├── raf.ts │ └── rand.ts ├── element-plus │ ├── locales.ts │ ├── README.md │ └── defaults.ts ├── constants │ ├── key.ts │ ├── package.json │ ├── index.ts │ ├── event.ts │ └── size.ts ├── test-utils │ ├── sleep.ts │ ├── dom.ts │ ├── package.json │ └── style-plugin.ts ├── directives │ ├── index.ts │ └── package.json ├── hooks │ ├── use-focus │ │ └── index.ts │ └── use-prop │ │ └── index.ts └── locale │ └── package.json ├── play ├── src │ └── .gitignore ├── .eslintrc.json ├── env.d.ts └── vite.init.ts ├── ssr-testing ├── .gitignore ├── cases │ ├── empty.vue │ ├── page-header.vue │ ├── backtop.vue │ ├── affix.vue │ ├── calendar.vue │ ├── input.vue │ ├── popconfirm.vue │ ├── input-number.vue │ ├── skeleton.vue │ ├── tag.vue │ ├── time-select.vue │ ├── alert.vue │ ├── basic.vue │ ├── card.vue │ ├── popover.vue │ ├── divider.vue │ └── breadcrumb.vue ├── assets │ └── test-image.jpeg └── tsconfig.json ├── .gitpod.yml ├── .markdownlint.json ├── .npmrc ├── internal ├── build-constants │ ├── src │ │ ├── index.ts │ │ ├── repo.ts │ │ └── pkg.ts │ └── build.config.ts ├── build │ ├── src │ │ ├── index.ts │ │ ├── utils │ │ │ └── index.ts │ │ └── tasks │ │ │ └── index.ts │ └── build.config.ts └── build-utils │ ├── src │ ├── index.ts │ ├── log.ts │ └── fs.ts │ └── build.config.ts ├── .eslintrc.json ├── .husky ├── pre-commit └── commit-msg ├── pnpm-workspace.yaml ├── .prettierignore ├── .github ├── .git_commit_template.txt └── ISSUE_TEMPLATE │ └── config.yml ├── scripts ├── nightly.sh ├── publish.sh └── file-check.sh ├── .gitattributes ├── .vscode └── extensions.json ├── codecov.yml ├── .editorconfig ├── .prettierrc ├── commitlint.config.js ├── vitest.setup.ts ├── .eslintignore ├── tsconfig.vite-config.json ├── tsconfig.json ├── .gitignore ├── tsconfig.play.json ├── tsconfig.vitest.json └── breakings └── 2.2.1 └── button.yml /.nvmrc: -------------------------------------------------------------------------------- 1 | v16 2 | -------------------------------------------------------------------------------- /docs/public/.nojekyll: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/public/CORS: -------------------------------------------------------------------------------- 1 | * 2 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | E2E_TEST_PORT=5001 2 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/sub-menu.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/tab-pane.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/tooltip.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/components/table-v2/src/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/collapse-item.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/dropdown-item.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/dropdown-menu.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/form-item.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/menu-item.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /play/src/.gitignore: -------------------------------------------------------------------------------- 1 | * 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /ssr-testing/.gitignore: -------------------------------------------------------------------------------- 1 | screenshots/* 2 | -------------------------------------------------------------------------------- /packages/components/table-v2/__tests__/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/breadcrumb-item.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/config-provider.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/infinite-scroll.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/menu-item-group.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/collapse-transition.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /packages/components/teleport/style/css.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /packages/components/teleport/style/index.ts: -------------------------------------------------------------------------------- 1 | export {} 2 | -------------------------------------------------------------------------------- /docs/.vitepress/config/features.ts: -------------------------------------------------------------------------------- 1 | export const features = {} 2 | -------------------------------------------------------------------------------- /packages/utils/functions.ts: -------------------------------------------------------------------------------- 1 | export { NOOP } from '@vue/shared' 2 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | tasks: 2 | - init: pnpm i 3 | command: pnpm dev 4 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD033": false, 3 | "MD013": false 4 | } 5 | -------------------------------------------------------------------------------- /packages/element-plus/locales.ts: -------------------------------------------------------------------------------- 1 | export * from '@element-plus/locale' 2 | -------------------------------------------------------------------------------- /docs/.vitepress/utils/types.ts: -------------------------------------------------------------------------------- 1 | export const define = (value: T): T => value 2 | -------------------------------------------------------------------------------- /packages/constants/key.ts: -------------------------------------------------------------------------------- 1 | export const INSTALLED_KEY = Symbol('INSTALLED_KEY') 2 | -------------------------------------------------------------------------------- /packages/theme-chalk/.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | lib 4 | npm-debug* 5 | -------------------------------------------------------------------------------- /docs/.vitepress/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | export {} 4 | -------------------------------------------------------------------------------- /packages/components/base/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/theme-chalk/base.css' 2 | -------------------------------------------------------------------------------- /play/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-console": "off" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | shell-emulator=true 4 | -------------------------------------------------------------------------------- /internal/build-constants/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './pkg' 2 | export * from './repo' 3 | -------------------------------------------------------------------------------- /packages/components/base/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/theme-chalk/src/base.scss' 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": ["@element-plus/eslint-config"] 4 | } 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | pnpm exec lint-staged 5 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/api-typing.json: -------------------------------------------------------------------------------- 1 | { 2 | "detail": "Type details" 3 | } 4 | -------------------------------------------------------------------------------- /docs/en-US/resource/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | page: true 3 | lang: en-US 4 | --- 5 | 6 | 7 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | packages: 2 | - packages/* 3 | - docs 4 | - play 5 | - internal/* 6 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/last-update-at.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Last Updated" 3 | } 4 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/skip-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Skip to content" 3 | } 4 | -------------------------------------------------------------------------------- /docs/examples/empty/image-size.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /packages/components/table-v2/src/private.ts: -------------------------------------------------------------------------------- 1 | export const placeholderSign = Symbol('placeholder') 2 | -------------------------------------------------------------------------------- /play/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /ssr-testing/cases/empty.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/examples/skeleton/animation.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/examples/skeleton/configurable-rows.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/public/images/web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/web.png -------------------------------------------------------------------------------- /ssr-testing/cases/page-header.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/examples/empty/basic-usage.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/public/images/bit-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/bit-l.png -------------------------------------------------------------------------------- /docs/public/images/qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/qrcode.png -------------------------------------------------------------------------------- /docs/public/images/renren.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/renren.png -------------------------------------------------------------------------------- /docs/public/images/vform.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/vform.png -------------------------------------------------------------------------------- /packages/theme-chalk/src/base.scss: -------------------------------------------------------------------------------- 1 | @use 'var.scss'; 2 | @use 'common/transition.scss'; 3 | @use 'icon.scss'; 4 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/common/index.scss: -------------------------------------------------------------------------------- 1 | @use './switch'; 2 | @use './hamburger'; 3 | @use './helper'; 4 | -------------------------------------------------------------------------------- /docs/public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/apple-touch-icon.png -------------------------------------------------------------------------------- /docs/public/images/cloud-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/cloud-1.png -------------------------------------------------------------------------------- /docs/public/images/cloud-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/cloud-2.png -------------------------------------------------------------------------------- /docs/public/images/compo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/compo-1.png -------------------------------------------------------------------------------- /docs/public/images/compo-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/compo-2.png -------------------------------------------------------------------------------- /docs/public/images/compo-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/compo-3.png -------------------------------------------------------------------------------- /docs/public/images/figure-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/figure-1.png -------------------------------------------------------------------------------- /docs/public/images/figure-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/figure-2.png -------------------------------------------------------------------------------- /docs/public/images/hamburger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/hamburger.png -------------------------------------------------------------------------------- /docs/public/images/js-design.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/js-design.png -------------------------------------------------------------------------------- /docs/public/images/plant-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/plant-1.png -------------------------------------------------------------------------------- /docs/public/images/plant-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/plant-2.png -------------------------------------------------------------------------------- /docs/public/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/mstile-150x150.png -------------------------------------------------------------------------------- /internal/build/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './tasks' 2 | export * from './utils' 3 | export * from './build-info' 4 | -------------------------------------------------------------------------------- /packages/components/collection/index.ts: -------------------------------------------------------------------------------- 1 | export * from './src/collection' 2 | 3 | export * from './src/tokens' 4 | -------------------------------------------------------------------------------- /packages/utils/vue/props/index.ts: -------------------------------------------------------------------------------- 1 | export * from './util' 2 | export * from './types' 3 | export * from './runtime' 4 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | coverage 4 | CHANGELOG.en-US.md 5 | pnpm-lock.yaml 6 | docs/components.d.ts 7 | -------------------------------------------------------------------------------- /docs/public/images/formmaking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/formmaking.png -------------------------------------------------------------------------------- /docs/public/images/jnpf_index.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/jnpf_index.png -------------------------------------------------------------------------------- /docs/public/images/theme-intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/theme-intro.png -------------------------------------------------------------------------------- /docs/public/images/typography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography.png -------------------------------------------------------------------------------- /packages/components/form/src/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-form-common-props' 2 | export * from './use-form-item' 3 | -------------------------------------------------------------------------------- /packages/utils/i18n.ts: -------------------------------------------------------------------------------- 1 | export const isKorean = (text: string) => 2 | /([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(text) 3 | -------------------------------------------------------------------------------- /ssr-testing/assets/test-image.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/ssr-testing/assets/test-image.jpeg -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 'A Vue 3 UI Framework' 3 | lang: en-US 4 | page: true 5 | --- 6 | 7 | 8 | -------------------------------------------------------------------------------- /docs/public/images/element-demo.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/element-demo.jpeg -------------------------------------------------------------------------------- /docs/public/images/intro-theme-b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/intro-theme-b.png -------------------------------------------------------------------------------- /docs/public/images/vform-banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/vform-banner.png -------------------------------------------------------------------------------- /docs/public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /docs/public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /docs/public/images/js-design-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/js-design-banner.jpg -------------------------------------------------------------------------------- /docs/public/images/sponsors/MISBoot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/MISBoot.png -------------------------------------------------------------------------------- /docs/public/images/sponsors/jeeplus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/jeeplus.png -------------------------------------------------------------------------------- /docs/public/images/theme-index-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/theme-index-blue.png -------------------------------------------------------------------------------- /packages/components/table/src/tableColumn.ts: -------------------------------------------------------------------------------- 1 | import ElTableColumn from './table-column' 2 | 3 | export default ElTableColumn 4 | -------------------------------------------------------------------------------- /ssr-testing/cases/backtop.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/search.json: -------------------------------------------------------------------------------- 1 | { 2 | "search": "Search", 3 | "empty": "No results", 4 | "index": "en" 5 | } 6 | -------------------------------------------------------------------------------- /docs/public/images/sponsors/buildadmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/buildadmin.png -------------------------------------------------------------------------------- /docs/public/images/sponsors/jnpfsoft.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/jnpfsoft.jpg -------------------------------------------------------------------------------- /internal/build-utils/src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './fs' 2 | export * from './log' 3 | export * from './paths' 4 | export * from './pkg' 5 | -------------------------------------------------------------------------------- /packages/components/slot/index.ts: -------------------------------------------------------------------------------- 1 | export { OnlyChild as ElOnlyChild } from './src/only-child' 2 | export * from './src/only-child' 3 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | pnpm exec commitlint --config commitlint.config.js --edit "${1}" 5 | -------------------------------------------------------------------------------- /docs/examples/calendar/range.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/public/images/sponsors/buildadmin-l.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/buildadmin-l.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-arial.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-arial.png -------------------------------------------------------------------------------- /packages/components/affix/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-affix.css' 3 | -------------------------------------------------------------------------------- /packages/components/affix/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/affix.scss' 3 | -------------------------------------------------------------------------------- /packages/components/alert/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-alert.css' 3 | -------------------------------------------------------------------------------- /packages/components/alert/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/alert.scss' 3 | -------------------------------------------------------------------------------- /packages/components/aside/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-aside.css' 3 | -------------------------------------------------------------------------------- /packages/components/aside/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/aside.scss' 3 | -------------------------------------------------------------------------------- /packages/components/badge/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-badge.css' 3 | -------------------------------------------------------------------------------- /packages/components/badge/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/badge.scss' 3 | -------------------------------------------------------------------------------- /packages/components/card/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Card from './card.vue' 2 | 3 | export type CardInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/card/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-card.css' 3 | -------------------------------------------------------------------------------- /packages/components/card/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/card.scss' 3 | -------------------------------------------------------------------------------- /packages/components/col/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-col.css' 3 | -------------------------------------------------------------------------------- /packages/components/col/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/col.scss' 3 | -------------------------------------------------------------------------------- /packages/components/empty/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-empty.css' 3 | -------------------------------------------------------------------------------- /packages/components/empty/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/empty.scss' 3 | -------------------------------------------------------------------------------- /packages/components/form/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-form.css' 3 | -------------------------------------------------------------------------------- /packages/components/form/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/form.scss' 3 | -------------------------------------------------------------------------------- /packages/components/icon/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-icon.css' 3 | -------------------------------------------------------------------------------- /packages/components/icon/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/icon.scss' 3 | -------------------------------------------------------------------------------- /packages/components/input/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-input.css' 3 | -------------------------------------------------------------------------------- /packages/components/input/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/input.scss' 3 | -------------------------------------------------------------------------------- /packages/components/link/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-link.css' 3 | -------------------------------------------------------------------------------- /packages/components/link/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/link.scss' 3 | -------------------------------------------------------------------------------- /packages/components/main/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-main.css' 3 | -------------------------------------------------------------------------------- /packages/components/main/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/main.scss' 3 | -------------------------------------------------------------------------------- /packages/components/radio/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-radio.css' 3 | -------------------------------------------------------------------------------- /packages/components/radio/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/radio.scss' 3 | -------------------------------------------------------------------------------- /packages/components/rate/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-rate.css' 3 | -------------------------------------------------------------------------------- /packages/components/rate/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/rate.scss' 3 | -------------------------------------------------------------------------------- /packages/components/row/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-row.css' 3 | -------------------------------------------------------------------------------- /packages/components/row/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/row.scss' 3 | -------------------------------------------------------------------------------- /packages/components/space/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-space.css' 3 | -------------------------------------------------------------------------------- /packages/components/space/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/space.scss' 3 | -------------------------------------------------------------------------------- /packages/components/step/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-step.css' 3 | -------------------------------------------------------------------------------- /packages/components/step/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/step.scss' 3 | -------------------------------------------------------------------------------- /packages/components/steps/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-steps.css' 3 | -------------------------------------------------------------------------------- /packages/components/steps/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/steps.scss' 3 | -------------------------------------------------------------------------------- /packages/components/tabs/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tabs.css' 3 | -------------------------------------------------------------------------------- /packages/components/tabs/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tabs.scss' 3 | -------------------------------------------------------------------------------- /packages/components/tag/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tag.css' 3 | -------------------------------------------------------------------------------- /packages/components/tag/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tag.scss' 3 | -------------------------------------------------------------------------------- /packages/components/text/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-text.css' 3 | -------------------------------------------------------------------------------- /packages/components/text/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/text.scss' 3 | -------------------------------------------------------------------------------- /packages/test-utils/sleep.ts: -------------------------------------------------------------------------------- 1 | const sleep = (time = 0) => new Promise((resolve) => setTimeout(resolve, time)) 2 | 3 | export default sleep 4 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/navbar.json: -------------------------------------------------------------------------------- 1 | { 2 | "mobile-nav": "mobile navigation", 3 | "theme-toggler": "toggle dark mode" 4 | } 5 | -------------------------------------------------------------------------------- /docs/public/images/sponsors/fantasticadmin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/fantasticadmin.png -------------------------------------------------------------------------------- /docs/public/images/sponsors/jeeplus_banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/sponsors/jeeplus_banner.jpg -------------------------------------------------------------------------------- /docs/public/images/typography/line-height.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/line-height.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-hiragino.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-hiragino.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-pingfang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-pingfang.png -------------------------------------------------------------------------------- /internal/build/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './gulp' 2 | export * from './pkg' 3 | export * from './process' 4 | export * from './rollup' 5 | -------------------------------------------------------------------------------- /packages/components/alert/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Alert from './alert.vue' 2 | 3 | export type AlertInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/avatar/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-avatar.css' 3 | -------------------------------------------------------------------------------- /packages/components/avatar/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/avatar.scss' 3 | -------------------------------------------------------------------------------- /packages/components/backtop/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-backtop.css' 3 | -------------------------------------------------------------------------------- /packages/components/backtop/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/backtop.scss' 3 | -------------------------------------------------------------------------------- /packages/components/badge/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Badge from './badge.vue' 2 | 3 | export type BadgeInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/button/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-button.css' 3 | -------------------------------------------------------------------------------- /packages/components/button/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/button.scss' 3 | -------------------------------------------------------------------------------- /packages/components/divider/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-divider.css' 3 | -------------------------------------------------------------------------------- /packages/components/divider/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/divider.scss' 3 | -------------------------------------------------------------------------------- /packages/components/empty/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Empty from './empty.vue' 2 | 3 | export type EmptyInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/footer/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-footer.css' 3 | -------------------------------------------------------------------------------- /packages/components/footer/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/footer.scss' 3 | -------------------------------------------------------------------------------- /packages/components/header/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-header.css' 3 | -------------------------------------------------------------------------------- /packages/components/header/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/header.scss' 3 | -------------------------------------------------------------------------------- /packages/components/input/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Input from './input.vue' 2 | 3 | export type InputInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/loading/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-loading.css' 3 | -------------------------------------------------------------------------------- /packages/components/loading/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/loading.scss' 3 | -------------------------------------------------------------------------------- /packages/components/option/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-option.css' 3 | -------------------------------------------------------------------------------- /packages/components/option/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/option.scss' 3 | -------------------------------------------------------------------------------- /packages/components/overlay/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-overlay.css' 3 | -------------------------------------------------------------------------------- /packages/components/overlay/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/overlay.scss' 3 | -------------------------------------------------------------------------------- /packages/components/popper/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-popper.css' 3 | -------------------------------------------------------------------------------- /packages/components/popper/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/popper.scss' 3 | -------------------------------------------------------------------------------- /packages/components/result/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-result.css' 3 | -------------------------------------------------------------------------------- /packages/components/result/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/result.scss' 3 | -------------------------------------------------------------------------------- /packages/components/switch/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-switch.css' 3 | -------------------------------------------------------------------------------- /packages/components/switch/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/switch.scss' 3 | -------------------------------------------------------------------------------- /docs/examples/pagination/background-color.vue: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /docs/public/images/typography/term-arial-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-arial-dark.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-helvetica.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-helvetica.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-microsoft.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-microsoft.png -------------------------------------------------------------------------------- /packages/components/avatar/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Avatar from './avatar.vue' 2 | 3 | export type AvatarInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/breadcrumb/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-breadcrumb.css' 3 | -------------------------------------------------------------------------------- /packages/components/breadcrumb/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/breadcrumb.scss' 3 | -------------------------------------------------------------------------------- /packages/components/carousel/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-carousel.css' 3 | -------------------------------------------------------------------------------- /packages/components/carousel/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/carousel.scss' 3 | -------------------------------------------------------------------------------- /packages/components/check-tag/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-check-tag.css' 3 | -------------------------------------------------------------------------------- /packages/components/check-tag/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/check-tag.scss' 3 | -------------------------------------------------------------------------------- /packages/components/checkbox/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-checkbox.css' 3 | -------------------------------------------------------------------------------- /packages/components/checkbox/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/checkbox.scss' 3 | -------------------------------------------------------------------------------- /packages/components/collapse/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-collapse.css' 3 | -------------------------------------------------------------------------------- /packages/components/collapse/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/collapse.scss' 3 | -------------------------------------------------------------------------------- /packages/components/countdown/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-statistic.css' 3 | -------------------------------------------------------------------------------- /packages/components/countdown/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/statistic.scss' 3 | -------------------------------------------------------------------------------- /packages/components/form-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-form-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/form-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/form-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/menu-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-menu-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/menu-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/menu-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/progress/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-progress.css' 3 | -------------------------------------------------------------------------------- /packages/components/progress/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/progress.scss' 3 | -------------------------------------------------------------------------------- /packages/components/scrollbar/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-scrollbar.css' 3 | -------------------------------------------------------------------------------- /packages/components/scrollbar/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/scrollbar.scss' 3 | -------------------------------------------------------------------------------- /packages/components/statistic/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-statistic.css' 3 | -------------------------------------------------------------------------------- /packages/components/statistic/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/statistic.scss' 3 | -------------------------------------------------------------------------------- /packages/components/sub-menu/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-sub-menu.css' 3 | -------------------------------------------------------------------------------- /packages/components/sub-menu/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/sub-menu.scss' 3 | -------------------------------------------------------------------------------- /packages/components/tab-pane/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tab-pane.css' 3 | -------------------------------------------------------------------------------- /packages/components/tab-pane/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tab-pane.scss' 3 | -------------------------------------------------------------------------------- /packages/components/timeline/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-timeline.css' 3 | -------------------------------------------------------------------------------- /packages/components/timeline/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/timeline.scss' 3 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .vitepress/i18n/* 2 | .vitepress/crowdin/* 3 | !.vitepress/crowdin/en-US 4 | 5 | temp 6 | zh-CN 7 | fr-FR 8 | es-ES 9 | ja-JP 10 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/icons.json: -------------------------------------------------------------------------------- 1 | { 2 | "copy-success": "Copied!", 3 | "copy-error": "Your browser does not support copy :(" 4 | } 5 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/translation.json: -------------------------------------------------------------------------------- 1 | { 2 | "help": "Help Translate 😉", 3 | "language": "Choose the language that you want" 4 | } 5 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/types.ts: -------------------------------------------------------------------------------- 1 | export type Link = { 2 | text: string 3 | link: string 4 | promotion?: string 5 | activeMatch: string 6 | } 7 | -------------------------------------------------------------------------------- /docs/examples/empty/bottom-content.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/public/images/typography/line-height-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/line-height-dark.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-hiragino-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-hiragino-dark.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-pingfang-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-pingfang-dark.png -------------------------------------------------------------------------------- /packages/components/backtop/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Backtop from './backtop.vue' 2 | 3 | export type BacktopInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/button-group/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-button-group.css' 3 | -------------------------------------------------------------------------------- /packages/components/button-group/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/button-group.scss' 3 | -------------------------------------------------------------------------------- /packages/components/image-viewer/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-image-viewer.css' 3 | -------------------------------------------------------------------------------- /packages/components/image-viewer/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/image-viewer.scss' 3 | -------------------------------------------------------------------------------- /packages/components/notification/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-notification.css' 3 | -------------------------------------------------------------------------------- /packages/components/notification/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/notification.scss' 3 | -------------------------------------------------------------------------------- /packages/components/option-group/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-option-group.css' 3 | -------------------------------------------------------------------------------- /packages/components/option-group/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/option-group.scss' 3 | -------------------------------------------------------------------------------- /packages/components/radio-button/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-radio-button.css' 3 | -------------------------------------------------------------------------------- /packages/components/radio-button/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/radio-button.scss' 3 | -------------------------------------------------------------------------------- /packages/components/radio-group/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-radio-group.css' 3 | -------------------------------------------------------------------------------- /packages/components/radio-group/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/radio-group.scss' 3 | -------------------------------------------------------------------------------- /packages/constants/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@element-plus/constants", 3 | "private": true, 4 | "license": "MIT", 5 | "main": "index.ts" 6 | } 7 | -------------------------------------------------------------------------------- /.github/.git_commit_template.txt: -------------------------------------------------------------------------------- 1 | # [TYPE](SCOPE): [component-name] DESCRIPTION#[ISSUE] 2 | # example: feat(components): [button] add type for form usage #1234 3 | -------------------------------------------------------------------------------- /docs/examples/backtop/basic.vue: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /docs/public/images/typography/term-helvetica-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-helvetica-dark.png -------------------------------------------------------------------------------- /docs/public/images/typography/term-microsoft-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ctfang/element-plus/dev/docs/public/images/typography/term-microsoft-dark.png -------------------------------------------------------------------------------- /packages/components/breadcrumb-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-breadcrumb-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/breadcrumb-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/breadcrumb-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/carousel-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-carousel-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/carousel-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/carousel-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/cascader/src/instances.ts: -------------------------------------------------------------------------------- 1 | import type Cascader from './cascader.vue' 2 | 3 | export type CascaderInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/checkbox-button/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-checkbox-button.css' 3 | -------------------------------------------------------------------------------- /packages/components/checkbox-button/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/checkbox-button.scss' 3 | -------------------------------------------------------------------------------- /packages/components/checkbox-group/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-checkbox-group.css' 3 | -------------------------------------------------------------------------------- /packages/components/checkbox-group/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/checkbox-group.scss' 3 | -------------------------------------------------------------------------------- /packages/components/collapse-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-collapse-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/collapse-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/collapse-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/config-provider/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-config-provider.css' 3 | -------------------------------------------------------------------------------- /packages/components/config-provider/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/config-provider.scss' 3 | -------------------------------------------------------------------------------- /packages/components/dropdown-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-dropdown-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/dropdown-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/dropdown-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/dropdown-menu/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-dropdown-menu.css' 3 | -------------------------------------------------------------------------------- /packages/components/dropdown-menu/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/dropdown-menu.scss' 3 | -------------------------------------------------------------------------------- /packages/components/dropdown/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Dropdown from './dropdown.vue' 2 | 3 | export type DropdownInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/infinite-scroll/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-infinite-scroll.css' 3 | -------------------------------------------------------------------------------- /packages/components/infinite-scroll/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/infinite-scroll.scss' 3 | -------------------------------------------------------------------------------- /packages/components/menu-item-group/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-menu-item-group.css' 3 | -------------------------------------------------------------------------------- /packages/components/menu-item-group/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/menu-item-group.scss' 3 | -------------------------------------------------------------------------------- /packages/components/popper/src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-content' 2 | export * from './use-content-dom' 3 | export * from './use-focus-trap' 4 | -------------------------------------------------------------------------------- /packages/components/skeleton-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-skeleton-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/skeleton-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/skeleton-item.scss' 3 | -------------------------------------------------------------------------------- /packages/components/timeline-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-timeline-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/timeline-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/timeline-item.scss' 3 | -------------------------------------------------------------------------------- /packages/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './aria' 2 | export * from './date' 3 | export * from './event' 4 | export * from './key' 5 | export * from './size' 6 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/affix.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | 3 | @include b(affix) { 4 | @include m(fixed) { 5 | position: fixed; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /internal/build/src/tasks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './full-bundle' 2 | export * from './helper' 3 | export * from './modules' 4 | export * from './types-definitions' 5 | -------------------------------------------------------------------------------- /packages/components/descriptions-item/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-descriptions-item.css' 3 | -------------------------------------------------------------------------------- /packages/components/descriptions-item/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/descriptions-item.scss' 3 | -------------------------------------------------------------------------------- /packages/constants/event.ts: -------------------------------------------------------------------------------- 1 | export const UPDATE_MODEL_EVENT = 'update:modelValue' 2 | export const CHANGE_EVENT = 'change' 3 | export const INPUT_EVENT = 'input' 4 | -------------------------------------------------------------------------------- /packages/test-utils/dom.ts: -------------------------------------------------------------------------------- 1 | export const getCssVariable = (el: HTMLElement, property: string) => { 2 | return getComputedStyle(el).getPropertyValue(property) 3 | } 4 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/edit-link.json: -------------------------------------------------------------------------------- 1 | { 2 | "edit-on-github": "Edit this page on GitHub", 3 | "edit-on-crowdin": "Edit this page on Crowdin" 4 | } 5 | -------------------------------------------------------------------------------- /docs/en-US/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: A Vue 3 UI Framework 3 | page: true 4 | lang: en-US 5 | --- 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/examples/affix/basic.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /packages/components/collapse-transition/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-collapse-transition.css' 3 | -------------------------------------------------------------------------------- /packages/components/collapse-transition/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/collapse-transition.scss' 3 | -------------------------------------------------------------------------------- /packages/utils/dom/index.ts: -------------------------------------------------------------------------------- 1 | export * from './aria' 2 | export * from './event' 3 | export * from './position' 4 | export * from './scroll' 5 | export * from './style' 6 | -------------------------------------------------------------------------------- /ssr-testing/cases/affix.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/examples/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-console": "off", 4 | "no-unused-vars": "off", 5 | "@typescript-eslint/no-unused-vars": "off" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/changelog.json: -------------------------------------------------------------------------------- 1 | { 2 | "published-by": "Published by", 3 | "open-link": "Open link", 4 | "select-version": "Select a version" 5 | } 6 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/footer.json: -------------------------------------------------------------------------------- 1 | { 2 | "source": "Source", 3 | "contributors": "Contributors", 4 | "component": "Component", 5 | "docs": "Docs" 6 | } 7 | -------------------------------------------------------------------------------- /packages/components/cascader-panel/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type CascaderPanel from './index.vue' 2 | 3 | export type CascaderPanelInstance = InstanceType 4 | -------------------------------------------------------------------------------- /packages/components/overlay/index.ts: -------------------------------------------------------------------------------- 1 | import Overlay from './src/overlay' 2 | 3 | export const ElOverlay = Overlay 4 | export default ElOverlay 5 | 6 | export * from './src/overlay' 7 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/pages/not-found.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Resource not found", 3 | "button-title": "Back to Home", 4 | "desc": "The page you requested does not exist" 5 | } 6 | -------------------------------------------------------------------------------- /docs/examples/affix/fixed.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/examples/alert/description.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/menu/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/menu.scss' 3 | import '@element-plus/components/tooltip/style' 4 | -------------------------------------------------------------------------------- /packages/test-utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@element-plus/test-utils", 3 | "version": "0.0.5", 4 | "private": true, 5 | "license": "MIT", 6 | "main": "dist/index.js" 7 | } 8 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/checkbox-group.scss: -------------------------------------------------------------------------------- 1 | @use 'common/var' as *; 2 | @use 'mixins/mixins' as *; 3 | 4 | @include b(checkbox-group) { 5 | font-size: 0; 6 | line-height: 0; 7 | } 8 | -------------------------------------------------------------------------------- /packages/components/dialog/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/dialog.scss' 3 | import '@element-plus/components/overlay/style' 4 | -------------------------------------------------------------------------------- /packages/components/drawer/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/drawer.scss' 3 | import '@element-plus/components/overlay/style' 4 | -------------------------------------------------------------------------------- /packages/components/menu/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-menu.css' 3 | import '@element-plus/components/tooltip/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/message/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/badge/style' 3 | import '@element-plus/theme-chalk/src/message.scss' 4 | -------------------------------------------------------------------------------- /packages/components/popover/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/popper/style' 3 | import '@element-plus/theme-chalk/src/popover.scss' 4 | -------------------------------------------------------------------------------- /packages/components/tooltip/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tooltip.scss' 3 | import '@element-plus/components/popper/style' 4 | -------------------------------------------------------------------------------- /packages/components/tree/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tree.css' 3 | import '@element-plus/components/checkbox/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/tree/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tree.scss' 3 | import '@element-plus/components/checkbox/style' 4 | -------------------------------------------------------------------------------- /packages/components/upload/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/upload.scss' 3 | import '@element-plus/components/progress/style' 4 | -------------------------------------------------------------------------------- /docs/examples/empty/custom-image.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /packages/components/dialog/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-dialog.css' 3 | import '@element-plus/components/overlay/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/drawer/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-drawer.css' 3 | import '@element-plus/components/overlay/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/image/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/image.scss' 3 | import '@element-plus/components/image-viewer/style' 4 | -------------------------------------------------------------------------------- /packages/components/message/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/badge/style/css' 3 | import '@element-plus/theme-chalk/el-message.css' 4 | -------------------------------------------------------------------------------- /packages/components/popover/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/popper/style/css' 3 | import '@element-plus/theme-chalk/el-popover.css' 4 | -------------------------------------------------------------------------------- /packages/components/tooltip/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tooltip.css' 3 | import '@element-plus/components/popper/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/upload/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-upload.css' 3 | import '@element-plus/components/progress/style/css' 4 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/dev/deprecated-tag.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/nav/menu.scss: -------------------------------------------------------------------------------- 1 | @use '../mixins' as *; 2 | 3 | .navbar-menu { 4 | display: none; 5 | 6 | @include respond-to('md') { 7 | display: flex; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/components/collection/src/collection.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /packages/components/image/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-image.css' 3 | import '@element-plus/components/image-viewer/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/input-number/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/input-number.scss' 3 | import '@element-plus/components/input/style' 4 | -------------------------------------------------------------------------------- /packages/components/page-header/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/divider/style' 3 | import '@element-plus/theme-chalk/src/page-header.scss' 4 | -------------------------------------------------------------------------------- /packages/components/pagination/src/usePagination.ts: -------------------------------------------------------------------------------- 1 | import { inject } from 'vue' 2 | import { elPaginationKey } from './constants' 3 | 4 | export const usePagination = () => inject(elPaginationKey, {}) 5 | -------------------------------------------------------------------------------- /packages/components/pagination/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-pagination.css' 3 | import '@element-plus/components/select/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/pagination/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/pagination.scss' 3 | import '@element-plus/components/select/style' 4 | -------------------------------------------------------------------------------- /packages/components/skeleton/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/skeleton.scss' 3 | import '@element-plus/components/skeleton-item/style' 4 | -------------------------------------------------------------------------------- /packages/components/tree-select/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/select/style' 2 | import '@element-plus/components/tree/style' 3 | import '@element-plus/theme-chalk/src/tree-select.scss' 4 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/sponsor.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "Sponsors", 3 | "sponsoredBy": "Sponsored by", 4 | "platinumSponsor": "Platinum Sponsors", 5 | "goldSponsor": "Gold Sponsors" 6 | } 7 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/content/hero-content.scss: -------------------------------------------------------------------------------- 1 | .hero-content { 2 | padding: 40px 40px 0; 3 | } 4 | @media (max-width: 768px) { 5 | .hero-content { 6 | padding: 30px 10px 0; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/examples/calendar/basic.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /docs/examples/pagination/number-of-pagers.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /internal/build-utils/src/log.ts: -------------------------------------------------------------------------------- 1 | import process from 'process' 2 | import consola from 'consola' 3 | 4 | export function errorAndExit(err: Error): never { 5 | consola.error(err) 6 | process.exit(1) 7 | } 8 | -------------------------------------------------------------------------------- /packages/components/input-number/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-input-number.css' 3 | import '@element-plus/components/input/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/page-header/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/divider/style/css' 3 | import '@element-plus/theme-chalk/el-page-header.css' 4 | -------------------------------------------------------------------------------- /packages/components/skeleton/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-skeleton.css' 3 | import '@element-plus/components/skeleton-item/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/tree-select/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/select/style/css' 2 | import '@element-plus/components/tree/style/css' 3 | import '@element-plus/theme-chalk/el-tree-select.css' 4 | -------------------------------------------------------------------------------- /packages/components/tree-v2/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import TreeV2 from './src/tree.vue' 3 | 4 | export const ElTreeV2 = withInstall(TreeV2) 5 | export default ElTreeV2 6 | -------------------------------------------------------------------------------- /packages/components/virtual-list/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/virtual-list.scss' 3 | import '@element-plus/components/scrollbar/style' 4 | -------------------------------------------------------------------------------- /scripts/nightly.sh: -------------------------------------------------------------------------------- 1 | sed -i 's/"name": "element-plus",/"name": "@element-plus\/nightly",/' packages/element-plus/package.json 2 | sed -i '2s/element-plus/@element-plus\/nightly/' internal/build-constants/src/pkg.ts -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto eol=lf 2 | *.ts linguist-detectable=false 3 | *.css linguist-detectable=false 4 | *.scss linguist-detectable=false 5 | *.js linguist-detectable=true 6 | *.vue linguist-detectable=true 7 | -------------------------------------------------------------------------------- /docs/examples/space/auto-wrapping.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/virtual-list/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-virtual-list.css' 3 | import '@element-plus/components/scrollbar/style/css' 4 | -------------------------------------------------------------------------------- /packages/element-plus/README.md: -------------------------------------------------------------------------------- 1 | # `element-plus` 2 | 3 | > TODO: description 4 | 5 | ## Usage 6 | 7 | ``` 8 | const elementPlus = require('element-plus'); 9 | 10 | // TODO: DEMONSTRATE API 11 | ``` 12 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "vue.volar", 4 | "dbaeumer.vscode-eslint", 5 | "esbenp.prettier-vscode", 6 | "antfu.vite", 7 | "lokalise.i18n-ally" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /codecov.yml: -------------------------------------------------------------------------------- 1 | coverage: 2 | status: 3 | project: 4 | default: 5 | target: auto 6 | threshold: 10% 7 | comment: 8 | layout: 'reach, diff, flags, files' 9 | require_changes: true 10 | -------------------------------------------------------------------------------- /docs/examples/text/sizes.vue: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /docs/examples/tooltip/animations.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /internal/build-constants/src/repo.ts: -------------------------------------------------------------------------------- 1 | export const REPO_OWNER = 'element-plus' 2 | export const REPO_NAME = 'element-plus' 3 | export const REPO_PATH = `${REPO_OWNER}/${REPO_NAME}` 4 | export const REPO_BRANCH = 'dev' 5 | -------------------------------------------------------------------------------- /packages/components/descriptions/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-descriptions.css' 3 | import '@element-plus/components/descriptions-item/style/css' 4 | -------------------------------------------------------------------------------- /packages/components/descriptions/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/descriptions.scss' 3 | import '@element-plus/components/descriptions-item/style' 4 | -------------------------------------------------------------------------------- /packages/components/focus-trap/index.ts: -------------------------------------------------------------------------------- 1 | import ElFocusTrap from './src/focus-trap.vue' 2 | 3 | export { ElFocusTrap } 4 | 5 | export default ElFocusTrap 6 | export * from './src/tokens' 7 | export * from './src/utils' 8 | -------------------------------------------------------------------------------- /packages/utils/browser.ts: -------------------------------------------------------------------------------- 1 | import { isClient, isIOS } from '@vueuse/core' 2 | 3 | export const isFirefox = (): boolean => 4 | isClient && /firefox/i.test(window.navigator.userAgent) 5 | 6 | export { isClient, isIOS } 7 | -------------------------------------------------------------------------------- /packages/utils/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@element-plus/utils", 3 | "private": true, 4 | "license": "MIT", 5 | "main": "index.ts", 6 | "peerDependencies": { 7 | "vue": "^3.2.0" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/globals/vp-api-bool.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/globals/vp-api-number.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/globals/vp-api-string.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 8 | -------------------------------------------------------------------------------- /docs/examples/input/basic.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /docs/examples/rate/allow-half.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /docs/examples/rate/clearable.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /packages/components/visual-hidden/index.ts: -------------------------------------------------------------------------------- 1 | import ElVisuallyHidden from './src/visual-hidden.vue' 2 | 3 | export { ElVisuallyHidden } 4 | 5 | export default ElVisuallyHidden 6 | 7 | export * from './src/visual-hidden' 8 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/mixins/config.scss: -------------------------------------------------------------------------------- 1 | $namespace: 'el' !default; 2 | $common-separator: '-' !default; 3 | $element-separator: '__' !default; 4 | $modifier-separator: '--' !default; 5 | $state-prefix: 'is-' !default; 6 | -------------------------------------------------------------------------------- /ssr-testing/cases/calendar.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /ssr-testing/cases/input.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | quote_type = single 11 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": false, 3 | "singleQuote": true, 4 | "overrides": [ 5 | { 6 | "files": ".prettierrc", 7 | "options": { 8 | "parser": "json" 9 | } 10 | } 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | // commitlint uses `ts-node` to load typescript config, it's too slow. So we replace it with `esbuild`. 2 | require('@esbuild-kit/cjs-loader') 3 | module.exports = require('./commitlint.config.ts').default 4 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/component/pwa.json: -------------------------------------------------------------------------------- 1 | { 2 | "message": "New content available, click on refresh button to update.", 3 | "refresh": "Refresh", 4 | "always-refresh": "Always Refresh", 5 | "close": "Close" 6 | } 7 | -------------------------------------------------------------------------------- /docs/examples/input-number/steps.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /packages/element-plus/defaults.ts: -------------------------------------------------------------------------------- 1 | import { makeInstaller } from './make-installer' 2 | import Components from './component' 3 | import Plugins from './plugin' 4 | 5 | export default makeInstaller([...Components, ...Plugins]) 6 | -------------------------------------------------------------------------------- /docs/examples/container/layout-hm.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/examples/input/disabled.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /docs/examples/tooltip/rich-content.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /packages/components/col/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Col from './src/col.vue' 4 | 5 | export const ElCol = withInstall(Col) 6 | export default ElCol 7 | 8 | export * from './src/col' 9 | -------------------------------------------------------------------------------- /packages/components/tag/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Tag from './src/tag.vue' 4 | 5 | export const ElTag = withInstall(Tag) 6 | export default ElTag 7 | 8 | export * from './src/tag' 9 | -------------------------------------------------------------------------------- /packages/components/transfer/src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-check' 2 | export * from './use-checked-change' 3 | export * from './use-computed-data' 4 | export * from './use-move' 5 | export * from './use-props-alias' 6 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/aside.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | 3 | @include b(aside) { 4 | overflow: auto; 5 | box-sizing: border-box; 6 | flex-shrink: 0; 7 | width: var(#{getCssVarName('aside', 'width')}, 300px); 8 | } 9 | -------------------------------------------------------------------------------- /ssr-testing/cases/popconfirm.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /docs/.vitepress/config/index.ts: -------------------------------------------------------------------------------- 1 | export * from './analytics' 2 | export * from './features' 3 | export * from './head' 4 | export * from './nav' 5 | export * from './plugins' 6 | export * from './sidebars' 7 | export * from './sponsors' 8 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/dark.ts: -------------------------------------------------------------------------------- 1 | import { useDark, useToggle } from '@vueuse/core' 2 | 3 | export const isDark = useDark({ 4 | storageKey: 'el-theme-appearance', 5 | }) 6 | 7 | export const toggleDark = useToggle(isDark) 8 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/app.scss: -------------------------------------------------------------------------------- 1 | @use './common'; 2 | @use './base'; 3 | @use './code'; 4 | @use './navbar'; 5 | @use './scrollbar'; 6 | @use './subnav'; 7 | @use './overlay'; 8 | @use './sidebar'; 9 | @use './content'; 10 | -------------------------------------------------------------------------------- /docs/examples/input-number/disabled.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /docs/examples/input/clearable.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 9 | -------------------------------------------------------------------------------- /docs/examples/page-header/no-icon.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /docs/examples/popconfirm/basic-usage.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/icon/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Icon from './src/icon.vue' 4 | 5 | export const ElIcon = withInstall(Icon) 6 | export default ElIcon 7 | 8 | export * from './src/icon' 9 | -------------------------------------------------------------------------------- /packages/components/link/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Link from './src/link.vue' 4 | 5 | export const ElLink = withInstall(Link) 6 | export default ElLink 7 | 8 | export * from './src/link' 9 | -------------------------------------------------------------------------------- /packages/components/rate/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Rate from './src/rate.vue' 4 | 5 | export const ElRate = withInstall(Rate) 6 | export default ElRate 7 | 8 | export * from './src/rate' 9 | -------------------------------------------------------------------------------- /packages/components/text/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Text from './src/text.vue' 4 | 5 | export const ElText = withInstall(Text) 6 | export default ElText 7 | 8 | export * from './src/text' 9 | -------------------------------------------------------------------------------- /play/vite.init.ts: -------------------------------------------------------------------------------- 1 | import { existsSync, readFileSync, writeFileSync } from 'fs' 2 | 3 | const app = 'src/App.vue' 4 | const example = 'app.example.vue' 5 | 6 | if (!existsSync(app)) { 7 | writeFileSync(app, readFileSync(example)) 8 | } 9 | -------------------------------------------------------------------------------- /ssr-testing/cases/input-number.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /vitest.setup.ts: -------------------------------------------------------------------------------- 1 | import { config } from '@vue/test-utils' 2 | import { vi } from 'vitest' 3 | import ResizeObserver from 'resize-observer-polyfill' 4 | 5 | vi.stubGlobal('ResizeObserver', ResizeObserver) 6 | 7 | config.global.stubs = {} 8 | -------------------------------------------------------------------------------- /docs/examples/container/layout-am.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/examples/tooltip/html-content.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /packages/components/affix/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Affix from './src/affix.vue' 4 | 5 | export const ElAffix = withInstall(Affix) 6 | export default ElAffix 7 | 8 | export * from './src/affix' 9 | -------------------------------------------------------------------------------- /packages/components/breadcrumb/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | import type { BreadcrumbProps } from './breadcrumb' 3 | 4 | export const breadcrumbKey: InjectionKey = 5 | Symbol('breadcrumbKey') 6 | -------------------------------------------------------------------------------- /packages/components/collection/src/collection-item.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /packages/components/image/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Image from './src/image.vue' 4 | 5 | export const ElImage = withInstall(Image) 6 | export default ElImage 7 | 8 | export * from './src/image' 9 | -------------------------------------------------------------------------------- /packages/components/table/src/tokens.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | import type { DefaultRow, Table } from './table/defaults' 3 | 4 | export const TABLE_INJECTION_KEY: InjectionKey> = 5 | Symbol('ElTable') 6 | -------------------------------------------------------------------------------- /packages/utils/vue/typescript.ts: -------------------------------------------------------------------------------- 1 | import type { AppContext, Plugin } from 'vue' 2 | 3 | export type SFCWithInstall = T & Plugin 4 | 5 | export type SFCInstallWithContext = SFCWithInstall & { 6 | _context: AppContext | null 7 | } 8 | -------------------------------------------------------------------------------- /packages/components/descriptions/src/descriptions-row.ts: -------------------------------------------------------------------------------- 1 | import { buildProps } from '@element-plus/utils' 2 | 3 | export const descriptionsRowProps = buildProps({ 4 | row: { 5 | type: Array, 6 | default: () => [], 7 | }, 8 | } as const) 9 | -------------------------------------------------------------------------------- /packages/components/drawer/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Drawer from './src/drawer.vue' 3 | 4 | export const ElDrawer = withInstall(Drawer) 5 | export default ElDrawer 6 | 7 | export * from './src/drawer' 8 | -------------------------------------------------------------------------------- /packages/components/switch/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Switch from './src/switch.vue' 3 | 4 | export const ElSwitch = withInstall(Switch) 5 | export default ElSwitch 6 | 7 | export * from './src/switch' 8 | -------------------------------------------------------------------------------- /packages/directives/index.ts: -------------------------------------------------------------------------------- 1 | export { default as ClickOutside } from './click-outside' 2 | export { vRepeatClick } from './repeat-click' 3 | export { default as TrapFocus } from './trap-focus' 4 | export { default as Mousewheel } from './mousewheel' 5 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/radio-group.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'common/var' as *; 3 | 4 | @include b(radio-group) { 5 | display: inline-flex; 6 | align-items: center; 7 | flex-wrap: wrap; 8 | font-size: 0; 9 | } 10 | -------------------------------------------------------------------------------- /docs/examples/input-number/step-strictly.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /docs/examples/steps/with-status.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/calendar/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/calendar.scss' 3 | import '@element-plus/components/button/style' 4 | import '@element-plus/components/button-group/style' 5 | -------------------------------------------------------------------------------- /packages/components/checkbox/src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-checkbox-disabled' 2 | export * from './use-checkbox-event' 3 | export * from './use-checkbox-model' 4 | export * from './use-checkbox-status' 5 | export * from './use-checkbox' 6 | -------------------------------------------------------------------------------- /packages/components/color-picker/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/color-picker.scss' 3 | import '@element-plus/components/input/style' 4 | import '@element-plus/components/button/style' 5 | -------------------------------------------------------------------------------- /packages/components/menu/src/menu-item-group.ts: -------------------------------------------------------------------------------- 1 | import type { ExtractPropTypes } from 'vue' 2 | 3 | export const menuItemGroupProps = { 4 | title: String, 5 | } as const 6 | export type MenuItemGroupProps = ExtractPropTypes 7 | -------------------------------------------------------------------------------- /packages/components/popconfirm/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/popconfirm.scss' 3 | import '@element-plus/components/popover/style' 4 | import '@element-plus/components/button/style' 5 | -------------------------------------------------------------------------------- /packages/components/result/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Result from './src/result.vue' 3 | 4 | export const ElResult = withInstall(Result) 5 | 6 | export default ElResult 7 | 8 | export * from './src/result' 9 | -------------------------------------------------------------------------------- /packages/components/row/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { ComputedRef, InjectionKey } from 'vue' 2 | 3 | interface RowContext { 4 | gutter: ComputedRef 5 | } 6 | 7 | export const rowContextKey: InjectionKey = Symbol('rowContextKey') 8 | -------------------------------------------------------------------------------- /packages/components/slider/src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-lifecycle' 2 | export * from './use-marks' 3 | export * from './use-slide' 4 | export * from './use-slider-button' 5 | export * from './use-stops' 6 | export * from './use-watch' 7 | -------------------------------------------------------------------------------- /packages/components/slider/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/slider.scss' 3 | import '@element-plus/components/input-number/style' 4 | import '@element-plus/components/tooltip/style' 5 | -------------------------------------------------------------------------------- /packages/components/table-column/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/table-column.scss' 3 | import '@element-plus/components/checkbox/style' 4 | import '@element-plus/components/tag/style' 5 | -------------------------------------------------------------------------------- /packages/components/table-v2/src/composables/index.ts: -------------------------------------------------------------------------------- 1 | export * from './use-columns' 2 | export * from './use-scrollbar' 3 | export * from './use-row' 4 | export * from './use-data' 5 | export * from './use-styles' 6 | export * from './use-auto-resize' 7 | -------------------------------------------------------------------------------- /packages/components/table-v2/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/empty/style' 3 | import '@element-plus/components/virtual-list/style' 4 | import '@element-plus/theme-chalk/src/table-v2.scss' 5 | -------------------------------------------------------------------------------- /packages/components/tree-v2/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/tree.scss' 3 | import '@element-plus/components/checkbox/style' 4 | import '@element-plus/components/virtual-list/style' 5 | -------------------------------------------------------------------------------- /docs/examples/color-picker/alpha.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /internal/build/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild' 2 | 3 | export default defineBuildConfig({ 4 | entries: ['src/index'], 5 | clean: true, 6 | declaration: true, 7 | rollup: { 8 | emitCJS: true, 9 | }, 10 | }) 11 | -------------------------------------------------------------------------------- /packages/components/descriptions/src/token.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | import type { IDescriptionsInject } from './descriptions.type' 3 | 4 | export const descriptionsKey: InjectionKey = 5 | Symbol('elDescriptions') 6 | -------------------------------------------------------------------------------- /packages/components/divider/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Divider from './src/divider.vue' 4 | 5 | export const ElDivider = withInstall(Divider) 6 | export default ElDivider 7 | 8 | export * from './src/divider' 9 | -------------------------------------------------------------------------------- /packages/components/slider/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-slider.css' 3 | import '@element-plus/components/input-number/style/css' 4 | import '@element-plus/components/tooltip/style/css' 5 | -------------------------------------------------------------------------------- /packages/components/tree-v2/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-tree.css' 3 | import '@element-plus/components/checkbox/style/css' 4 | import '@element-plus/components/virtual-list/style/css' 5 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/time-picker.scss: -------------------------------------------------------------------------------- 1 | @use './date-picker/picker.scss'; 2 | @use './date-picker/picker-panel.scss'; 3 | @use './date-picker/time-spinner.scss'; 4 | @use './date-picker/time-picker.scss'; 5 | @use './date-picker/time-range-picker.scss'; 6 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | pnpm-lock.yaml 4 | CHANGELOG.en-US.md 5 | docs/components.d.ts 6 | coverage 7 | play 8 | ssr-testing/cases/* 9 | docs/.vitepress/i18n/* 10 | docs/.vitepress/crowdin/* 11 | !docs/.vitepress/crowdin/en-US 12 | !.* 13 | -------------------------------------------------------------------------------- /docs/examples/input-number/precision.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 10 | -------------------------------------------------------------------------------- /internal/build-utils/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild' 2 | 3 | export default defineBuildConfig({ 4 | entries: ['src/index'], 5 | clean: true, 6 | declaration: true, 7 | rollup: { 8 | emitCJS: true, 9 | }, 10 | }) 11 | -------------------------------------------------------------------------------- /packages/components/calendar/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-calendar.css' 3 | import '@element-plus/components/button/style/css' 4 | import '@element-plus/components/button-group/style/css' 5 | -------------------------------------------------------------------------------- /packages/components/check-tag/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import CheckTag from './src/check-tag.vue' 3 | 4 | export const ElCheckTag = withInstall(CheckTag) 5 | export default ElCheckTag 6 | 7 | export * from './src/check-tag' 8 | -------------------------------------------------------------------------------- /packages/components/color-picker/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-color-picker.css' 3 | import '@element-plus/components/input/style/css' 4 | import '@element-plus/components/button/style/css' 5 | -------------------------------------------------------------------------------- /packages/components/popconfirm/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-popconfirm.css' 3 | import '@element-plus/components/popover/style/css' 4 | import '@element-plus/components/button/style/css' 5 | -------------------------------------------------------------------------------- /packages/components/progress/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Progress from './src/progress.vue' 3 | 4 | export const ElProgress = withInstall(Progress) 5 | export default ElProgress 6 | 7 | export * from './src/progress' 8 | -------------------------------------------------------------------------------- /packages/components/row/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Row from './src/row.vue' 3 | 4 | export const ElRow = withInstall(Row) 5 | export default ElRow 6 | 7 | export * from './src/row' 8 | export * from './src/constants' 9 | -------------------------------------------------------------------------------- /packages/components/table-column/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-table-column.css' 3 | import '@element-plus/components/checkbox/style/css' 4 | import '@element-plus/components/tag/style/css' 5 | -------------------------------------------------------------------------------- /packages/components/table-v2/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/empty/style/css' 3 | import '@element-plus/components/virtual-list/style/css' 4 | import '@element-plus/theme-chalk/el-table-v2.css' 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Create new issue 4 | url: https://issue.element-plus.org/ 5 | about: The issue which is not created via https://issue.element-plus.org/ will be closed immediately. 6 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/fullscreen.ts: -------------------------------------------------------------------------------- 1 | import { useToggle } from '@vueuse/core' 2 | export const useFullScreen = () => { 3 | const [isFullScreen, toggleFullScreen] = useToggle() 4 | return { 5 | isFullScreen, 6 | toggleFullScreen, 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/constant.ts: -------------------------------------------------------------------------------- 1 | export const defaultLang = 'en-US' 2 | 3 | export const PREFERRED_LANG_KEY = 'preferred_lang' 4 | 5 | export const breakpoints = { 6 | sm: 480, 7 | md: 768, 8 | lg: 960, 9 | xlg: 1280, 10 | xxl: 1440, 11 | } 12 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/overlay.scss: -------------------------------------------------------------------------------- 1 | .overlay { 2 | position: fixed; 3 | top: 0; 4 | right: 0; 5 | bottom: 0; 6 | left: 0; 7 | background: rgba(0, 0, 0, 0.6); 8 | transition: opacity 0.5s; 9 | z-index: var(--overlay-z-index); 10 | } 11 | -------------------------------------------------------------------------------- /internal/build-constants/build.config.ts: -------------------------------------------------------------------------------- 1 | import { defineBuildConfig } from 'unbuild' 2 | 3 | export default defineBuildConfig({ 4 | entries: ['src/index'], 5 | clean: true, 6 | declaration: true, 7 | rollup: { 8 | emitCJS: true, 9 | }, 10 | }) 11 | -------------------------------------------------------------------------------- /packages/components/countdown/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Countdown from './src/countdown.vue' 3 | 4 | export const ElCountdown = withInstall(Countdown) 5 | export default ElCountdown 6 | 7 | export * from './src/countdown' 8 | -------------------------------------------------------------------------------- /packages/components/statistic/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Statistic from './src/statistic.vue' 3 | 4 | export const ElStatistic = withInstall(Statistic) 5 | 6 | export default ElStatistic 7 | export * from './src/statistic' 8 | -------------------------------------------------------------------------------- /packages/components/teleport/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Teleport from './src/teleport.vue' 3 | 4 | export const ElTeleport = withInstall(Teleport) 5 | 6 | export default ElTeleport 7 | 8 | export * from './src/teleport' 9 | -------------------------------------------------------------------------------- /packages/components/transfer/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Transfer from './src/transfer.vue' 4 | 5 | export const ElTransfer = withInstall(Transfer) 6 | export default ElTransfer 7 | 8 | export * from './src/transfer' 9 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/vp-overlay.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /packages/components/button/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Button from './button.vue' 2 | import type ButtonGroup from './button-group.vue' 3 | 4 | export type ButtonInstance = InstanceType 5 | export type ButtonGroupInstance = InstanceType 6 | -------------------------------------------------------------------------------- /docs/.vitepress/plugins/table-wrapper.ts: -------------------------------------------------------------------------------- 1 | import type MarkdownIt from 'markdown-it' 2 | 3 | export default (md: MarkdownIt): void => { 4 | md.renderer.rules.table_open = () => '
' 5 | md.renderer.rules.table_close = () => '
' 6 | } 7 | -------------------------------------------------------------------------------- /packages/components/popconfirm/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Popconfirm from './src/popconfirm.vue' 4 | 5 | export const ElPopconfirm = withInstall(Popconfirm) 6 | export default ElPopconfirm 7 | 8 | export * from './src/popconfirm' 9 | -------------------------------------------------------------------------------- /packages/hooks/use-focus/index.ts: -------------------------------------------------------------------------------- 1 | import type { Ref } from 'vue' 2 | 3 | export const useFocus = ( 4 | el: Ref<{ 5 | focus: () => void 6 | } | null> 7 | ) => { 8 | return { 9 | focus: () => { 10 | el.value?.focus?.() 11 | }, 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/utils/vue/size.ts: -------------------------------------------------------------------------------- 1 | import { componentSizeMap } from '@element-plus/constants' 2 | 3 | import type { ComponentSize } from '@element-plus/constants' 4 | 5 | export const getComponentSize = (size?: ComponentSize) => { 6 | return componentSizeMap[size || 'default'] 7 | } 8 | -------------------------------------------------------------------------------- /tsconfig.vite-config.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.node.json", 3 | "compilerOptions": { 4 | "composite": true, 5 | "types": ["node"] 6 | }, 7 | "include": ["**/vite.config.*", "**/vitest.config.*", "**/vite.init.*"], 8 | "exclude": ["docs"] 9 | } 10 | -------------------------------------------------------------------------------- /docs/examples/container/layout-hmf.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/examples/text/truncated.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /packages/components/input-number/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import InputNumber from './src/input-number.vue' 3 | 4 | export const ElInputNumber = withInstall(InputNumber) 5 | 6 | export default ElInputNumber 7 | export * from './src/input-number' 8 | -------------------------------------------------------------------------------- /packages/components/message/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstallFunction } from '@element-plus/utils' 2 | 3 | import Message from './src/method' 4 | 5 | export const ElMessage = withInstallFunction(Message, '$message') 6 | export default ElMessage 7 | 8 | export * from './src/message' 9 | -------------------------------------------------------------------------------- /packages/components/page-header/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import PageHeader from './src/page-header.vue' 4 | 5 | export const ElPageHeader = withInstall(PageHeader) 6 | export default ElPageHeader 7 | 8 | export * from './src/page-header' 9 | -------------------------------------------------------------------------------- /packages/components/upload/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { ComputedRef, InjectionKey } from 'vue' 2 | 3 | export interface UploadContext { 4 | accept: ComputedRef 5 | } 6 | 7 | export const uploadContextKey: InjectionKey = 8 | Symbol('uploadContextKey') 9 | -------------------------------------------------------------------------------- /ssr-testing/cases/skeleton.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/examples/skeleton/basic-usage.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /internal/build-constants/src/pkg.ts: -------------------------------------------------------------------------------- 1 | export const PKG_PREFIX = '@element-plus' 2 | export const PKG_NAME = 'element-plus' 3 | export const PKG_CAMELCASE_NAME = 'ElementPlus' 4 | export const PKG_CAMELCASE_LOCAL_NAME = 'ElementPlusLocale' 5 | export const PKG_BRAND_NAME = 'Element Plus' 6 | -------------------------------------------------------------------------------- /packages/components/carousel/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Carousel from './carousel.vue' 2 | import type CarouselItem from './carousel-item.vue' 3 | 4 | export type CarouselInstance = InstanceType 5 | export type CarouselItemInstance = InstanceType 6 | -------------------------------------------------------------------------------- /packages/components/collapse/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type Collapse from './collapse.vue' 2 | import type CollapseItem from './collapse-item.vue' 3 | 4 | export type CollapseInstance = InstanceType 5 | export type CollapseItemInstance = InstanceType 6 | -------------------------------------------------------------------------------- /packages/components/color-picker/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import ColorPicker from './src/color-picker.vue' 4 | 5 | export const ElColorPicker = withInstall(ColorPicker) 6 | export default ElColorPicker 7 | 8 | export * from './src/color-picker' 9 | -------------------------------------------------------------------------------- /packages/components/image-viewer/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import ImageViewer from './src/image-viewer.vue' 4 | 5 | export const ElImageViewer = withInstall(ImageViewer) 6 | export default ElImageViewer 7 | 8 | export * from './src/image-viewer' 9 | -------------------------------------------------------------------------------- /packages/constants/size.ts: -------------------------------------------------------------------------------- 1 | export const componentSizes = ['', 'default', 'small', 'large'] as const 2 | 3 | export type ComponentSize = typeof componentSizes[number] 4 | 5 | export const componentSizeMap = { 6 | large: 40, 7 | default: 32, 8 | small: 24, 9 | } as const 10 | -------------------------------------------------------------------------------- /docs/examples/divider/vertical-divider.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/examples/pagination/small-pagination.vue: -------------------------------------------------------------------------------- 1 | 11 | -------------------------------------------------------------------------------- /packages/components/autocomplete/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Autocomplete from './src/autocomplete.vue' 3 | 4 | export const ElAutocomplete = withInstall(Autocomplete) 5 | 6 | export default ElAutocomplete 7 | 8 | export * from './src/autocomplete' 9 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/dev/version-tag.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/globals/vp-api-primitive.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 15 | -------------------------------------------------------------------------------- /docs/examples/steps/vertical.vue: -------------------------------------------------------------------------------- 1 | 10 | -------------------------------------------------------------------------------- /docs/examples/tooltip-v2/render-to-root.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/public/sw.js: -------------------------------------------------------------------------------- 1 | self.addEventListener('activate', (e) => { 2 | e.waitUntil( 3 | caches.keys().then((t) => { 4 | return Promise.all( 5 | t.map((n) => { 6 | return caches.delete(n) 7 | }) 8 | ) 9 | }) 10 | ) 11 | }) 12 | self.skipWaiting() 13 | -------------------------------------------------------------------------------- /packages/components/notification/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstallFunction } from '@element-plus/utils' 2 | 3 | import Notify from './src/notify' 4 | 5 | export const ElNotification = withInstallFunction(Notify, '$notify') 6 | export default ElNotification 7 | 8 | export * from './src/notification' 9 | -------------------------------------------------------------------------------- /packages/components/slider/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Slider from './src/slider.vue' 4 | 5 | export const ElSlider = withInstall(Slider) 6 | export default ElSlider 7 | 8 | export * from './src/slider' 9 | export * from './src/constants' 10 | -------------------------------------------------------------------------------- /packages/components/table/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/table.scss' 3 | import '@element-plus/components/checkbox/style' 4 | import '@element-plus/components/tooltip/style' 5 | import '@element-plus/components/scrollbar/style' 6 | -------------------------------------------------------------------------------- /packages/utils/vue/index.ts: -------------------------------------------------------------------------------- 1 | export * from './global-node' 2 | export * from './icon' 3 | export * from './install' 4 | export * from './props' 5 | export * from './refs' 6 | export * from './size' 7 | export * from './typescript' 8 | export * from './validator' 9 | export * from './vnode' 10 | -------------------------------------------------------------------------------- /packages/components/avatar/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Avatar from './src/avatar.vue' 3 | 4 | export const ElAvatar = withInstall(Avatar) 5 | export default ElAvatar 6 | 7 | export * from './src/avatar' 8 | export type { AvatarInstance } from './src/instance' 9 | -------------------------------------------------------------------------------- /packages/components/card/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Card from './src/card.vue' 4 | 5 | export const ElCard = withInstall(Card) 6 | export default ElCard 7 | 8 | export * from './src/card' 9 | export type { CardInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/message-box/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/message-box.scss' 3 | import '@element-plus/components/button/style' 4 | import '@element-plus/components/input/style' 5 | import '@element-plus/components/overlay/style' 6 | -------------------------------------------------------------------------------- /docs/examples/input/textarea.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 14 | -------------------------------------------------------------------------------- /docs/examples/switch/disabled.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | -------------------------------------------------------------------------------- /docs/examples/tag/basic.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/autocomplete/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/autocomplete.scss' 3 | import '@element-plus/components/input/style' 4 | import '@element-plus/components/scrollbar/style' 5 | import '@element-plus/components/popper/style' 6 | -------------------------------------------------------------------------------- /packages/components/breadcrumb/src/instances.ts: -------------------------------------------------------------------------------- 1 | import type Breadcrumb from './breadcrumb.vue' 2 | import type BreadcrumbItem from './breadcrumb-item.vue' 3 | 4 | export type BreadcrumbItemInstance = InstanceType 5 | export type BreadcrumbInstance = InstanceType 6 | -------------------------------------------------------------------------------- /packages/components/time-picker/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/time-picker.scss' 3 | import '@element-plus/components/input/style' 4 | import '@element-plus/components/scrollbar/style' 5 | import '@element-plus/components/popper/style' 6 | -------------------------------------------------------------------------------- /ssr-testing/cases/tag.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.web.json" }, 5 | { "path": "./tsconfig.play.json" }, 6 | { "path": "./tsconfig.node.json" }, 7 | { "path": "./tsconfig.vite-config.json" }, 8 | { "path": "./tsconfig.vitest.json" } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /docs/examples/rate/text.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/examples/steps/with-description.vue: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /packages/components/alert/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Alert from './src/alert.vue' 4 | 5 | export const ElAlert = withInstall(Alert) 6 | export default ElAlert 7 | 8 | export * from './src/alert' 9 | export type { AlertInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/badge/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Badge from './src/badge.vue' 4 | 5 | export const ElBadge = withInstall(Badge) 6 | export default ElBadge 7 | 8 | export * from './src/badge' 9 | export type { BadgeInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/cascader-panel/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/cascader-panel.scss' 3 | import '@element-plus/components/checkbox/style' 4 | import '@element-plus/components/radio/style' 5 | import '@element-plus/components/scrollbar/style' 6 | -------------------------------------------------------------------------------- /packages/components/empty/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Empty from './src/empty.vue' 4 | 5 | export const ElEmpty = withInstall(Empty) 6 | export default ElEmpty 7 | 8 | export * from './src/empty' 9 | export type { EmptyInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/input/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Input from './src/input.vue' 4 | 5 | export const ElInput = withInstall(Input) 6 | export default ElInput 7 | 8 | export * from './src/input' 9 | export type { InputInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/table/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-table.css' 3 | import '@element-plus/components/checkbox/style/css' 4 | import '@element-plus/components/tooltip/style/css' 5 | import '@element-plus/components/scrollbar/style/css' 6 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/icons/expand.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/locale.ts: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue' 2 | import { useLang } from './lang' 3 | 4 | export const useLocale = ( 5 | localeJson: Record> 6 | ) => { 7 | const lang = useLang() 8 | return computed(() => localeJson[lang.value]) 9 | } 10 | -------------------------------------------------------------------------------- /docs/examples/input/password.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 14 | -------------------------------------------------------------------------------- /docs/examples/switch/loading.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 12 | -------------------------------------------------------------------------------- /docs/public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | #409eff 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /packages/components/message-box/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-message-box.css' 3 | import '@element-plus/components/button/style/css' 4 | import '@element-plus/components/input/style/css' 5 | import '@element-plus/components/overlay/style/css' 6 | -------------------------------------------------------------------------------- /packages/components/space/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Space from './src/space' 4 | 5 | export const ElSpace = withInstall(Space) 6 | export default ElSpace 7 | 8 | export * from './src/space' 9 | export * from './src/item' 10 | export * from './src/use-space' 11 | -------------------------------------------------------------------------------- /packages/components/time-picker/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-time-picker.css' 3 | import '@element-plus/components/input/style/css' 4 | import '@element-plus/components/scrollbar/style/css' 5 | import '@element-plus/components/popper/style/css' 6 | -------------------------------------------------------------------------------- /packages/hooks/use-prop/index.ts: -------------------------------------------------------------------------------- 1 | import { computed, getCurrentInstance } from 'vue' 2 | import type { ComputedRef } from 'vue' 3 | 4 | export const useProp = (name: string): ComputedRef => { 5 | const vm = getCurrentInstance() 6 | return computed(() => (vm?.proxy?.$props as any)?.[name]) 7 | } 8 | -------------------------------------------------------------------------------- /packages/utils/__tests__/typescript.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { mutable } from '..' 3 | 4 | describe('typescript', () => { 5 | it('mutable should work', () => { 6 | const obj = { key: 'value', foo: 'bar' } 7 | expect(mutable(obj)).toBe(obj) 8 | }) 9 | }) 10 | -------------------------------------------------------------------------------- /packages/components/autocomplete/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-autocomplete.css' 3 | import '@element-plus/components/input/style/css' 4 | import '@element-plus/components/scrollbar/style/css' 5 | import '@element-plus/components/popper/style/css' 6 | -------------------------------------------------------------------------------- /packages/components/pagination/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Pagination from './src/pagination' 4 | 5 | export const ElPagination = withInstall(Pagination) 6 | export default ElPagination 7 | 8 | export * from './src/pagination' 9 | export * from './src/constants' 10 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/social-links.ts: -------------------------------------------------------------------------------- 1 | import GitHubIcon from '~icons/ri/github-fill' 2 | 3 | export const useSocialLinks = () => { 4 | return [ 5 | { 6 | link: 'https://github.com/element-plus/element-plus', 7 | icon: GitHubIcon, 8 | text: 'GitHub', 9 | }, 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /docs/examples/tabs/border-card.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /packages/components/backtop/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Backtop from './src/backtop.vue' 4 | 5 | export const ElBacktop = withInstall(Backtop) 6 | export default ElBacktop 7 | 8 | export * from './src/backtop' 9 | export type { BacktopInstance } from './src/instance' 10 | -------------------------------------------------------------------------------- /packages/components/cascader-panel/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-cascader-panel.css' 3 | import '@element-plus/components/checkbox/style/css' 4 | import '@element-plus/components/radio/style/css' 5 | import '@element-plus/components/scrollbar/style/css' 6 | -------------------------------------------------------------------------------- /packages/components/dialog/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Dialog from './src/dialog.vue' 3 | 4 | export const ElDialog = withInstall(Dialog) 5 | export default ElDialog 6 | 7 | export * from './src/use-dialog' 8 | export * from './src/dialog' 9 | export * from './src/constants' 10 | -------------------------------------------------------------------------------- /docs/.vitepress/dark-mode.js: -------------------------------------------------------------------------------- 1 | ;(() => { 2 | const saved = localStorage.getItem('el-theme-appearance') 3 | if ( 4 | saved === 'auto' 5 | ? window.matchMedia(`(prefers-color-scheme: dark)`).matches 6 | : saved === 'dark' 7 | ) { 8 | document.documentElement.classList.add('dark') 9 | } 10 | })() 11 | -------------------------------------------------------------------------------- /docs/examples/rate/sizes.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/container.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | 3 | @include b(container) { 4 | display: flex; 5 | flex-direction: row; 6 | flex: 1; 7 | flex-basis: auto; 8 | box-sizing: border-box; 9 | min-width: 0; 10 | 11 | @include when(vertical) { 12 | flex-direction: column; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/examples/rate/readonly.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /docs/examples/time-select/basic.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /packages/components/calendar/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type DateTable from './date-table.vue' 2 | import type Calendar from './calendar.vue' 3 | 4 | export type DateTableInstance = InstanceType 5 | export type CalendarDateTableInstance = DateTableInstance 6 | export type CalendarInstance = InstanceType 7 | -------------------------------------------------------------------------------- /packages/components/container/src/main.vue: -------------------------------------------------------------------------------- 1 | 6 | 15 | -------------------------------------------------------------------------------- /packages/components/scrollbar/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | 3 | export interface ScrollbarContext { 4 | scrollbarElement: HTMLDivElement 5 | wrapElement: HTMLDivElement 6 | } 7 | 8 | export const scrollbarContextKey: InjectionKey = Symbol( 9 | 'scrollbarContextKey' 10 | ) 11 | -------------------------------------------------------------------------------- /ssr-testing/cases/time-select.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 16 | -------------------------------------------------------------------------------- /docs/examples/input-number/basic.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 13 | -------------------------------------------------------------------------------- /docs/examples/checkbox/disabled.vue: -------------------------------------------------------------------------------- 1 | 5 | 6 | 11 | -------------------------------------------------------------------------------- /packages/components/form/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | import type { FormContext, FormItemContext } from './types' 3 | 4 | export const formContextKey: InjectionKey = 5 | Symbol('formContextKey') 6 | export const formItemContextKey: InjectionKey = 7 | Symbol('formItemContextKey') 8 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/select/common.scss: -------------------------------------------------------------------------------- 1 | @use '../mixins/mixins' as *; 2 | @use '../mixins/utils' as *; 3 | 4 | // same style in select & select-v2 5 | @mixin select-common($name) { 6 | .#{$namespace}-#{$name}__tags-text { 7 | display: inline-block; 8 | line-height: normal; 9 | @include utils-ellipsis; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /docs/examples/container/layout-ahm.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /docs/examples/container/layout-ham.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /docs/examples/page-header/basic.vue: -------------------------------------------------------------------------------- 1 | 8 | 13 | -------------------------------------------------------------------------------- /docs/examples/space/literal-type-spacer.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /packages/components/cascader/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/cascader.scss' 3 | import '@element-plus/components/input/style' 4 | import '@element-plus/components/popper/style' 5 | import '@element-plus/components/tag/style' 6 | import '@element-plus/components/cascader-panel/style' 7 | -------------------------------------------------------------------------------- /packages/components/config-provider/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { ConfigProviderProps } from './config-provider-props' 2 | import type { InjectionKey, Ref } from 'vue' 3 | 4 | export type ConfigProviderContext = Partial 5 | 6 | export const configProviderContextKey: InjectionKey< 7 | Ref 8 | > = Symbol() 9 | -------------------------------------------------------------------------------- /packages/utils/raf.ts: -------------------------------------------------------------------------------- 1 | import { isClient } from './browser' 2 | 3 | export const rAF = (fn: () => void) => 4 | isClient 5 | ? window.requestAnimationFrame(fn) 6 | : (setTimeout(fn, 16) as unknown as number) 7 | 8 | export const cAF = (handle: number) => 9 | isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle) 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Editor directories and files 2 | .idea 3 | 4 | # Package Manager 5 | node_modules 6 | .pnpm-debug.log* 7 | 8 | # System 9 | .DS_Store 10 | 11 | # Bundle 12 | dist 13 | coverage 14 | packages/element-plus/version.ts 15 | 16 | # local env files 17 | *.local 18 | .eslintcache 19 | cypress/screenshots/* 20 | cypress/videos/* 21 | tmp 22 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/navbar-locale.ts: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue' 2 | import navbarLocale from '../../i18n/component/navbar.json' 3 | import { useLang } from './lang' 4 | 5 | export function useNavbarLocale() { 6 | const lang = useLang() 7 | 8 | return computed>(() => navbarLocale[lang.value]) 9 | } 10 | -------------------------------------------------------------------------------- /packages/components/container/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-container.css' 3 | import '@element-plus/theme-chalk/el-aside.css' 4 | import '@element-plus/theme-chalk/el-footer.css' 5 | import '@element-plus/theme-chalk/el-header.css' 6 | import '@element-plus/theme-chalk/el-main.css' 7 | -------------------------------------------------------------------------------- /packages/components/date-picker/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/date-picker.scss' 3 | import '@element-plus/components/input/style' 4 | import '@element-plus/components/scrollbar/style' 5 | import '@element-plus/components/popper/style' 6 | import '@element-plus/components/button/style' 7 | -------------------------------------------------------------------------------- /packages/components/dropdown/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/button/style' 3 | import '@element-plus/components/button-group/style' 4 | import '@element-plus/components/popper/style' 5 | import '@element-plus/components/scrollbar/style' 6 | import '@element-plus/theme-chalk/src/dropdown.scss' 7 | -------------------------------------------------------------------------------- /packages/components/transfer/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/input/style' 3 | import '@element-plus/components/button/style' 4 | import '@element-plus/components/checkbox/style' 5 | import '@element-plus/components/checkbox-group/style' 6 | import '@element-plus/theme-chalk/src/transfer.scss' 7 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/display.scss: -------------------------------------------------------------------------------- 1 | @use 'common/var' as *; 2 | @use 'mixins/mixins' as *; 3 | 4 | .hidden { 5 | @each $break-point-name, $value in $breakpoints-spec { 6 | &-#{$break-point-name} { 7 | @include res($break-point-name, $breakpoints-spec) { 8 | display: none !important; 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/examples/link/underline.vue: -------------------------------------------------------------------------------- 1 | 7 | 15 | -------------------------------------------------------------------------------- /docs/examples/page-header/custom-icon.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /packages/components/container/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/container.scss' 3 | import '@element-plus/theme-chalk/src/aside.scss' 4 | import '@element-plus/theme-chalk/src/footer.scss' 5 | import '@element-plus/theme-chalk/src/header.scss' 6 | import '@element-plus/theme-chalk/src/main.scss' 7 | -------------------------------------------------------------------------------- /packages/components/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Tooltip from './src/tooltip.vue' 3 | 4 | export const ElTooltip = withInstall(Tooltip) 5 | export * from './src/tooltip' 6 | export * from './src/trigger' 7 | export * from './src/content' 8 | export * from './src/constants' 9 | export default ElTooltip 10 | -------------------------------------------------------------------------------- /packages/components/visual-hidden/src/visual-hidden.ts: -------------------------------------------------------------------------------- 1 | import { buildProps, definePropType } from '@element-plus/utils' 2 | import type { StyleValue } from 'vue' 3 | 4 | export const visualHiddenProps = buildProps({ 5 | style: { 6 | type: definePropType([String, Object, Array]), 7 | default: () => ({}), 8 | }, 9 | } as const) 10 | -------------------------------------------------------------------------------- /packages/test-utils/style-plugin.ts: -------------------------------------------------------------------------------- 1 | import { config } from '@vue/test-utils' 2 | 3 | const stylePlugin = (wrapper: any) => { 4 | return { 5 | style: wrapper.element.style, 6 | } 7 | } 8 | 9 | export default function install() { 10 | config.plugins.DOMWrapper.install(stylePlugin) 11 | config.plugins.VueWrapper.install(stylePlugin) 12 | } 13 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/composables/nav.ts: -------------------------------------------------------------------------------- 1 | import { computed } from 'vue' 2 | import { useData } from 'vitepress' 3 | 4 | import { useLang } from './lang' 5 | 6 | export const useNav = () => { 7 | const { theme } = useData() 8 | const lang = useLang() 9 | 10 | return computed(() => { 11 | return theme.value.nav[lang.value] 12 | }) 13 | } 14 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/styles/vars.scss: -------------------------------------------------------------------------------- 1 | // SCSS variables 2 | // breakpoints 3 | $breakpoint-max: 1680px !default; 4 | $breakpoint-xxl: 1440px !default; 5 | $breakpoint-xlg: 1280px !default; 6 | $breakpoint-lg: 960px !default; 7 | $breakpoint-md: 768px !default; 8 | $breakpoint-sm: 480px !default; 9 | 10 | // scrollbar width 11 | $scrollbar-size: 6px; 12 | -------------------------------------------------------------------------------- /packages/components/cascader/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-cascader.css' 3 | import '@element-plus/components/input/style/css' 4 | import '@element-plus/components/popper/style/css' 5 | import '@element-plus/components/tag/style/css' 6 | import '@element-plus/components/cascader-panel/style/css' 7 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/footer.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'mixins/var' as *; 3 | @use 'common/var' as *; 4 | 5 | @include b(footer) { 6 | @include set-component-css-var('footer', $footer); 7 | 8 | padding: getCssVar('footer-padding'); 9 | box-sizing: border-box; 10 | flex-shrink: 0; 11 | height: getCssVar('footer-height'); 12 | } 13 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/header.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'mixins/var' as *; 3 | @use 'common/var' as *; 4 | 5 | @include b(header) { 6 | @include set-component-css-var('header', $header); 7 | 8 | padding: getCssVar('header-padding'); 9 | box-sizing: border-box; 10 | flex-shrink: 0; 11 | height: getCssVar('header-height'); 12 | } 13 | -------------------------------------------------------------------------------- /ssr-testing/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.node.json", 3 | "include": ["../packages/components/**/ssr/*.vue", "**/*"], 4 | "compilerOptions": { 5 | "isolatedModules": false, 6 | "module": "ESNext", 7 | "target": "ES5", 8 | "lib": ["ES5", "DOM"], 9 | "jsx": "preserve", 10 | "esModuleInterop": true 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/examples/switch/custom-action-icon.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/examples/time-select/time-formats.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /packages/components/date-picker/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-date-picker.css' 3 | import '@element-plus/components/input/style/css' 4 | import '@element-plus/components/scrollbar/style/css' 5 | import '@element-plus/components/popper/style/css' 6 | import '@element-plus/components/button/style/css' 7 | -------------------------------------------------------------------------------- /packages/components/dropdown/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/button/style/css' 3 | import '@element-plus/components/button-group/style/css' 4 | import '@element-plus/components/popper/style/css' 5 | import '@element-plus/components/scrollbar/style/css' 6 | import '@element-plus/theme-chalk/el-dropdown.css' 7 | -------------------------------------------------------------------------------- /packages/components/transfer/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/input/style/css' 3 | import '@element-plus/components/button/style/css' 4 | import '@element-plus/components/checkbox/style/css' 5 | import '@element-plus/components/checkbox-group/style/css' 6 | import '@element-plus/theme-chalk/el-transfer.css' 7 | -------------------------------------------------------------------------------- /docs/examples/card/simple.vue: -------------------------------------------------------------------------------- 1 | 6 | 19 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/main.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'mixins/var' as *; 3 | @use 'common/var' as *; 4 | 5 | @include b(main) { 6 | @include set-component-css-var('main', $main); 7 | 8 | display: block; 9 | flex: 1; 10 | flex-basis: auto; 11 | overflow: auto; 12 | box-sizing: border-box; 13 | padding: getCssVar('main-padding'); 14 | } 15 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/icons/dark.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/examples/badge/customize.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | -------------------------------------------------------------------------------- /docs/examples/steps/centered.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /docs/examples/steps/with-icon.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 12 | -------------------------------------------------------------------------------- /packages/components/scrollbar/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | 3 | import Scrollbar from './src/scrollbar.vue' 4 | 5 | export const ElScrollbar = withInstall(Scrollbar) 6 | export default ElScrollbar 7 | 8 | export * from './src/util' 9 | export * from './src/scrollbar' 10 | export * from './src/thumb' 11 | export * from './src/constants' 12 | -------------------------------------------------------------------------------- /packages/locale/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@element-plus/locale", 3 | "version": "0.0.5", 4 | "description": "Element Plus locale", 5 | "license": "MIT", 6 | "main": "index.ts", 7 | "module": "index.ts", 8 | "unpkg": "index.js", 9 | "jsdelivr": "index.js", 10 | "types": "index.d.ts", 11 | "gitHead": "c69724230befa8fede0e6b9c37fb0b7e39fd7cdd" 12 | } 13 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/popconfirm.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'common/var' as *; 3 | 4 | @include b(popconfirm) { 5 | @include e(main) { 6 | display: flex; 7 | align-items: center; 8 | } 9 | @include e(icon) { 10 | margin-right: 5px; 11 | } 12 | @include e(action) { 13 | text-align: right; 14 | margin-top: 8px; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /scripts/publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | pnpm i --frozen-lockfile 6 | pnpm update:version 7 | 8 | pnpm build 9 | 10 | cd dist/element-plus 11 | npm publish --provenance 12 | cd - 13 | 14 | cd internal/eslint-config 15 | npm publish 16 | cd - 17 | 18 | cd internal/metadata 19 | pnpm build 20 | npm publish 21 | cd - 22 | 23 | echo "✅ Publish completed" 24 | -------------------------------------------------------------------------------- /ssr-testing/cases/alert.vue: -------------------------------------------------------------------------------- 1 | 7 | -------------------------------------------------------------------------------- /docs/examples/button/tag.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /docs/examples/radio/disabled.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /scripts/file-check.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | CURRENT_PUBLISHED_TARBALL="$(npm view element-plus dist.tarball)" 4 | 5 | echo $CURRENT_PUBLISHED_TARBALL 6 | 7 | mkdir -p tmp 8 | 9 | curl -o ./tmp/latest.tgz $CURRENT_PUBLISHED_TARBALL 10 | tar zxvf ./tmp/latest.tgz -C ./tmp 11 | 12 | diff -qr ./tmp/package ./dist/element-plus | grep "Only" | cut -c 8- | sort > ./tmp/diff.txt 13 | -------------------------------------------------------------------------------- /ssr-testing/cases/basic.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 17 | -------------------------------------------------------------------------------- /docs/.vitepress/config/analytics.ts: -------------------------------------------------------------------------------- 1 | export const sendEvent = ( 2 | action: string, 3 | label: string, 4 | value?: any, 5 | category?: string 6 | ): void => { 7 | const gtag = (window as any).gtag 8 | if (gtag) { 9 | gtag('event', action, { 10 | event_label: label, 11 | event_value: value, 12 | event_category: category, 13 | }) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /docs/examples/input-number/size.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 14 | -------------------------------------------------------------------------------- /docs/examples/message/grouping.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /packages/components/button/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | 3 | import type { ButtonProps } from './button' 4 | 5 | export interface ButtonGroupContext { 6 | size?: ButtonProps['size'] 7 | type?: ButtonProps['type'] 8 | } 9 | 10 | export const buttonGroupContextKey: InjectionKey = Symbol( 11 | 'buttonGroupContextKey' 12 | ) 13 | -------------------------------------------------------------------------------- /packages/components/date-picker/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey, SetupContext } from 'vue' 2 | import type { UseNamespaceReturn } from '@element-plus/hooks' 3 | 4 | interface DatePickerContext { 5 | slots: SetupContext['slots'] 6 | pickerNs: UseNamespaceReturn 7 | } 8 | 9 | export const ROOT_PICKER_INJECTION_KEY: InjectionKey = 10 | Symbol() 11 | -------------------------------------------------------------------------------- /packages/components/radio/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey } from 'vue' 2 | import type { RadioGroupProps } from './radio-group' 3 | 4 | export interface RadioGroupContext extends RadioGroupProps { 5 | changeEvent: (val: RadioGroupProps['modelValue']) => void 6 | } 7 | 8 | export const radioGroupKey: InjectionKey = 9 | Symbol('radioGroupKey') 10 | -------------------------------------------------------------------------------- /packages/components/tree/index.ts: -------------------------------------------------------------------------------- 1 | import Tree from './src/tree.vue' 2 | 3 | import type { App } from 'vue' 4 | import type { SFCWithInstall } from '@element-plus/utils' 5 | 6 | Tree.install = (app: App): void => { 7 | app.component(Tree.name, Tree) 8 | } 9 | 10 | const _Tree = Tree as SFCWithInstall 11 | 12 | export default _Tree 13 | export const ElTree = _Tree 14 | -------------------------------------------------------------------------------- /docs/.vitepress/utils/lang.ts: -------------------------------------------------------------------------------- 1 | import fs from 'fs' 2 | import path from 'path' 3 | import { docRoot } from '@element-plus/build-utils' 4 | 5 | export const languages = fs.readdirSync(path.resolve(__dirname, '../crowdin')) 6 | 7 | export const ensureLang = (lang: string) => `/${lang}` 8 | 9 | export const getLang = (id: string) => 10 | path.relative(docRoot, id).split(path.sep)[0] 11 | -------------------------------------------------------------------------------- /docs/examples/badge/max.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | -------------------------------------------------------------------------------- /docs/examples/container/layout-ahmf.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /docs/examples/message/centered-content.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /docs/examples/text/basic.vue: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /packages/utils/__tests__/rand.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest' 2 | import { generateId, getRandomInt } from '..' 3 | 4 | describe('rand', () => { 5 | it('generateId should work', () => { 6 | expect(generateId()).to.be.a('number') 7 | }) 8 | 9 | it('getRandomInt should work', () => { 10 | expect(getRandomInt(1000)).lessThan(1000) 11 | }) 12 | }) 13 | -------------------------------------------------------------------------------- /docs/examples/radio/radio-button-group.vue: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | -------------------------------------------------------------------------------- /docs/examples/switch/basic.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 16 | -------------------------------------------------------------------------------- /internal/build-utils/src/fs.ts: -------------------------------------------------------------------------------- 1 | import { existsSync } from 'fs' 2 | import { mkdir, writeFile } from 'fs/promises' 3 | 4 | export const writeJson = (path: string, data: any, spaces = 0) => 5 | writeFile(path, JSON.stringify(data, undefined, spaces), 'utf-8') 6 | 7 | export const ensureDir = async (path: string) => { 8 | if (!existsSync(path)) await mkdir(path, { recursive: true }) 9 | } 10 | -------------------------------------------------------------------------------- /packages/components/calendar/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Calendar from './src/calendar.vue' 3 | 4 | export const ElCalendar = withInstall(Calendar) 5 | export default ElCalendar 6 | 7 | export * from './src/calendar' 8 | export type { 9 | CalendarDateTableInstance, 10 | DateTableInstance, 11 | CalendarInstance, 12 | } from './src/instance' 13 | -------------------------------------------------------------------------------- /ssr-testing/cases/card.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /ssr-testing/cases/popover.vue: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /tsconfig.play.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.web.json", 3 | "compilerOptions": { 4 | "allowJs": true, 5 | "lib": ["ESNext", "DOM", "DOM.Iterable"] 6 | }, 7 | "include": [ 8 | "packages", 9 | "typings/components.d.ts", 10 | "typings/env.d.ts", 11 | 12 | // playground 13 | "play/main.ts", 14 | "play/env.d.ts", 15 | "play/src/**/*" 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/navbar/vp-menu.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 13 | -------------------------------------------------------------------------------- /docs/examples/avatar/fallback.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 14 | -------------------------------------------------------------------------------- /docs/examples/card/shadow.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /docs/examples/input/formatter.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 14 | -------------------------------------------------------------------------------- /packages/components/select-v2/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/components/input/style' 3 | import '@element-plus/components/tag/style' 4 | import '@element-plus/components/scrollbar/style' 5 | import '@element-plus/components/popper/style' 6 | import '@element-plus/components/virtual-list/style' 7 | import '@element-plus/theme-chalk/src/select-v2.scss' 8 | -------------------------------------------------------------------------------- /packages/components/time-select/style/index.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style' 2 | import '@element-plus/theme-chalk/src/time-select.scss' 3 | import '@element-plus/components/scrollbar/style' 4 | import '@element-plus/components/popper/style' 5 | import '@element-plus/components/input/style' 6 | import '@element-plus/components/select/style' 7 | import '@element-plus/components/option/style' 8 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/overlay.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'common/var' as *; 3 | 4 | @include b(overlay) { 5 | #{& + '-root'} { 6 | height: 0; 7 | } 8 | position: fixed; 9 | top: 0; 10 | right: 0; 11 | bottom: 0; 12 | left: 0; 13 | z-index: 2000; 14 | height: 100%; 15 | background-color: getCssVar('overlay-color', 'lighter'); 16 | overflow: auto; 17 | } 18 | -------------------------------------------------------------------------------- /packages/components/steps/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall, withNoopInstall } from '@element-plus/utils' 2 | 3 | import Steps from './src/steps.vue' 4 | import Step from './src/item.vue' 5 | 6 | export const ElSteps = withInstall(Steps, { 7 | Step, 8 | }) 9 | export default ElSteps 10 | export const ElStep = withNoopInstall(Step) 11 | 12 | export * from './src/item' 13 | export * from './src/steps' 14 | -------------------------------------------------------------------------------- /packages/components/table-v2/src/renderers/overlay.tsx: -------------------------------------------------------------------------------- 1 | import type { SimpleFunctionalComponent } from '../types' 2 | 3 | const Overlay: SimpleFunctionalComponent = (props, { slots }) => { 4 | return ( 5 |
6 | {slots.default?.()} 7 |
8 | ) 9 | } 10 | 11 | Overlay.displayName = 'ElTableV2Overlay' 12 | 13 | export default Overlay 14 | -------------------------------------------------------------------------------- /packages/components/upload/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import Upload from './src/upload.vue' 3 | 4 | export const ElUpload = withInstall(Upload) 5 | export default ElUpload 6 | 7 | export * from './src/upload' 8 | export * from './src/upload-content' 9 | export * from './src/upload-list' 10 | export * from './src/upload-dragger' 11 | export * from './src/constants' 12 | -------------------------------------------------------------------------------- /packages/theme-chalk/src/space.scss: -------------------------------------------------------------------------------- 1 | @use 'mixins/mixins' as *; 2 | @use 'common/var' as *; 3 | 4 | @include b(space) { 5 | display: inline-flex; 6 | vertical-align: top; 7 | 8 | @include e(item) { 9 | display: flex; 10 | flex-wrap: wrap; 11 | 12 | & > * { 13 | flex: 1; 14 | } 15 | } 16 | 17 | @include m(vertical) { 18 | flex-direction: column; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /docs/.vitepress/crowdin/en-US/pages/sidebar.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "text": "Guide", 4 | "link": "/guide/design", 5 | "activeMatch": "/guide/" 6 | }, 7 | { 8 | "text": "Component", 9 | "link": "/component/button", 10 | "activeMatch": "/component/" 11 | }, 12 | { 13 | "text": "Resource", 14 | "link": "/resource/index", 15 | "activeMatch": "/resource/" 16 | } 17 | ] 18 | -------------------------------------------------------------------------------- /docs/.vitepress/vitepress/components/dev/a11y-tag.vue: -------------------------------------------------------------------------------- 1 | 4 | 18 | -------------------------------------------------------------------------------- /docs/examples/message/raw-html.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 15 | -------------------------------------------------------------------------------- /ssr-testing/cases/divider.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /tsconfig.vitest.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.web.json", 3 | "compilerOptions": { 4 | "composite": true, 5 | "lib": ["ES2021", "DOM", "DOM.Iterable"], 6 | "types": ["node", "jsdom", "unplugin-vue-macros/macros-global"], 7 | "skipLibCheck": true 8 | }, 9 | "include": ["packages", "vitest.setup.ts", "typings/env.d.ts"], 10 | "exclude": ["node_modules", "dist", "**/*.md"] 11 | } 12 | -------------------------------------------------------------------------------- /docs/examples/alert/basic.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 16 | -------------------------------------------------------------------------------- /docs/examples/page-header/main-content.vue: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /docs/examples/pagination/auto-hide-pagination.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 17 | -------------------------------------------------------------------------------- /packages/components/collapse/src/constants.ts: -------------------------------------------------------------------------------- 1 | import type { InjectionKey, Ref } from 'vue' 2 | import type { CollapseActiveName } from './collapse' 3 | 4 | export interface CollapseContext { 5 | activeNames: Ref 6 | handleItemClick: (name: CollapseActiveName) => void 7 | } 8 | 9 | export const collapseContextKey: InjectionKey = 10 | Symbol('collapseContextKey') 11 | -------------------------------------------------------------------------------- /packages/components/table-v2/src/header-cell.ts: -------------------------------------------------------------------------------- 1 | import { buildProps } from '@element-plus/utils' 2 | import { classType, column } from './common' 3 | 4 | import type { ExtractPropTypes } from 'vue' 5 | 6 | export const tableV2HeaderCell = buildProps({ 7 | class: classType, 8 | columnIndex: Number, 9 | column, 10 | }) 11 | 12 | export type TableV2HeaderCell = ExtractPropTypes 13 | -------------------------------------------------------------------------------- /packages/utils/vue/props/util.ts: -------------------------------------------------------------------------------- 1 | export type Writable = { -readonly [P in keyof T]: T[P] } 2 | export type WritableArray = T extends readonly any[] ? Writable : T 3 | 4 | export type IfNever = [T] extends [never] ? Y : N 5 | 6 | export type IfUnknown = [unknown] extends [T] ? Y : N 7 | 8 | export type UnknownToNever = IfUnknown 9 | 10 | export {} 11 | -------------------------------------------------------------------------------- /docs/examples/divider/basic-usage.vue: -------------------------------------------------------------------------------- 1 | 14 | -------------------------------------------------------------------------------- /docs/examples/notification/offsetting.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /docs/examples/tooltip-v2/basic-usage.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /packages/components/select-v2/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/components/input/style/css' 3 | import '@element-plus/components/tag/style/css' 4 | import '@element-plus/components/scrollbar/style/css' 5 | import '@element-plus/components/popper/style/css' 6 | import '@element-plus/components/virtual-list/style/css' 7 | import '@element-plus/theme-chalk/el-select-v2.css' 8 | -------------------------------------------------------------------------------- /packages/components/time-select/style/css.ts: -------------------------------------------------------------------------------- 1 | import '@element-plus/components/base/style/css' 2 | import '@element-plus/theme-chalk/el-time-select.css' 3 | import '@element-plus/components/scrollbar/style/css' 4 | import '@element-plus/components/popper/style/css' 5 | import '@element-plus/components/input/style/css' 6 | import '@element-plus/components/select/style/css' 7 | import '@element-plus/components/option/style/css' 8 | -------------------------------------------------------------------------------- /packages/directives/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@element-plus/directives", 3 | "version": "0.0.5", 4 | "description": "Element Plus directives", 5 | "license": "MIT", 6 | "main": "index.ts", 7 | "module": "index.ts", 8 | "unpkg": "index.js", 9 | "jsdelivr": "index.js", 10 | "peerDependencies": { 11 | "vue": "^3.2.0" 12 | }, 13 | "gitHead": "c69724230befa8fede0e6b9c37fb0b7e39fd7cdd" 14 | } 15 | -------------------------------------------------------------------------------- /breakings/2.2.1/button.yml: -------------------------------------------------------------------------------- 1 | - scope: 'component' 2 | name: 'el-button' 3 | type: 'props' 4 | version: '2.2.1' 5 | commit_hash: 'ad3d998' 6 | description: | 7 | Per [Link Button Request](https://github.com/element-plus/element-plus/issues/7610), we need to 8 | add a `link` like button back for those uses link button. 9 | props: 10 | - api: 'link' 11 | before: '' 12 | after: 'boolean' 13 | -------------------------------------------------------------------------------- /docs/examples/drawer/no-title.vue: -------------------------------------------------------------------------------- 1 | 10 | 11 | 15 | -------------------------------------------------------------------------------- /docs/examples/notification/no-close.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 16 | -------------------------------------------------------------------------------- /packages/components/carousel/src/carousel-item.ts: -------------------------------------------------------------------------------- 1 | import { buildProps } from '@element-plus/utils' 2 | import type { ExtractPropTypes } from 'vue' 3 | 4 | export const carouselItemProps = buildProps({ 5 | name: { type: String, default: '' }, 6 | label: { 7 | type: [String, Number], 8 | default: '', 9 | }, 10 | } as const) 11 | 12 | export type CarouselItemProps = ExtractPropTypes 13 | -------------------------------------------------------------------------------- /docs/examples/calendar/customize.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | -------------------------------------------------------------------------------- /docs/examples/tooltip-v2/arrow.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 15 | -------------------------------------------------------------------------------- /packages/components/date-picker/src/instance.ts: -------------------------------------------------------------------------------- 1 | import type { ComponentPublicInstance } from 'vue' 2 | import type { DatePickerProps } from './props/date-picker' 3 | 4 | export type DatePickerExpose = { 5 | focus: (focusStartInput: boolean) => void 6 | handleOpen: () => void 7 | handleClose: () => void 8 | } 9 | export type DatePickerInstance = ComponentPublicInstance< 10 | DatePickerProps, 11 | DatePickerExpose 12 | > 13 | -------------------------------------------------------------------------------- /packages/components/tooltip-v2/index.ts: -------------------------------------------------------------------------------- 1 | import { withInstall } from '@element-plus/utils' 2 | import TooltipV2 from './src/tooltip.vue' 3 | 4 | export const ElTooltipV2 = withInstall(TooltipV2) 5 | export * from './src/arrow' 6 | export * from './src/content' 7 | export * from './src/root' 8 | export * from './src/tooltip' 9 | export * from './src/trigger' 10 | export * from './src/constants' 11 | 12 | export default ElTooltipV2 13 | -------------------------------------------------------------------------------- /packages/utils/rand.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Generate random number in range [0, 1000] 3 | * Maybe replace with [uuid](https://www.npmjs.com/package/uuid) 4 | */ 5 | export const generateId = (): number => Math.floor(Math.random() * 10000) 6 | 7 | /** 8 | * Generating a random int in range (0, max - 1) 9 | * @param max {number} 10 | */ 11 | export const getRandomInt = (max: number) => 12 | Math.floor(Math.random() * Math.floor(max)) 13 | -------------------------------------------------------------------------------- /ssr-testing/cases/breadcrumb.vue: -------------------------------------------------------------------------------- 1 | 11 | --------------------------------------------------------------------------------