├── .babelrc
├── .eslintignore
├── .eslintrc
├── .gitattributes
├── .github
├── CONTRIBUTING.en-US.md
├── CONTRIBUTING.es.md
├── CONTRIBUTING.fr-FR.md
├── CONTRIBUTING.zh-CN.md
├── ISSUE_TEMPLATE.md
├── ISSUE_TEMPLATE
│ └── config.yml
├── PULL_REQUEST_TEMPLATE.md
├── stale.yml
└── workflows
│ ├── preview-build.yml
│ └── preview-deploy.yml
├── .gitignore
├── .travis.yml
├── CHANGELOG.en-US.md
├── CHANGELOG.es.md
├── CHANGELOG.fr-FR.md
├── CHANGELOG.zh-CN.md
├── FAQ.md
├── LICENSE
├── Makefile
├── README.md
├── build
├── bin
│ ├── build-entry.js
│ ├── build-locale.js
│ ├── gen-cssfile.js
│ ├── gen-indices.js
│ ├── i18n.js
│ ├── iconInit.js
│ ├── new-lang.js
│ ├── new.js
│ ├── template.js
│ └── version.js
├── config.js
├── deploy-ci.sh
├── deploy-faas.sh
├── gen-single-config.js
├── git-release.sh
├── md-loader
│ ├── config.js
│ ├── containers.js
│ ├── fence.js
│ ├── index.js
│ └── util.js
├── release.sh
├── webpack.common.js
├── webpack.component.js
├── webpack.conf.js
├── webpack.demo.js
├── webpack.extension.js
└── webpack.test.js
├── components.json
├── element_logo.svg
├── examples
├── app.vue
├── assets
│ ├── images
│ │ ├── Axure-Components.svg
│ │ ├── Module.svg
│ │ ├── Sketch-Template.svg
│ │ ├── button-d-cn.png
│ │ ├── button-d-en.png
│ │ ├── button-l-cn.png
│ │ ├── button-l-en.png
│ │ ├── cloud-1.png
│ │ ├── cloud-2.png
│ │ ├── compo-1.png
│ │ ├── compo-2.png
│ │ ├── compo-3.png
│ │ ├── component.png
│ │ ├── consistency.png
│ │ ├── controllability.png
│ │ ├── dialog-close.png
│ │ ├── efficiency.png
│ │ ├── element-demo.jpeg
│ │ ├── element-logo-small.svg
│ │ ├── element-logo.svg
│ │ ├── feedback.png
│ │ ├── figure-1.png
│ │ ├── figure-2.png
│ │ ├── guide.png
│ │ ├── hamburger.png
│ │ ├── icon-check.png
│ │ ├── icon-copy.png
│ │ ├── icon-download.png
│ │ ├── icon-edit.png
│ │ ├── icon-redo.svg
│ │ ├── icon-undo.svg
│ │ ├── icon-upload.svg
│ │ ├── intro-theme-b.png
│ │ ├── navbar_0.png
│ │ ├── navbar_1.png
│ │ ├── navbar_2.png
│ │ ├── navbar_3.png
│ │ ├── plant-1.png
│ │ ├── plant-2.png
│ │ ├── qrcode.png
│ │ ├── resource-placeholder.svg
│ │ ├── resource.png
│ │ ├── search-by-algolia.svg
│ │ ├── term-arial.png
│ │ ├── term-helvetica.png
│ │ ├── term-hiragino.png
│ │ ├── term-microsoft.png
│ │ ├── term-pingfang.png
│ │ ├── term-sf.png
│ │ ├── theme-index-blue.png
│ │ ├── theme-index-icon.svg
│ │ ├── theme-index-red.png
│ │ ├── theme-intro.png
│ │ ├── typography.png
│ │ └── web.png
│ └── styles
│ │ ├── common.css
│ │ └── fonts
│ │ ├── icomoon.eot
│ │ ├── icomoon.svg
│ │ ├── icomoon.ttf
│ │ ├── icomoon.woff
│ │ └── style.css
├── bus.js
├── color.js
├── components
│ ├── demo-block.vue
│ ├── footer-nav.vue
│ ├── footer.vue
│ ├── header.vue
│ ├── search.vue
│ ├── side-nav.vue
│ ├── theme-configurator
│ │ ├── action.vue
│ │ ├── editor
│ │ │ ├── borderRadius.vue
│ │ │ ├── boxShadow.vue
│ │ │ ├── color-picker
│ │ │ │ ├── index.js
│ │ │ │ └── src
│ │ │ │ │ ├── color.js
│ │ │ │ │ ├── components
│ │ │ │ │ ├── alpha-slider.vue
│ │ │ │ │ ├── color-list.vue
│ │ │ │ │ ├── hue-slider.vue
│ │ │ │ │ ├── picker-dropdown.vue
│ │ │ │ │ ├── predefine.vue
│ │ │ │ │ └── sv-panel.vue
│ │ │ │ │ ├── draggable.js
│ │ │ │ │ └── main.vue
│ │ │ ├── color.vue
│ │ │ ├── fontLineHeight.vue
│ │ │ ├── fontSize.vue
│ │ │ ├── fontWeight.vue
│ │ │ ├── input.vue
│ │ │ ├── mixin.vue
│ │ │ └── simpleText.vue
│ │ ├── index.vue
│ │ ├── main.vue
│ │ ├── shortcut.vue
│ │ └── utils
│ │ │ ├── boxShadow.js
│ │ │ └── utils.js
│ ├── theme-picker.vue
│ └── theme
│ │ ├── basic-tokens-preview.vue
│ │ ├── components-preview.vue
│ │ ├── constant.js
│ │ ├── loader
│ │ ├── ajax.js
│ │ ├── api.js
│ │ ├── docStyle.vue
│ │ ├── index.vue
│ │ └── loading
│ │ │ ├── index.vue
│ │ │ ├── progress.js
│ │ │ └── progress.vue
│ │ ├── localstorage.js
│ │ ├── theme-card.vue
│ │ ├── theme-list.js
│ │ └── utils.js
├── demo-styles
│ ├── alert.scss
│ ├── avatar.scss
│ ├── badge.scss
│ ├── border.scss
│ ├── button.scss
│ ├── calendar.scss
│ ├── card.scss
│ ├── carousel.scss
│ ├── cascader.scss
│ ├── collapse.scss
│ ├── color-picker.scss
│ ├── color.scss
│ ├── container.scss
│ ├── date-picker.scss
│ ├── datetime-picker.scss
│ ├── descriptions.scss
│ ├── dialog.scss
│ ├── divider.scss
│ ├── drawer.scss
│ ├── dropdown.scss
│ ├── form.scss
│ ├── i18n.scss
│ ├── icon.scss
│ ├── image.scss
│ ├── index.scss
│ ├── infinite-scroll.scss
│ ├── input-number.scss
│ ├── input.scss
│ ├── layout.scss
│ ├── loading.scss
│ ├── menu.scss
│ ├── pagination.scss
│ ├── popover.scss
│ ├── progress.scss
│ ├── rate.scss
│ ├── select.scss
│ ├── skeleton.scss
│ ├── slider.scss
│ ├── switch.scss
│ ├── table.scss
│ ├── tag.scss
│ ├── time-picker.scss
│ ├── timeline.scss
│ ├── tooltip.scss
│ ├── transfer.scss
│ ├── transition.scss
│ ├── tree.scss
│ ├── typography.scss
│ └── upload.scss
├── docs
│ ├── en-US
│ │ ├── alert.md
│ │ ├── avatar.md
│ │ ├── backtop.md
│ │ ├── badge.md
│ │ ├── border.md
│ │ ├── breadcrumb.md
│ │ ├── button.md
│ │ ├── calendar.md
│ │ ├── card.md
│ │ ├── carousel.md
│ │ ├── cascader.md
│ │ ├── checkbox.md
│ │ ├── collapse.md
│ │ ├── color-picker.md
│ │ ├── color.md
│ │ ├── container.md
│ │ ├── custom-theme.md
│ │ ├── date-picker.md
│ │ ├── datetime-picker.md
│ │ ├── descriptions.md
│ │ ├── dialog.md
│ │ ├── divider.md
│ │ ├── drawer.md
│ │ ├── dropdown.md
│ │ ├── empty.md
│ │ ├── form.md
│ │ ├── i18n.md
│ │ ├── icon.md
│ │ ├── image.md
│ │ ├── infiniteScroll.md
│ │ ├── input-number.md
│ │ ├── input.md
│ │ ├── installation.md
│ │ ├── layout.md
│ │ ├── link.md
│ │ ├── loading.md
│ │ ├── menu.md
│ │ ├── message-box.md
│ │ ├── message.md
│ │ ├── notification.md
│ │ ├── page-header.md
│ │ ├── pagination.md
│ │ ├── popconfirm.md
│ │ ├── popover.md
│ │ ├── progress.md
│ │ ├── quickstart.md
│ │ ├── radio.md
│ │ ├── rate.md
│ │ ├── result.md
│ │ ├── select.md
│ │ ├── skeleton.md
│ │ ├── slider.md
│ │ ├── statistic.md
│ │ ├── steps.md
│ │ ├── switch.md
│ │ ├── table.md
│ │ ├── tabs.md
│ │ ├── tag.md
│ │ ├── time-picker.md
│ │ ├── timeline.md
│ │ ├── tooltip.md
│ │ ├── transfer.md
│ │ ├── transition.md
│ │ ├── tree.md
│ │ ├── typography.md
│ │ └── upload.md
│ ├── es
│ │ ├── alert.md
│ │ ├── avatar.md
│ │ ├── backtop.md
│ │ ├── badge.md
│ │ ├── border.md
│ │ ├── breadcrumb.md
│ │ ├── button.md
│ │ ├── calendar.md
│ │ ├── card.md
│ │ ├── carousel.md
│ │ ├── cascader.md
│ │ ├── checkbox.md
│ │ ├── collapse.md
│ │ ├── color-picker.md
│ │ ├── color.md
│ │ ├── container.md
│ │ ├── custom-theme.md
│ │ ├── date-picker.md
│ │ ├── datetime-picker.md
│ │ ├── descriptions.md
│ │ ├── dialog.md
│ │ ├── divider.md
│ │ ├── drawer.md
│ │ ├── dropdown.md
│ │ ├── empty.md
│ │ ├── form.md
│ │ ├── i18n.md
│ │ ├── icon.md
│ │ ├── image.md
│ │ ├── infiniteScroll.md
│ │ ├── input-number.md
│ │ ├── input.md
│ │ ├── installation.md
│ │ ├── layout.md
│ │ ├── link.md
│ │ ├── loading.md
│ │ ├── menu.md
│ │ ├── message-box.md
│ │ ├── message.md
│ │ ├── notification.md
│ │ ├── page-header.md
│ │ ├── pagination.md
│ │ ├── popconfirm.md
│ │ ├── popover.md
│ │ ├── progress.md
│ │ ├── quickstart.md
│ │ ├── radio.md
│ │ ├── rate.md
│ │ ├── result.md
│ │ ├── select.md
│ │ ├── skeleton.md
│ │ ├── slider.md
│ │ ├── statistic.md
│ │ ├── steps.md
│ │ ├── switch.md
│ │ ├── table.md
│ │ ├── tabs.md
│ │ ├── tag.md
│ │ ├── time-picker.md
│ │ ├── timeline.md
│ │ ├── tooltip.md
│ │ ├── transfer.md
│ │ ├── transition.md
│ │ ├── tree.md
│ │ ├── typography.md
│ │ └── upload.md
│ ├── fr-FR
│ │ ├── alert.md
│ │ ├── avatar.md
│ │ ├── backtop.md
│ │ ├── badge.md
│ │ ├── border.md
│ │ ├── breadcrumb.md
│ │ ├── button.md
│ │ ├── calendar.md
│ │ ├── card.md
│ │ ├── carousel.md
│ │ ├── cascader.md
│ │ ├── checkbox.md
│ │ ├── collapse.md
│ │ ├── color-picker.md
│ │ ├── color.md
│ │ ├── container.md
│ │ ├── custom-theme.md
│ │ ├── date-picker.md
│ │ ├── datetime-picker.md
│ │ ├── descriptions.md
│ │ ├── dialog.md
│ │ ├── divider.md
│ │ ├── drawer.md
│ │ ├── dropdown.md
│ │ ├── empty.md
│ │ ├── form.md
│ │ ├── i18n.md
│ │ ├── icon.md
│ │ ├── image.md
│ │ ├── infiniteScroll.md
│ │ ├── input-number.md
│ │ ├── input.md
│ │ ├── installation.md
│ │ ├── layout.md
│ │ ├── link.md
│ │ ├── loading.md
│ │ ├── menu.md
│ │ ├── message-box.md
│ │ ├── message.md
│ │ ├── notification.md
│ │ ├── page-header.md
│ │ ├── pagination.md
│ │ ├── popconfirm.md
│ │ ├── popover.md
│ │ ├── progress.md
│ │ ├── quickstart.md
│ │ ├── radio.md
│ │ ├── rate.md
│ │ ├── result.md
│ │ ├── select.md
│ │ ├── skeleton.md
│ │ ├── slider.md
│ │ ├── statistic.md
│ │ ├── steps.md
│ │ ├── switch.md
│ │ ├── table.md
│ │ ├── tabs.md
│ │ ├── tag.md
│ │ ├── time-picker.md
│ │ ├── timeline.md
│ │ ├── tooltip.md
│ │ ├── transfer.md
│ │ ├── transition.md
│ │ ├── tree.md
│ │ ├── typography.md
│ │ └── upload.md
│ └── zh-CN
│ │ ├── alert.md
│ │ ├── avatar.md
│ │ ├── backtop.md
│ │ ├── badge.md
│ │ ├── border.md
│ │ ├── breadcrumb.md
│ │ ├── button.md
│ │ ├── calendar.md
│ │ ├── card.md
│ │ ├── carousel.md
│ │ ├── cascader.md
│ │ ├── checkbox.md
│ │ ├── collapse.md
│ │ ├── color-picker.md
│ │ ├── color.md
│ │ ├── container.md
│ │ ├── custom-theme.md
│ │ ├── date-picker.md
│ │ ├── datetime-picker.md
│ │ ├── descriptions.md
│ │ ├── dialog.md
│ │ ├── divider.md
│ │ ├── drawer.md
│ │ ├── dropdown.md
│ │ ├── empty.md
│ │ ├── form.md
│ │ ├── i18n.md
│ │ ├── icon.md
│ │ ├── image.md
│ │ ├── infiniteScroll.md
│ │ ├── input-number.md
│ │ ├── input.md
│ │ ├── installation.md
│ │ ├── layout.md
│ │ ├── link.md
│ │ ├── loading.md
│ │ ├── menu.md
│ │ ├── message-box.md
│ │ ├── message.md
│ │ ├── notification.md
│ │ ├── page-header.md
│ │ ├── pagination.md
│ │ ├── popconfirm.md
│ │ ├── popover.md
│ │ ├── progress.md
│ │ ├── quickstart.md
│ │ ├── radio.md
│ │ ├── rate.md
│ │ ├── result.md
│ │ ├── select.md
│ │ ├── skeleton.md
│ │ ├── slider.md
│ │ ├── statistic.md
│ │ ├── steps.md
│ │ ├── switch.md
│ │ ├── table.md
│ │ ├── tabs.md
│ │ ├── tag.md
│ │ ├── time-picker.md
│ │ ├── timeline.md
│ │ ├── tooltip.md
│ │ ├── transfer.md
│ │ ├── transition.md
│ │ ├── tree.md
│ │ ├── typography.md
│ │ └── upload.md
├── dom
│ └── class.js
├── entry.js
├── extension
│ ├── .gitignore
│ └── src
│ │ ├── app.js
│ │ ├── background.js
│ │ ├── editor
│ │ ├── editor.vue
│ │ ├── gallery.vue
│ │ ├── icon-close.png
│ │ ├── icon-entrance.png
│ │ ├── index.vue
│ │ └── utils.js
│ │ ├── entry.js
│ │ ├── icon.png
│ │ └── manifest.json
├── favicon.ico
├── i18n
│ ├── component.json
│ ├── page.json
│ ├── route.json
│ ├── theme-editor.json
│ └── title.json
├── icon.json
├── index.tpl
├── nav.config.json
├── pages
│ └── template
│ │ ├── changelog.tpl
│ │ ├── component.tpl
│ │ ├── design.tpl
│ │ ├── guide.tpl
│ │ ├── index.tpl
│ │ ├── nav.tpl
│ │ ├── resource.tpl
│ │ ├── theme-nav.tpl
│ │ ├── theme-preview.tpl
│ │ └── theme.tpl
├── play.js
├── play
│ └── index.vue
├── route.config.js
├── util.js
└── versions.json
├── package.json
├── packages
├── alert
│ ├── index.js
│ └── src
│ │ └── main.vue
├── aside
│ ├── index.js
│ └── src
│ │ └── main.vue
├── autocomplete
│ ├── index.js
│ └── src
│ │ ├── autocomplete-suggestions.vue
│ │ └── autocomplete.vue
├── avatar
│ ├── index.js
│ └── src
│ │ └── main.vue
├── backtop
│ ├── index.js
│ └── src
│ │ └── main.vue
├── badge
│ ├── index.js
│ └── src
│ │ └── main.vue
├── breadcrumb-item
│ └── index.js
├── breadcrumb
│ ├── index.js
│ └── src
│ │ ├── breadcrumb-item.vue
│ │ └── breadcrumb.vue
├── button-group
│ └── index.js
├── button
│ ├── index.js
│ └── src
│ │ ├── button-group.vue
│ │ └── button.vue
├── calendar
│ ├── index.js
│ └── src
│ │ ├── date-table.vue
│ │ └── main.vue
├── card
│ ├── index.js
│ └── src
│ │ └── main.vue
├── carousel-item
│ └── index.js
├── carousel
│ ├── index.js
│ └── src
│ │ ├── item.vue
│ │ └── main.vue
├── cascader-panel
│ ├── index.js
│ └── src
│ │ ├── cascader-menu.vue
│ │ ├── cascader-node.vue
│ │ ├── cascader-panel.vue
│ │ ├── node.js
│ │ └── store.js
├── cascader
│ ├── index.js
│ └── src
│ │ └── cascader.vue
├── checkbox-button
│ └── index.js
├── checkbox-group
│ └── index.js
├── checkbox
│ ├── index.js
│ └── src
│ │ ├── checkbox-button.vue
│ │ ├── checkbox-group.vue
│ │ └── checkbox.vue
├── col
│ ├── index.js
│ └── src
│ │ └── col.js
├── collapse-item
│ └── index.js
├── collapse
│ ├── index.js
│ └── src
│ │ ├── collapse-item.vue
│ │ └── collapse.vue
├── color-picker
│ ├── index.js
│ └── src
│ │ ├── color.js
│ │ ├── components
│ │ ├── alpha-slider.vue
│ │ ├── hue-slider.vue
│ │ ├── picker-dropdown.vue
│ │ ├── predefine.vue
│ │ └── sv-panel.vue
│ │ ├── draggable.js
│ │ └── main.vue
├── container
│ ├── index.js
│ └── src
│ │ └── main.vue
├── date-picker
│ ├── index.js
│ └── src
│ │ ├── basic
│ │ ├── date-table.vue
│ │ ├── month-table.vue
│ │ ├── time-spinner.vue
│ │ └── year-table.vue
│ │ ├── panel
│ │ ├── date-range.vue
│ │ ├── date.vue
│ │ ├── month-range.vue
│ │ ├── time-range.vue
│ │ ├── time-select.vue
│ │ └── time.vue
│ │ ├── picker.vue
│ │ └── picker
│ │ ├── date-picker.js
│ │ ├── time-picker.js
│ │ └── time-select.js
├── descriptions-item
│ └── index.js
├── descriptions
│ ├── index.js
│ └── src
│ │ ├── descriptions-item.js
│ │ ├── descriptions-row.js
│ │ └── index.js
├── dialog
│ ├── index.js
│ └── src
│ │ └── component.vue
├── divider
│ ├── index.js
│ └── src
│ │ └── main.vue
├── drawer
│ ├── index.js
│ └── src
│ │ └── main.vue
├── dropdown-item
│ └── index.js
├── dropdown-menu
│ └── index.js
├── dropdown
│ ├── index.js
│ └── src
│ │ ├── dropdown-item.vue
│ │ ├── dropdown-menu.vue
│ │ └── dropdown.vue
├── empty
│ ├── index.js
│ └── src
│ │ ├── img-empty.vue
│ │ └── index.vue
├── footer
│ ├── index.js
│ └── src
│ │ └── main.vue
├── form-item
│ └── index.js
├── form
│ ├── index.js
│ └── src
│ │ ├── form-item.vue
│ │ ├── form.vue
│ │ └── label-wrap.vue
├── header
│ ├── index.js
│ └── src
│ │ └── main.vue
├── icon
│ ├── index.js
│ └── src
│ │ └── icon.vue
├── image
│ ├── index.js
│ └── src
│ │ ├── image-viewer.vue
│ │ └── main.vue
├── infinite-scroll
│ ├── index.js
│ └── src
│ │ └── main.js
├── input-number
│ ├── index.js
│ └── src
│ │ └── input-number.vue
├── input
│ ├── index.js
│ └── src
│ │ ├── calcTextareaHeight.js
│ │ └── input.vue
├── link
│ ├── index.js
│ └── src
│ │ └── main.vue
├── loading
│ ├── index.js
│ └── src
│ │ ├── directive.js
│ │ ├── index.js
│ │ └── loading.vue
├── main
│ ├── index.js
│ └── src
│ │ └── main.vue
├── menu-item-group
│ └── index.js
├── menu-item
│ └── index.js
├── menu
│ ├── index.js
│ └── src
│ │ ├── menu-item-group.vue
│ │ ├── menu-item.vue
│ │ ├── menu-mixin.js
│ │ ├── menu.vue
│ │ └── submenu.vue
├── message-box
│ ├── index.js
│ └── src
│ │ ├── main.js
│ │ └── main.vue
├── message
│ ├── index.js
│ └── src
│ │ ├── main.js
│ │ └── main.vue
├── notification
│ ├── index.js
│ └── src
│ │ ├── main.js
│ │ └── main.vue
├── option-group
│ └── index.js
├── option
│ └── index.js
├── page-header
│ ├── index.js
│ └── src
│ │ └── main.vue
├── pagination
│ ├── index.js
│ └── src
│ │ ├── pager.vue
│ │ └── pagination.js
├── popconfirm
│ ├── index.js
│ └── src
│ │ └── main.vue
├── popover
│ ├── index.js
│ └── src
│ │ ├── directive.js
│ │ └── main.vue
├── progress
│ ├── index.js
│ └── src
│ │ └── progress.vue
├── radio-button
│ └── index.js
├── radio-group
│ └── index.js
├── radio
│ ├── index.js
│ └── src
│ │ ├── radio-button.vue
│ │ ├── radio-group.vue
│ │ └── radio.vue
├── rate
│ ├── index.js
│ └── src
│ │ └── main.vue
├── result
│ ├── index.js
│ └── src
│ │ ├── icon-error.vue
│ │ ├── icon-info.vue
│ │ ├── icon-success.vue
│ │ ├── icon-warning.vue
│ │ └── index.vue
├── row
│ ├── index.js
│ └── src
│ │ └── row.js
├── scrollbar
│ ├── index.js
│ └── src
│ │ ├── bar.js
│ │ ├── main.js
│ │ └── util.js
├── select
│ ├── index.js
│ └── src
│ │ ├── navigation-mixin.js
│ │ ├── option-group.vue
│ │ ├── option.vue
│ │ ├── select-dropdown.vue
│ │ └── select.vue
├── skeleton-item
│ └── index.js
├── skeleton
│ ├── index.js
│ └── src
│ │ ├── img-placeholder.vue
│ │ ├── index.vue
│ │ └── item.vue
├── slider
│ ├── index.js
│ └── src
│ │ ├── button.vue
│ │ ├── main.vue
│ │ └── marker.js
├── spinner
│ ├── index.js
│ └── src
│ │ └── spinner.vue
├── statistic
│ ├── index.js
│ └── src
│ │ └── main.vue
├── step
│ └── index.js
├── steps
│ ├── README.md
│ ├── index.js
│ └── src
│ │ ├── step.vue
│ │ └── steps.vue
├── submenu
│ └── index.js
├── switch
│ ├── index.js
│ └── src
│ │ └── component.vue
├── tab-pane
│ └── index.js
├── table-column
│ └── index.js
├── table
│ ├── index.js
│ └── src
│ │ ├── config.js
│ │ ├── dropdown.js
│ │ ├── filter-panel.vue
│ │ ├── layout-observer.js
│ │ ├── store
│ │ ├── current.js
│ │ ├── expand.js
│ │ ├── helper.js
│ │ ├── index.js
│ │ ├── tree.js
│ │ └── watcher.js
│ │ ├── table-body.js
│ │ ├── table-column.js
│ │ ├── table-footer.js
│ │ ├── table-header.js
│ │ ├── table-layout.js
│ │ ├── table-row.js
│ │ ├── table.vue
│ │ └── util.js
├── tabs
│ ├── index.js
│ └── src
│ │ ├── tab-bar.vue
│ │ ├── tab-nav.vue
│ │ ├── tab-pane.vue
│ │ └── tabs.vue
├── tag
│ ├── index.js
│ └── src
│ │ └── tag.vue
├── theme-chalk
│ ├── .gitignore
│ ├── README.md
│ ├── gulpfile.js
│ ├── package.json
│ └── src
│ │ ├── alert.scss
│ │ ├── aside.scss
│ │ ├── autocomplete.scss
│ │ ├── avatar.scss
│ │ ├── backtop.scss
│ │ ├── badge.scss
│ │ ├── base.scss
│ │ ├── breadcrumb-item.scss
│ │ ├── breadcrumb.scss
│ │ ├── button-group.scss
│ │ ├── button.scss
│ │ ├── calendar.scss
│ │ ├── card.scss
│ │ ├── carousel-item.scss
│ │ ├── carousel.scss
│ │ ├── cascader-panel.scss
│ │ ├── cascader.scss
│ │ ├── checkbox-button.scss
│ │ ├── checkbox-group.scss
│ │ ├── checkbox.scss
│ │ ├── col.scss
│ │ ├── collapse-item.scss
│ │ ├── collapse.scss
│ │ ├── color-picker.scss
│ │ ├── common
│ │ ├── popup.scss
│ │ ├── transition.scss
│ │ └── var.scss
│ │ ├── container.scss
│ │ ├── date-picker.scss
│ │ ├── date-picker
│ │ ├── date-picker.scss
│ │ ├── date-range-picker.scss
│ │ ├── date-table.scss
│ │ ├── month-table.scss
│ │ ├── picker-panel.scss
│ │ ├── picker.scss
│ │ ├── time-picker.scss
│ │ ├── time-range-picker.scss
│ │ ├── time-spinner.scss
│ │ └── year-table.scss
│ │ ├── descriptions-item.scss
│ │ ├── descriptions.scss
│ │ ├── dialog.scss
│ │ ├── display.scss
│ │ ├── divider.scss
│ │ ├── drawer.scss
│ │ ├── dropdown-item.scss
│ │ ├── dropdown-menu.scss
│ │ ├── dropdown.scss
│ │ ├── empty.scss
│ │ ├── fonts
│ │ ├── element-icons.ttf
│ │ └── element-icons.woff
│ │ ├── footer.scss
│ │ ├── form-item.scss
│ │ ├── form.scss
│ │ ├── header.scss
│ │ ├── icon.scss
│ │ ├── image.scss
│ │ ├── index.scss
│ │ ├── infinite-scroll.scss
│ │ ├── infiniteScroll.scss
│ │ ├── input-number.scss
│ │ ├── input.scss
│ │ ├── link.scss
│ │ ├── loading.scss
│ │ ├── main.scss
│ │ ├── menu-item-group.scss
│ │ ├── menu-item.scss
│ │ ├── menu.scss
│ │ ├── message-box.scss
│ │ ├── message.scss
│ │ ├── mixins
│ │ ├── _button.scss
│ │ ├── config.scss
│ │ ├── function.scss
│ │ ├── mixins.scss
│ │ └── utils.scss
│ │ ├── notification.scss
│ │ ├── option-group.scss
│ │ ├── option.scss
│ │ ├── page-header.scss
│ │ ├── pagination.scss
│ │ ├── popconfirm.scss
│ │ ├── popover.scss
│ │ ├── popper.scss
│ │ ├── progress.scss
│ │ ├── radio-button.scss
│ │ ├── radio-group.scss
│ │ ├── radio.scss
│ │ ├── rate.scss
│ │ ├── reset.scss
│ │ ├── result.scss
│ │ ├── row.scss
│ │ ├── scrollbar.scss
│ │ ├── select-dropdown.scss
│ │ ├── select.scss
│ │ ├── skeleton-item.scss
│ │ ├── skeleton.scss
│ │ ├── slider.scss
│ │ ├── spinner.scss
│ │ ├── statistic.scss
│ │ ├── step.scss
│ │ ├── steps.scss
│ │ ├── submenu.scss
│ │ ├── switch.scss
│ │ ├── tab-pane.scss
│ │ ├── table-column.scss
│ │ ├── table.scss
│ │ ├── tabs.scss
│ │ ├── tag.scss
│ │ ├── time-picker.scss
│ │ ├── time-select.scss
│ │ ├── timeline-item.scss
│ │ ├── timeline.scss
│ │ ├── tooltip.scss
│ │ ├── transfer.scss
│ │ ├── tree.scss
│ │ └── upload.scss
├── time-picker
│ └── index.js
├── time-select
│ └── index.js
├── timeline-item
│ └── index.js
├── timeline
│ ├── index.js
│ └── src
│ │ ├── item.vue
│ │ └── main.vue
├── tooltip
│ ├── index.js
│ └── src
│ │ └── main.js
├── transfer
│ ├── index.js
│ └── src
│ │ ├── main.vue
│ │ └── transfer-panel.vue
├── tree
│ ├── index.js
│ └── src
│ │ ├── model
│ │ ├── node.js
│ │ ├── tree-store.js
│ │ └── util.js
│ │ ├── tree-node.vue
│ │ └── tree.vue
└── upload
│ ├── index.js
│ └── src
│ ├── ajax.js
│ ├── index.vue
│ ├── upload-dragger.vue
│ ├── upload-list.vue
│ └── upload.vue
├── src
├── directives
│ ├── mousewheel.js
│ └── repeat-click.js
├── index.js
├── locale
│ ├── format.js
│ ├── index.js
│ └── lang
│ │ ├── af-ZA.js
│ │ ├── ar.js
│ │ ├── az.js
│ │ ├── bg.js
│ │ ├── bn.js
│ │ ├── ca.js
│ │ ├── cs-CZ.js
│ │ ├── da.js
│ │ ├── de.js
│ │ ├── ee.js
│ │ ├── el.js
│ │ ├── en.js
│ │ ├── eo.js
│ │ ├── es.js
│ │ ├── eu.js
│ │ ├── fa.js
│ │ ├── fi.js
│ │ ├── fr.js
│ │ ├── he.js
│ │ ├── hr.js
│ │ ├── hu.js
│ │ ├── hy-AM.js
│ │ ├── id.js
│ │ ├── is.js
│ │ ├── it.js
│ │ ├── ja.js
│ │ ├── kg.js
│ │ ├── km.js
│ │ ├── ko.js
│ │ ├── ku.js
│ │ ├── kz.js
│ │ ├── lo-LA.js
│ │ ├── lt.js
│ │ ├── lv.js
│ │ ├── mn.js
│ │ ├── ms.js
│ │ ├── nb-NO.js
│ │ ├── nl.js
│ │ ├── pl.js
│ │ ├── pt-br.js
│ │ ├── pt.js
│ │ ├── ro.js
│ │ ├── ru-RU.js
│ │ ├── si.js
│ │ ├── sk.js
│ │ ├── sl.js
│ │ ├── sr-Latn.js
│ │ ├── sr.js
│ │ ├── sv-SE.js
│ │ ├── sw.js
│ │ ├── ta.js
│ │ ├── th.js
│ │ ├── tk.js
│ │ ├── tr-TR.js
│ │ ├── ua.js
│ │ ├── ug-CN.js
│ │ ├── uz-UZ.js
│ │ ├── vi.js
│ │ ├── zh-CN.js
│ │ └── zh-TW.js
├── mixins
│ ├── emitter.js
│ ├── focus.js
│ ├── locale.js
│ └── migrating.js
├── transitions
│ └── collapse-transition.js
└── utils
│ ├── after-leave.js
│ ├── aria-dialog.js
│ ├── aria-utils.js
│ ├── clickoutside.js
│ ├── date-util.js
│ ├── date.js
│ ├── dom.js
│ ├── lodash.js
│ ├── menu
│ ├── aria-menubar.js
│ ├── aria-menuitem.js
│ └── aria-submenu.js
│ ├── merge.js
│ ├── popper.js
│ ├── popup
│ ├── index.js
│ └── popup-manager.js
│ ├── resize-event.js
│ ├── scroll-into-view.js
│ ├── scrollbar-width.js
│ ├── shared.js
│ ├── types.js
│ ├── util.js
│ ├── vdom.js
│ └── vue-popper.js
├── test
├── .eslintrc
├── ssr
│ └── require.test.js
└── unit
│ ├── index.js
│ ├── karma.conf.js
│ ├── mocks
│ └── uri.js
│ ├── specs
│ ├── alert.spec.js
│ ├── autocomplete.spec.js
│ ├── avatar.spec.js
│ ├── backtop.spec.js
│ ├── badge.spec.js
│ ├── breadcrumb.spec.js
│ ├── button.spec.js
│ ├── calendar.spec.js
│ ├── card.spec.js
│ ├── carousel.spec.js
│ ├── cascader-panel.spec.js
│ ├── cascader.spec.js
│ ├── checkbox.spec.js
│ ├── col.spec.js
│ ├── collapse.spec.js
│ ├── color-picker.spec.js
│ ├── container.spec.js
│ ├── date-picker.spec.js
│ ├── descriptions.spec.js
│ ├── dialog.spec.js
│ ├── divider.spec.js
│ ├── drawer.spec.js
│ ├── dropdown.spec.js
│ ├── empty.spec.js
│ ├── form.spec.js
│ ├── image.spec.js
│ ├── infiniteScroll.spec.js
│ ├── input-number.spec.js
│ ├── input.spec.js
│ ├── link.spec.js
│ ├── loading.spec.js
│ ├── menu.spec.js
│ ├── message-box.spec.js
│ ├── message.spec.js
│ ├── mixin.vue-popup.spec.js
│ ├── notification.spec.js
│ ├── page-header.spec.js
│ ├── pagination.spec.js
│ ├── popconfirm.spec.js
│ ├── popover.spec.js
│ ├── progress.spec.js
│ ├── radio.spec.js
│ ├── rate.spec.js
│ ├── result.spec.js
│ ├── row.spec.js
│ ├── select.spec.js
│ ├── skeleton.spec.js
│ ├── slider.spec.js
│ ├── statistic.spec.js
│ ├── steps.spec.js
│ ├── switch.spec.js
│ ├── table.spec.js
│ ├── tabs.spec.js
│ ├── tag.spec.js
│ ├── time-picker.spec.js
│ ├── time-select.spec.js
│ ├── timeline.spec.js
│ ├── tooltip.spec.js
│ ├── transfer.spec.js
│ ├── tree.spec.js
│ ├── upload.spec.js
│ ├── util.clickoutside.spec.js
│ └── util.vue-popper.spec.js
│ └── util.js
├── types
├── alert.d.ts
├── aside.d.ts
├── autocomplete.d.ts
├── avatar.d.ts
├── backtop.d.ts
├── badge.d.ts
├── breadcrumb-item.d.ts
├── breadcrumb.d.ts
├── button-group.d.ts
├── button.d.ts
├── calendar.d.ts
├── card.d.ts
├── carousel-item.d.ts
├── carousel.d.ts
├── cascader-panel.d.ts
├── cascader.d.ts
├── checkbox-button.d.ts
├── checkbox-group.d.ts
├── checkbox.d.ts
├── col.d.ts
├── collapse-item.d.ts
├── collapse.d.ts
├── color-picker.d.ts
├── component.d.ts
├── container.d.ts
├── date-picker.d.ts
├── descriptions-item.d.ts
├── descriptions.d.ts
├── dialog.d.ts
├── divider.d.ts
├── drawer.d.ts
├── dropdown-item.d.ts
├── dropdown-menu.d.ts
├── dropdown.d.ts
├── element-ui.d.ts
├── empty.d.ts
├── footer.d.ts
├── form-item.d.ts
├── form.d.ts
├── header.d.ts
├── icon.d.ts
├── image.d.ts
├── index.d.ts
├── infinite-scroll.d.ts
├── input-number.d.ts
├── input.d.ts
├── link.d.ts
├── loading.d.ts
├── main.d.ts
├── menu-item-group.d.ts
├── menu-item.d.ts
├── menu.d.ts
├── message-box.d.ts
├── message.d.ts
├── notification.d.ts
├── option-group.d.ts
├── option.d.ts
├── page-header.d.ts
├── pagination.d.ts
├── popconfirm.d.ts
├── popover.d.ts
├── progress.d.ts
├── radio-button.d.ts
├── radio-group.d.ts
├── radio.d.ts
├── rate.d.ts
├── result.d.ts
├── row.d.ts
├── select.d.ts
├── skeleton-item.d.ts
├── skeleton.d.ts
├── slider.d.ts
├── spinner.d.ts
├── statistic.d.ts
├── step.d.ts
├── steps.d.ts
├── submenu.d.ts
├── switch.d.ts
├── tab-pane.d.ts
├── table-column.d.ts
├── table.d.ts
├── tabs.d.ts
├── tag.d.ts
├── time-picker.d.ts
├── time-select.d.ts
├── timeline-item.d.ts
├── timeline.d.ts
├── tooltip.d.ts
├── transfer.d.ts
├── tree.d.ts
└── upload.d.ts
├── web-types.json
└── yarn.lock
/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "env",
5 | {
6 | "loose": true,
7 | "modules": false,
8 | "targets": {
9 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
10 | }
11 | }
12 | ],
13 | "stage-2"
14 | ],
15 | "plugins": ["transform-vue-jsx"],
16 | "env": {
17 | "utils": {
18 | "presets": [
19 | [
20 | "env",
21 | {
22 | "loose": true,
23 | "modules": "commonjs",
24 | "targets": {
25 | "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
26 | }
27 | }
28 | ],
29 | ],
30 | "plugins": [
31 | ["module-resolver", {
32 | "root": ["element-ui"],
33 | "alias": {
34 | "element-ui/src": "element-ui/lib"
35 | }
36 | }]
37 | ]
38 | },
39 | "test": {
40 | "plugins": ["istanbul"]
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | src/utils/popper.js
2 | src/utils/date.js
3 | src/utils/lodash.js
4 | examples/play
5 | *.sh
6 | node_modules
7 | lib
8 | coverage
9 | *.md
10 | *.scss
11 | *.woff
12 | *.ttf
13 |
--------------------------------------------------------------------------------
/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "globals": {
3 | "ga": true,
4 | "chrome": true
5 | },
6 | "plugins": ["html", "json"],
7 | "extends": "elemefe",
8 | "rules": {
9 | "no-restricted-globals": ["error", "event", "fdescribe"]
10 | },
11 | "parserOptions": {
12 | "ecmaVersion": 6,
13 | "ecmaFeatures": {
14 | "jsx": true
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | test/**/*.js linguist-language=Vue
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
16 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
2 | contact_links:
3 | - name: Create new issue
4 | url: https://elementui.github.io/issue-generator
5 | about: The issue which is not created via https://elementui.github.io/issue-generator will be closed immediately.
6 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Please make sure these boxes are checked before submitting your PR, thank you!
2 |
3 | * [ ] Make sure you follow Element's contributing guide ([中文](https://github.com/ElemeFE/element/blob/master/.github/CONTRIBUTING.zh-CN.md) | [English](https://github.com/ElemeFE/element/blob/master/.github/CONTRIBUTING.en-US.md) | [Español](https://github.com/ElemeFE/element/blob/master/.github/CONTRIBUTING.es.md) | [Français](https://github.com/ElemeFE/element/blob/master/.github/CONTRIBUTING.fr-FR.md)).
4 | * [ ] Make sure you are merging your commits to `dev` branch.
5 | * [ ] Add some descriptions and refer relative issues for you PR.
6 |
--------------------------------------------------------------------------------
/.github/stale.yml:
--------------------------------------------------------------------------------
1 | # Number of days of inactivity before an issue becomes stale
2 | daysUntilStale: 365
3 | # Number of days of inactivity before a stale issue is closed
4 | daysUntilClose: 7
5 | # Issues with these labels will never be considered stale
6 | # exemptLabels:
7 | # - pinned
8 | # - security
9 | # Label to use when marking an issue as stale
10 | staleLabel: stale
11 | # Comment to post when marking an issue as stale. Set to `false` to disable
12 | markComment: >
13 | This issue has been automatically marked as stale because it has not had
14 | recent activity. It will be closed if no further activity occurs. Thank you
15 | for your contributions.
16 | # Comment to post when closing a stale issue. Set to `false` to disable
17 | closeComment: false
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | npm-debug.log
4 | yarn-debug.log
5 | yarn-error.log
6 | lerna-debug.log
7 | npm-debug.log.*
8 | yarn-debug.log.*
9 | yarn-error.log.*
10 | lerna-debug.log.*
11 | lib
12 | .idea
13 | .vscode
14 | examples/element-ui
15 | examples/pages/en-US
16 | examples/pages/zh-CN
17 | examples/pages/es
18 | examples/pages/fr-FR
19 | fe.element/element-ui
20 | .npmrc
21 | coverage
22 | waiter.config.js
23 | build/bin/algolia-key.js
24 | .envrc
25 | .history/
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | sudo: false
2 | language: node_js
3 | node_js: 10
4 | addons:
5 | chrome: stable
6 | before_install:
7 | - export TRAVIS_COMMIT_MSG="[deploy] $(git log --format='%h - %B' --no-merges -n 1)"
8 | - export TRAVIS_COMMIT_USER="$(git log --no-merges -n 1 --format=%an)"
9 | - export TRAVIS_COMMIT_EMAIL="$(git log --no-merges -n 1 --format=%ae)"
10 | after_success:
11 | - sh build/deploy-ci.sh
12 | - cat ./test/unit/coverage/lcov.info | ./node_modules/.bin/coveralls
13 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016-present ElemeFE
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/build/bin/i18n.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var fs = require('fs');
4 | var path = require('path');
5 | var langConfig = require('../../examples/i18n/page.json');
6 |
7 | langConfig.forEach(lang => {
8 | try {
9 | fs.statSync(path.resolve(__dirname, `../../examples/pages/${ lang.lang }`));
10 | } catch (e) {
11 | fs.mkdirSync(path.resolve(__dirname, `../../examples/pages/${ lang.lang }`));
12 | }
13 |
14 | Object.keys(lang.pages).forEach(page => {
15 | var templatePath = path.resolve(__dirname, `../../examples/pages/template/${ page }.tpl`);
16 | var outputPath = path.resolve(__dirname, `../../examples/pages/${ lang.lang }/${ page }.vue`);
17 | var content = fs.readFileSync(templatePath, 'utf8');
18 | var pairs = lang.pages[page];
19 |
20 | Object.keys(pairs).forEach(key => {
21 | content = content.replace(new RegExp(`<%=\\s*${ key }\\s*>`, 'g'), pairs[key]);
22 | });
23 |
24 | fs.writeFileSync(outputPath, content);
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/build/bin/iconInit.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var postcss = require('postcss');
4 | var fs = require('fs');
5 | var path = require('path');
6 | var fontFile = fs.readFileSync(path.resolve(__dirname, '../../packages/theme-chalk/src/icon.scss'), 'utf8');
7 | var nodes = postcss.parse(fontFile).nodes;
8 | var classList = [];
9 |
10 | nodes.forEach((node) => {
11 | var selector = node.selector || '';
12 | var reg = new RegExp(/\.el-icon-([^:]+):before/);
13 | var arr = selector.match(reg);
14 |
15 | if (arr && arr[1]) {
16 | classList.push(arr[1]);
17 | }
18 | });
19 |
20 | classList.reverse(); // 希望按 css 文件顺序倒序排列
21 |
22 | fs.writeFile(path.resolve(__dirname, '../../examples/icon.json'), JSON.stringify(classList), () => {});
23 |
--------------------------------------------------------------------------------
/build/bin/template.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const templates = path.resolve(process.cwd(), './examples/pages/template');
3 |
4 | const chokidar = require('chokidar');
5 | let watcher = chokidar.watch([templates]);
6 |
7 | watcher.on('ready', function() {
8 | watcher
9 | .on('change', function() {
10 | exec('npm run i18n');
11 | });
12 | });
13 |
14 | function exec(cmd) {
15 | return require('child_process').execSync(cmd).toString().trim();
16 | }
17 |
--------------------------------------------------------------------------------
/build/bin/version.js:
--------------------------------------------------------------------------------
1 | var fs = require('fs');
2 | var path = require('path');
3 | var version = process.env.VERSION || require('../../package.json').version;
4 | var content = { '1.4.13': '1.4', '2.0.11': '2.0', '2.1.0': '2.1', '2.2.2': '2.2', '2.3.9': '2.3', '2.4.11': '2.4', '2.5.4': '2.5', '2.6.3': '2.6', '2.7.2': '2.7', '2.8.2': '2.8', '2.9.2': '2.9', '2.10.1': '2.10', '2.11.1': '2.11', '2.12.0': '2.12', '2.13.2': '2.13', '2.14.1': '2.14' };
5 | if (!content[version]) content[version] = '2.15';
6 | fs.writeFileSync(path.resolve(__dirname, '../../examples/versions.json'), JSON.stringify(content));
7 |
--------------------------------------------------------------------------------
/build/deploy-faas.sh:
--------------------------------------------------------------------------------
1 | #! /bin/sh
2 | set -ex
3 | mkdir temp_web
4 | npm run deploy:build
5 | cd temp_web
6 | git clone --depth 1 -b gh-pages --single-branch https://github.com/ElemeFE/element.git && cd element
7 |
8 | # build sub folder
9 | SUB_FOLDER='2.15'
10 | mkdir -p $SUB_FOLDER
11 | rm -rf *.js *.css *.map static
12 | rm -rf $SUB_FOLDER/**
13 | cp -rf ../../examples/element-ui/** .
14 | cp -rf ../../examples/element-ui/** $SUB_FOLDER/
15 | cd ../..
16 |
17 | # deploy domestic site
18 | faas deploy daily -P element
19 | rm -rf temp_web
20 |
--------------------------------------------------------------------------------
/build/gen-single-config.js:
--------------------------------------------------------------------------------
1 | var path = require('path');
2 | var config = require('./config');
3 |
4 | module.exports = function(context, moduleName, entry) {
5 | return {
6 | entry: {
7 | index: path.resolve(context, entry || 'index.js')
8 | },
9 | dist: path.resolve(context, 'lib'),
10 | template: false,
11 | format: 'umd',
12 | moduleName: moduleName,
13 | extends: ['vue2'],
14 | alias: config.alias,
15 | externals: { vue: config.vue }
16 | };
17 | };
18 |
--------------------------------------------------------------------------------
/build/git-release.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | git checkout dev
3 |
4 | if test -n "$(git status --porcelain)"; then
5 | echo 'Unclean working tree. Commit or stash changes first.' >&2;
6 | exit 128;
7 | fi
8 |
9 | if ! git fetch --quiet 2>/dev/null; then
10 | echo 'There was a problem fetching your branch. Run `git fetch` to see more...' >&2;
11 | exit 128;
12 | fi
13 |
14 | if test "0" != "$(git rev-list --count --left-only @'{u}'...HEAD)"; then
15 | echo 'Remote history differ. Please pull changes.' >&2;
16 | exit 128;
17 | fi
18 |
19 | echo 'No conflicts.' >&2;
20 |
--------------------------------------------------------------------------------
/build/md-loader/config.js:
--------------------------------------------------------------------------------
1 | const Config = require('markdown-it-chain');
2 | const anchorPlugin = require('markdown-it-anchor');
3 | const slugify = require('transliteration').slugify;
4 | const containers = require('./containers');
5 | const overWriteFenceRule = require('./fence');
6 |
7 | const config = new Config();
8 |
9 | config
10 | .options.html(true).end()
11 |
12 | .plugin('anchor').use(anchorPlugin, [
13 | {
14 | level: 2,
15 | slugify: slugify,
16 | permalink: true,
17 | permalinkBefore: true
18 | }
19 | ]).end()
20 |
21 | .plugin('containers').use(containers).end();
22 |
23 | const md = config.toMd();
24 | overWriteFenceRule(md);
25 |
26 | module.exports = md;
27 |
--------------------------------------------------------------------------------
/build/md-loader/containers.js:
--------------------------------------------------------------------------------
1 | const mdContainer = require('markdown-it-container');
2 |
3 | module.exports = md => {
4 | md.use(mdContainer, 'demo', {
5 | validate(params) {
6 | return params.trim().match(/^demo\s*(.*)$/);
7 | },
8 | render(tokens, idx) {
9 | const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
10 | if (tokens[idx].nesting === 1) {
11 | const description = m && m.length > 1 ? m[1] : '';
12 | const content = tokens[idx + 1].type === 'fence' ? tokens[idx + 1].content : '';
13 | return `
14 | ${description ? `${md.render(description)}
` : ''}
15 |
16 | `;
17 | }
18 | return '';
19 | }
20 | });
21 |
22 | md.use(mdContainer, 'tip');
23 | md.use(mdContainer, 'warning');
24 | };
25 |
--------------------------------------------------------------------------------
/build/md-loader/fence.js:
--------------------------------------------------------------------------------
1 | // 覆盖默认的 fence 渲染策略
2 | module.exports = md => {
3 | const defaultRender = md.renderer.rules.fence;
4 | md.renderer.rules.fence = (tokens, idx, options, env, self) => {
5 | const token = tokens[idx];
6 | // 判断该 fence 是否在 :::demo 内
7 | const prevToken = tokens[idx - 1];
8 | const isInDemoContainer = prevToken && prevToken.nesting === 1 && prevToken.info.trim().match(/^demo\s*(.*)$/);
9 | if (token.info === 'html' && isInDemoContainer) {
10 | return `${md.utils.escapeHtml(token.content)}
`;
11 | }
12 | return defaultRender(tokens, idx, options, env, self);
13 | };
14 | };
15 |
--------------------------------------------------------------------------------
/examples/assets/images/button-d-cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/button-d-cn.png
--------------------------------------------------------------------------------
/examples/assets/images/button-d-en.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/button-d-en.png
--------------------------------------------------------------------------------
/examples/assets/images/button-l-cn.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/button-l-cn.png
--------------------------------------------------------------------------------
/examples/assets/images/button-l-en.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/button-l-en.png
--------------------------------------------------------------------------------
/examples/assets/images/cloud-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/cloud-1.png
--------------------------------------------------------------------------------
/examples/assets/images/cloud-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/cloud-2.png
--------------------------------------------------------------------------------
/examples/assets/images/compo-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/compo-1.png
--------------------------------------------------------------------------------
/examples/assets/images/compo-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/compo-2.png
--------------------------------------------------------------------------------
/examples/assets/images/compo-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/compo-3.png
--------------------------------------------------------------------------------
/examples/assets/images/component.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/component.png
--------------------------------------------------------------------------------
/examples/assets/images/consistency.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/consistency.png
--------------------------------------------------------------------------------
/examples/assets/images/controllability.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/controllability.png
--------------------------------------------------------------------------------
/examples/assets/images/dialog-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/dialog-close.png
--------------------------------------------------------------------------------
/examples/assets/images/efficiency.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/efficiency.png
--------------------------------------------------------------------------------
/examples/assets/images/element-demo.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/element-demo.jpeg
--------------------------------------------------------------------------------
/examples/assets/images/feedback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/feedback.png
--------------------------------------------------------------------------------
/examples/assets/images/figure-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/figure-1.png
--------------------------------------------------------------------------------
/examples/assets/images/figure-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/figure-2.png
--------------------------------------------------------------------------------
/examples/assets/images/guide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/guide.png
--------------------------------------------------------------------------------
/examples/assets/images/hamburger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/hamburger.png
--------------------------------------------------------------------------------
/examples/assets/images/icon-check.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/icon-check.png
--------------------------------------------------------------------------------
/examples/assets/images/icon-copy.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/icon-copy.png
--------------------------------------------------------------------------------
/examples/assets/images/icon-download.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/icon-download.png
--------------------------------------------------------------------------------
/examples/assets/images/icon-edit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/icon-edit.png
--------------------------------------------------------------------------------
/examples/assets/images/intro-theme-b.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/intro-theme-b.png
--------------------------------------------------------------------------------
/examples/assets/images/navbar_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/navbar_0.png
--------------------------------------------------------------------------------
/examples/assets/images/navbar_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/navbar_1.png
--------------------------------------------------------------------------------
/examples/assets/images/navbar_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/navbar_2.png
--------------------------------------------------------------------------------
/examples/assets/images/navbar_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/navbar_3.png
--------------------------------------------------------------------------------
/examples/assets/images/plant-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/plant-1.png
--------------------------------------------------------------------------------
/examples/assets/images/plant-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/plant-2.png
--------------------------------------------------------------------------------
/examples/assets/images/qrcode.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/qrcode.png
--------------------------------------------------------------------------------
/examples/assets/images/resource.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/resource.png
--------------------------------------------------------------------------------
/examples/assets/images/term-arial.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-arial.png
--------------------------------------------------------------------------------
/examples/assets/images/term-helvetica.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-helvetica.png
--------------------------------------------------------------------------------
/examples/assets/images/term-hiragino.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-hiragino.png
--------------------------------------------------------------------------------
/examples/assets/images/term-microsoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-microsoft.png
--------------------------------------------------------------------------------
/examples/assets/images/term-pingfang.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-pingfang.png
--------------------------------------------------------------------------------
/examples/assets/images/term-sf.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/term-sf.png
--------------------------------------------------------------------------------
/examples/assets/images/theme-index-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/theme-index-blue.png
--------------------------------------------------------------------------------
/examples/assets/images/theme-index-red.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/theme-index-red.png
--------------------------------------------------------------------------------
/examples/assets/images/theme-intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/theme-intro.png
--------------------------------------------------------------------------------
/examples/assets/images/typography.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/typography.png
--------------------------------------------------------------------------------
/examples/assets/images/web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/images/web.png
--------------------------------------------------------------------------------
/examples/assets/styles/fonts/icomoon.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/styles/fonts/icomoon.eot
--------------------------------------------------------------------------------
/examples/assets/styles/fonts/icomoon.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/styles/fonts/icomoon.ttf
--------------------------------------------------------------------------------
/examples/assets/styles/fonts/icomoon.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/assets/styles/fonts/icomoon.woff
--------------------------------------------------------------------------------
/examples/assets/styles/fonts/style.css:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: 'icomoon';
3 | src: url('icomoon.eot?h6xgdm');
4 | src: url('icomoon.eot?h6xgdm#iefix') format('embedded-opentype'),
5 | url('icomoon.ttf?h6xgdm') format('truetype'),
6 | url('icomoon.woff?h6xgdm') format('woff'),
7 | url('icomoon.svg?h6xgdm#icomoon') format('svg');
8 | font-weight: normal;
9 | font-style: normal;
10 | }
11 |
12 | [class^="icon-"], [class*=" icon-"] {
13 | /* use !important to prevent issues with browser extensions that change fonts */
14 | font-family: 'icomoon' !important;
15 | speak: none;
16 | font-style: normal;
17 | font-weight: normal;
18 | font-variant: normal;
19 | text-transform: none;
20 | line-height: 1;
21 |
22 | /* Better Font Rendering =========== */
23 | -webkit-font-smoothing: antialiased;
24 | -moz-osx-font-smoothing: grayscale;
25 | }
26 |
27 | .icon-rate-face-off:before {
28 | content: "\e900";
29 | }
30 | .icon-rate-face-1:before {
31 | content: "\e901";
32 | }
33 | .icon-rate-face-2:before {
34 | content: "\e902";
35 | }
36 | .icon-rate-face-3:before {
37 | content: "\e903";
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/examples/bus.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | export default new Vue();
3 |
--------------------------------------------------------------------------------
/examples/color.js:
--------------------------------------------------------------------------------
1 | export const tintColor = (c, tint) => {
2 | const color = c.replace('#', '');
3 | let red = parseInt(color.slice(0, 2), 16);
4 | let green = parseInt(color.slice(2, 4), 16);
5 | let blue = parseInt(color.slice(4, 6), 16);
6 |
7 | if (tint === 0) { // when primary color is in its rgb space
8 | return [red, green, blue].join(',');
9 | } else {
10 | red += Math.round(tint * (255 - red));
11 | green += Math.round(tint * (255 - green));
12 | blue += Math.round(tint * (255 - blue));
13 | red = red.toString(16);
14 | green = green.toString(16);
15 | blue = blue.toString(16);
16 | return `#${ red }${ green }${ blue }`;
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/examples/components/theme-configurator/editor/color-picker/index.js:
--------------------------------------------------------------------------------
1 | import ColorPicker from './src/main';
2 |
3 | /* istanbul ignore next */
4 | ColorPicker.install = function(Vue) {
5 | Vue.component(ColorPicker.name, ColorPicker);
6 | };
7 |
8 | export default ColorPicker;
9 |
--------------------------------------------------------------------------------
/examples/components/theme-configurator/editor/color-picker/src/draggable.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | let isDragging = false;
3 |
4 | export default function(element, options) {
5 | if (Vue.prototype.$isServer) return;
6 | const moveFn = function(event) {
7 | if (options.drag) {
8 | options.drag(event);
9 | }
10 | };
11 | const upFn = function(event) {
12 | document.removeEventListener('mousemove', moveFn);
13 | document.removeEventListener('mouseup', upFn);
14 | document.onselectstart = null;
15 | document.ondragstart = null;
16 |
17 | isDragging = false;
18 |
19 | if (options.end) {
20 | options.end(event);
21 | }
22 | };
23 | element.addEventListener('mousedown', function(event) {
24 | if (isDragging) return;
25 | document.onselectstart = function() { return false; };
26 | document.ondragstart = function() { return false; };
27 |
28 | document.addEventListener('mousemove', moveFn);
29 | document.addEventListener('mouseup', upFn);
30 | isDragging = true;
31 |
32 | if (options.start) {
33 | options.start(event);
34 | }
35 | });
36 | }
37 |
--------------------------------------------------------------------------------
/examples/components/theme-configurator/editor/input.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/examples/components/theme-configurator/editor/simpleText.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | {{displayKeyName}}
6 |
7 |
8 |
9 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/examples/components/theme-configurator/shortcut.vue:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/examples/components/theme/constant.js:
--------------------------------------------------------------------------------
1 | export const DEFAULT_THEME_CONFIG = {
2 | global: {},
3 | local: {}
4 | };
5 |
6 | export const ELEMENT_THEME_USER_CONFIG = 'ELEMENT_THEME_USER_CONFIG';
7 |
8 | export const ELEMENT_THEME_PREVIEW_CONFIG = 'ELEMENT_THEME_PREVIEW_CONFIG';
9 |
10 | export const ACTION_DOWNLOAD_THEME = 'ELEMENT_THEME_ACTION_DOWNLOAD';
11 |
12 | export const ACTION_APPLY_THEME = 'ELEMENT_THEME_ACTION_ALLPY_CSS';
13 |
14 | export const ACTION_COMPONECT_SELECT = 'ELEMENT_THEME_ACTION_COMPONECT_SELECT';
15 |
16 | export const ACTION_USER_CONFIG_UPDATE = 'ELEMENT_THEME_USER_CONFIG_UPDATE';
17 |
--------------------------------------------------------------------------------
/examples/components/theme/loader/api.js:
--------------------------------------------------------------------------------
1 | import Element from 'main/index.js';
2 | import { post, get } from './ajax';
3 |
4 | const { version } = Element;
5 |
6 | const hostList = {
7 | local: 'http://localhost:3008/',
8 | production: 'https://element-api.ele.me/element/theme/'
9 | };
10 |
11 | const host = hostList[process.env.FAAS_ENV] || hostList.production;
12 |
13 | export const getVars = () => {
14 | return get(`${host}getVariable?version=${version}`);
15 | };
16 |
17 | export const updateVars = (data, cb) => {
18 | return post(`${host}updateVariable?version=${version}`, data, cb);
19 | };
20 |
--------------------------------------------------------------------------------
/examples/components/theme/loader/loading/index.vue:
--------------------------------------------------------------------------------
1 |
10 |
36 |
--------------------------------------------------------------------------------
/examples/components/theme/loader/loading/progress.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import ProgressBar from './progress.vue';
3 |
4 | Vue.prototype.$bar = new Vue(ProgressBar).$mount();
5 |
6 | document.body.appendChild(Vue.prototype.$bar.$el);
7 |
--------------------------------------------------------------------------------
/examples/components/theme/localstorage.js:
--------------------------------------------------------------------------------
1 | import {
2 | ELEMENT_THEME_PREVIEW_CONFIG,
3 | ELEMENT_THEME_USER_CONFIG
4 | } from './constant';
5 |
6 | export const saveToLocal = (key, value) => {
7 | localStorage.setItem(key, JSON.stringify(value));
8 | };
9 |
10 | export const loadFromLocal = (key) => {
11 | try {
12 | return JSON.parse(localStorage.getItem(key));
13 | } catch (e) {
14 | console.error(e);
15 | return null;
16 | }
17 | };
18 |
19 | export const savePreviewToLocal = (value) => {
20 | saveToLocal(ELEMENT_THEME_PREVIEW_CONFIG, value);
21 | };
22 |
23 | export const loadPreviewFromLocal = () => {
24 | return loadFromLocal(ELEMENT_THEME_PREVIEW_CONFIG) || {};
25 | };
26 |
27 | export const removePreviewFromLocal = () => {
28 | return localStorage.removeItem(ELEMENT_THEME_PREVIEW_CONFIG);
29 | };
30 |
31 | export const saveUserThemeToLocal = (value) => {
32 | saveToLocal(ELEMENT_THEME_USER_CONFIG, value);
33 | };
34 |
35 | export const loadUserThemeFromLocal = () => {
36 | return loadFromLocal(ELEMENT_THEME_USER_CONFIG);
37 | };
38 |
39 |
--------------------------------------------------------------------------------
/examples/components/theme/utils.js:
--------------------------------------------------------------------------------
1 | export const isEmptyObject = (obj) => (JSON.stringify(obj) === '{}');
2 |
3 | export const getThemeConfigObject = (config) => {
4 | try {
5 | const conf = JSON.parse(config);
6 | const { global, local } = conf;
7 | if (!isEmptyObject(global) || !isEmptyObject(local)) {
8 | return conf;
9 | }
10 | return false;
11 | } catch (e) {
12 | return false;
13 | }
14 | };
15 |
16 | export const updateDomHeadStyle = (id, styleContent) => {
17 | let styleTag = document.getElementById(id);
18 | if (!styleTag) {
19 | styleTag = document.createElement('style');
20 | styleTag.setAttribute('id', id);
21 | document.head.appendChild(styleTag);
22 | }
23 | styleTag.innerText = styleContent.replace(/@font-face{[^}]+}/, '');
24 | };
25 |
--------------------------------------------------------------------------------
/examples/demo-styles/alert.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-alert .el-alert {
2 | margin: 20px 0 0;
3 | }
4 |
5 | .demo-block.demo-alert .el-alert:first-child {
6 | margin: 0;
7 | }
8 |
--------------------------------------------------------------------------------
/examples/demo-styles/badge.scss:
--------------------------------------------------------------------------------
1 | .demo-badge.demo-block .el-dropdown {
2 | vertical-align: middle;
3 | }
4 | .demo-badge.demo-block {
5 | .share-button {
6 | width: 36px;
7 | padding: 10px;
8 | }
9 |
10 | .mark {
11 | margin-top: 8px;
12 | line-height: 1;
13 | float: right;
14 | }
15 |
16 | .item {
17 | margin-right: 40px;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/demo-styles/border.scss:
--------------------------------------------------------------------------------
1 | .demo-border .text {
2 | width: 15%;
3 | }
4 | .demo-border .line {
5 | width: 70%;
6 | }
7 | .demo-border .line div {
8 | width: 100%;
9 | height: 0;
10 | border-top: 1px solid #eee;
11 | }
12 | .demo-border .line .dashed {
13 | border-top: 2px dashed #eee;
14 | }
15 | .demo-shadow {
16 | height: 100px;
17 | width: 50%;
18 | border: 1px solid #eee;
19 | }
20 | .demo-shadow-text {
21 | line-height: 50px;
22 | color: #666;
23 | font-size: 14px;
24 | }
25 | .demo-radius .title {
26 | color: #666;
27 | font-size: 18px;
28 | margin: 10px 0;
29 | }
30 | .demo-radius .value {
31 | color: #333;
32 | font-size: 16px;
33 | margin: 10px 0;
34 | }
35 | .demo-radius .radius {
36 | height: 60px;
37 | width: 70%;
38 | border: 1px solid #d7dae2;
39 | border-radius: 0;
40 | margin-top: 20px;
41 | }
42 | .demo-radius .radius-30 {
43 | border-radius: 30px;
44 | }
45 |
--------------------------------------------------------------------------------
/examples/demo-styles/button.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-button {
2 | .el-row {
3 | margin-bottom: 20px;
4 |
5 | &:last-child {
6 | margin-bottom: 0;
7 | }
8 | }
9 | .el-button + .el-button {
10 | margin-left: 10px;
11 | }
12 | .el-button-group {
13 | .el-button + .el-button {
14 | margin-left: 0;
15 | }
16 |
17 | & + .el-button-group {
18 | margin-left: 10px;
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/examples/demo-styles/calendar.scss:
--------------------------------------------------------------------------------
1 | .demo-calendar.demo-block {
2 | .is-selected {
3 | color: #1989FA;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/examples/demo-styles/card.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-card {
2 | .text {
3 | font-size: 14px;
4 | }
5 |
6 | .time {
7 | font-size: 13px;
8 | color: #999;
9 | }
10 |
11 | .bottom {
12 | margin-top: 13px;
13 | line-height: 12px;
14 | }
15 |
16 | .item {
17 | margin-bottom: 18px;
18 | }
19 |
20 | .button {
21 | padding: 0;
22 | float: right;
23 | }
24 |
25 | .image {
26 | width: 100%;
27 | display: block;
28 | }
29 |
30 | .box-card {
31 | width: 480px;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/examples/demo-styles/carousel.scss:
--------------------------------------------------------------------------------
1 | .demo-carousel .block {
2 | padding: 30px;
3 | text-align: center;
4 | border-right: solid 1px #eff2f6;
5 | display: inline-block;
6 | width: 49%;
7 | box-sizing: border-box;
8 | &:last-child {
9 | border-right: none;
10 | }
11 | }
12 |
13 | .demo-carousel .demonstration {
14 | display: block;
15 | color: #8492a6;
16 | font-size: 14px;
17 | margin-bottom: 20px;
18 | }
19 |
20 | .demo-carousel .el-carousel__container {
21 | text-align: center;
22 | }
23 |
24 | .demo-carousel .el-carousel__item {
25 | h3 {
26 | color: #fff;
27 | font-size: 18px;
28 | line-height: 300px;
29 | margin: 0;
30 | &.small {
31 | font-size: 14px;
32 | line-height: 150px;
33 | }
34 | &.medium {
35 | font-size: 14px;
36 | line-height: 200px;
37 | }
38 | }
39 | &:nth-child(2n) {
40 | background-color: #99a9bf;
41 | }
42 | &:nth-child(2n + 1) {
43 | background-color: #d3dce6;
44 | }
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/examples/demo-styles/cascader.scss:
--------------------------------------------------------------------------------
1 | .demo-cascader {
2 | .el-cascader {
3 | width: 222px;
4 | }
5 | }
6 | .demo-cascader-size {
7 | .el-cascader {
8 | vertical-align: top;
9 | margin-right: 15px;
10 | }
11 | }
12 | .demo-cascader .source > div {
13 | display: flex;
14 | }
15 | .demo-cascader .block {
16 | padding: 30px 0;
17 | text-align: center;
18 | border-right: solid 1px #eff2f6;
19 | width: 50%;
20 | box-sizing: border-box;
21 | &:last-child {
22 | border-right: none;
23 | }
24 | }
25 | .demo-cascader .demonstration {
26 | display: block;
27 | color: #8492a6;
28 | font-size: 14px;
29 | margin-bottom: 20px;
30 | }
31 |
--------------------------------------------------------------------------------
/examples/demo-styles/collapse.scss:
--------------------------------------------------------------------------------
1 | .demo-collapse {
2 | .el-collapse-item__header {
3 | .header-icon {
4 | margin-left: 5px;
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/examples/demo-styles/color-picker.scss:
--------------------------------------------------------------------------------
1 | .demo-color-picker .block {
2 | padding: 30px 0;
3 | text-align: center;
4 | border-right: solid 1px #eff2f6;
5 | display: inline-block;
6 | width: 50%;
7 | box-sizing: border-box;
8 | &:last-child {
9 | border-right: none;
10 | }
11 | }
12 | .demo-color-picker .demonstration {
13 | display: block;
14 | color: #8492a6;
15 | font-size: 14px;
16 | margin-bottom: 20px;
17 | }
18 | .demo-color-picker .el-color-picker + .el-color-picker {
19 | margin-left: 20px;
20 | }
21 |
--------------------------------------------------------------------------------
/examples/demo-styles/container.scss:
--------------------------------------------------------------------------------
1 | .el-header,
2 | .el-footer {
3 | background-color: #b3c0d1;
4 | color: #333;
5 | line-height: 60px;
6 | }
7 |
8 | .el-aside {
9 | color: #333;
10 | }
11 |
12 | #chang-jian-ye-mian-bu-ju + .demo-container {
13 | .el-header,
14 | .el-footer {
15 | text-align: center;
16 | }
17 |
18 | .el-aside {
19 | background-color: #d3dce6;
20 | text-align: center;
21 | line-height: 200px;
22 | }
23 |
24 | .el-main {
25 | background-color: #e9eef3;
26 | color: #333;
27 | text-align: center;
28 | line-height: 160px;
29 | }
30 |
31 | & > .source > .el-container {
32 | margin-bottom: 40px;
33 |
34 | &:nth-child(5) .el-aside,
35 | &:nth-child(6) .el-aside {
36 | line-height: 260px;
37 | }
38 |
39 | &:nth-child(7) .el-aside {
40 | line-height: 320px;
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/examples/demo-styles/date-picker.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-date-picker .source > div {
2 | padding: 0;
3 | display: flex;
4 | flex-wrap: wrap;
5 | }
6 |
7 | .demo-date-picker .block {
8 | padding: 30px 0;
9 | text-align: center;
10 | border-right: solid 1px #eff2f6;
11 | flex: 1;
12 | &:last-child {
13 | border-right: none;
14 | }
15 | }
16 |
17 | .demo-date-picker .container {
18 | flex: 1;
19 | border-right: solid 1px #eff2f6;
20 | .block {
21 | border-right: none;
22 | &:last-child {
23 | border-top: solid 1px #eff2f6;
24 | }
25 | }
26 | &:last-child {
27 | border-right: none;
28 | }
29 | }
30 |
31 | .demo-date-picker .demonstration {
32 | display: block;
33 | color: #8492a6;
34 | font-size: 14px;
35 | margin-bottom: 20px;
36 | }
37 |
--------------------------------------------------------------------------------
/examples/demo-styles/datetime-picker.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-datetime-picker .source > div {
2 | padding: 0;
3 | display: flex;
4 | }
5 |
6 | .demo-datetime-picker .block {
7 | padding: 30px 0;
8 | text-align: center;
9 | border-right: solid 1px #eff2f6;
10 | flex: 1;
11 | &:last-child {
12 | border-right: none;
13 | }
14 | }
15 |
16 | .demo-datetime-picker .demonstration {
17 | display: block;
18 | color: #8492a6;
19 | font-size: 14px;
20 | margin-bottom: 20px;
21 | }
22 |
--------------------------------------------------------------------------------
/examples/demo-styles/descriptions.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-descriptions {
2 | .margin-top {
3 | margin-top: 20px;
4 | }
5 |
6 | .my-label {
7 | background: #E1F3D8;
8 | }
9 |
10 | .my-content {
11 | background: #FDE2E2;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/examples/demo-styles/dialog.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-dialog {
2 | .dialog-footer button:first-child {
3 | margin-right: 10px;
4 | }
5 | .full-image {
6 | width: 100%;
7 | }
8 | .el-dialog__wrapper {
9 | margin: 0;
10 | }
11 | .el-select {
12 | width: 300px;
13 | }
14 | .el-input {
15 | width: 300px;
16 | }
17 | .el-button--text {
18 | margin-right: 15px;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/examples/demo-styles/divider.scss:
--------------------------------------------------------------------------------
1 | .demo-divider-container-1 {
2 | display: inline-block;
3 | width: 33%;
4 | }
5 |
6 | .demo-divider-container-2 {
7 | display: inline-block;
8 | width: 50%;
9 | }
--------------------------------------------------------------------------------
/examples/demo-styles/drawer.scss:
--------------------------------------------------------------------------------
1 | .demo-drawer {
2 | &__content {
3 | display: flex;
4 | flex-direction: column;
5 | height: 100%;
6 | form {
7 | flex: 1;
8 | }
9 | }
10 |
11 | &__footer {
12 | display: flex;
13 | button {
14 | flex: 1;
15 | }
16 | }
17 | }
18 |
19 | .el-drawer__body {
20 | padding: 20px;
21 | }
22 |
--------------------------------------------------------------------------------
/examples/demo-styles/dropdown.scss:
--------------------------------------------------------------------------------
1 | .demo-block {
2 | .el-dropdown {
3 | vertical-align: top;
4 |
5 | & + .el-dropdown {
6 | margin-left: 15px;
7 | }
8 | }
9 | .el-dropdown-link {
10 | cursor: pointer;
11 | color: #409eff;
12 | }
13 | .el-icon-arrow-down {
14 | font-size: 12px;
15 | }
16 | }
17 |
18 | .block-col-2 {
19 | margin: -24px;
20 |
21 | .el-col {
22 | padding: 30px 0;
23 | text-align: center;
24 | border-right: 1px solid #eff2f6;
25 |
26 | &:last-child {
27 | border-right: 0;
28 | }
29 | }
30 | }
31 |
32 | .demo-dropdown .demonstration {
33 | display: block;
34 | color: #8492a6;
35 | font-size: 14px;
36 | margin-bottom: 20px;
37 | }
38 |
--------------------------------------------------------------------------------
/examples/demo-styles/i18n.scss:
--------------------------------------------------------------------------------
1 | ul.language-list {
2 | color: #5e6d82;
3 | font-size: 14px;
4 | padding-left: 20px;
5 | li {
6 | line-height: 1.8;
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/examples/demo-styles/infinite-scroll.scss:
--------------------------------------------------------------------------------
1 | .infinite-list {
2 | height: 300px;
3 | padding: 0;
4 | margin: 0;
5 | list-style: none;
6 |
7 | .infinite-list-item {
8 | display: flex;
9 | align-items: center;
10 | justify-content: center;
11 | height: 50px;
12 | background: #e8f3fe;
13 | margin: 10px;
14 | color: lighten(#1989fa, 20%);
15 | & + .list-item {
16 | margin-top: 10px
17 | }
18 | }
19 | }
20 |
21 | .infinite-list-wrapper {
22 | height: 300px;
23 | text-align: center;
24 |
25 | .list{
26 | padding: 0;
27 | margin: 0;
28 | list-style: none;
29 | }
30 |
31 |
32 | .list-item{
33 | display: flex;
34 | align-items: center;
35 | justify-content: center;
36 | height: 50px;
37 | background: #fff6f6;
38 | color: #ff8484;
39 | & + .list-item {
40 | margin-top: 10px
41 | }
42 | }
43 | }
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/examples/demo-styles/input-number.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-input-number {
2 | .el-input-number + .el-input-number {
3 | margin-left: 10px;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/examples/demo-styles/layout.scss:
--------------------------------------------------------------------------------
1 | .demo-layout {
2 | .el-row {
3 | margin-bottom: 20px;
4 | &:last-child {
5 | margin-bottom: 0;
6 | }
7 | }
8 | .el-col {
9 | border-radius: 4px;
10 | }
11 | .bg-purple-dark {
12 | background: #99a9bf;
13 | }
14 | .bg-purple {
15 | background: #d3dce6;
16 | }
17 | .bg-purple-light {
18 | background: #e5e9f2;
19 | }
20 | .grid-content {
21 | border-radius: 4px;
22 | min-height: 36px;
23 | }
24 | .row-bg {
25 | padding: 10px 0;
26 | background-color: #f9fafc;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/examples/demo-styles/loading.scss:
--------------------------------------------------------------------------------
1 | .demo-loading .el-table {
2 | border: none;
3 | }
4 |
--------------------------------------------------------------------------------
/examples/demo-styles/menu.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-menu {
2 | .el-menu-demo {
3 | padding-left: 55px;
4 | }
5 | .el-menu-vertical-demo:not(.el-menu--collapse) {
6 | width: 240px;
7 | min-height: 400px;
8 | }
9 | .line {
10 | height: 1px;
11 | background-color: #e0e6ed;
12 | margin: 35px -24px;
13 | }
14 | h5 {
15 | font-size: 14px;
16 | color: #8492a6;
17 | margin-top: 10px;
18 | }
19 | .tac {
20 | text-align: center;
21 |
22 | .el-menu-vertical-demo {
23 | display: inline-block;
24 | text-align: left;
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/examples/demo-styles/pagination.scss:
--------------------------------------------------------------------------------
1 | .demo-pagination .source.first {
2 | padding: 0;
3 | }
4 |
5 | .demo-pagination .first .block {
6 | padding: 30px 0;
7 | text-align: center;
8 | border-right: solid 1px #eff2f6;
9 | display: inline-block;
10 | width: 50%;
11 | box-sizing: border-box;
12 |
13 | &:last-child {
14 | border-right: none;
15 | }
16 | }
17 |
18 | .demo-pagination .first .demonstration {
19 | display: block;
20 | color: #8492a6;
21 | font-size: 14px;
22 | margin-bottom: 20px;
23 | }
24 |
25 | .demo-pagination .source.last {
26 | padding: 0;
27 | }
28 |
29 | .demo-pagination .last .block {
30 | padding: 30px 24px;
31 | border-bottom: solid 1px #eff2f6;
32 | &:last-child {
33 | border-bottom: none;
34 | }
35 | }
36 |
37 | .demo-pagination .last .demonstration {
38 | font-size: 14px;
39 | color: #8492a6;
40 | line-height: 44px;
41 | }
42 |
43 | .demo-pagination .last .demonstration + .el-pagination {
44 | width: 70%;
45 | margin: 5px 20px 0 0;
46 | }
47 |
--------------------------------------------------------------------------------
/examples/demo-styles/popover.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-popover {
2 | .el-popover + .el-popover {
3 | margin-left: 10px;
4 | }
5 | .el-input {
6 | width: 360px;
7 | }
8 | .el-button {
9 | margin-left: 10px;
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/examples/demo-styles/progress.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-progress {
2 | .el-progress--line {
3 | margin-bottom: 15px;
4 | width: 350px;
5 | }
6 | .el-progress--circle {
7 | margin-right: 15px;
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/examples/demo-styles/rate.scss:
--------------------------------------------------------------------------------
1 | .demo-rate .block {
2 | padding: 30px 0;
3 | text-align: center;
4 | border-right: solid 1px #eff2f6;
5 | display: inline-block;
6 | width: 49%;
7 | box-sizing: border-box;
8 | &:last-child {
9 | border-right: none;
10 | }
11 | }
12 |
13 | .demo-rate .demonstration {
14 | display: block;
15 | color: #8492a6;
16 | font-size: 14px;
17 | margin-bottom: 20px;
18 | }
19 |
--------------------------------------------------------------------------------
/examples/demo-styles/select.scss:
--------------------------------------------------------------------------------
1 | .demo-select .el-select {
2 | width: 240px;
3 | }
4 |
--------------------------------------------------------------------------------
/examples/demo-styles/skeleton.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-skeleton {
2 | .el-card {
3 | margin-bottom: 16px;
4 | }
5 |
6 | .card-header {
7 | display: flex;
8 | justify-content: space-between;
9 | align-items: center;
10 | }
11 |
12 | .time {
13 | font-size: 13px;
14 | color: #999;
15 | }
16 |
17 | .bottom {
18 | margin-top: 13px;
19 | line-height: 12px;
20 | }
21 |
22 | .button {
23 | padding: 0;
24 | min-height: auto;
25 | }
26 |
27 | .image {
28 | &.multi-content {
29 | width: 400px;
30 | height: 267px;
31 | }
32 |
33 | width: 100%;
34 | display: block;
35 | }
36 |
37 | .clearfix:before,
38 | .clearfix:after {
39 | display: table;
40 | content: '';
41 | }
42 |
43 | .clearfix:after {
44 | clear: both;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/examples/demo-styles/slider.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-slider .source {
2 | padding: 0;
3 | }
4 |
5 | .demo-block.demo-slider .block {
6 | padding: 30px 24px;
7 | overflow: hidden;
8 | border-bottom: solid 1px #eff2f6;
9 | &:last-child {
10 | border-bottom: none;
11 | }
12 | }
13 |
14 | .demo-block.demo-slider .demonstration {
15 | font-size: 14px;
16 | color: #8492a6;
17 | line-height: 44px;
18 | }
19 |
20 | .demo-block.demo-slider .demonstration + .el-slider {
21 | float: right;
22 | width: 70%;
23 | margin-right: 20px;
24 | }
25 |
--------------------------------------------------------------------------------
/examples/demo-styles/switch.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-switch {
2 | .el-switch {
3 | margin: 20px 20px 20px 0;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/examples/demo-styles/table.scss:
--------------------------------------------------------------------------------
1 | .el-table .warning-row {
2 | background: oldlace;
3 | }
4 |
5 | .el-table .success-row {
6 | background: #f0f9eb;
7 | }
8 |
9 | .demo-table .name-wrapper {
10 | display: inline-block;
11 | }
12 |
13 | .demo-table .demo-table-expand {
14 | label {
15 | width: 90px;
16 | color: #99a9bf;
17 | }
18 | .el-form-item {
19 | margin-right: 0;
20 | margin-bottom: 0;
21 | width: 50%;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/examples/demo-styles/tag.scss:
--------------------------------------------------------------------------------
1 | .demo-block.demo-tag {
2 | .el-tag + .el-tag {
3 | margin-left: 10px;
4 | }
5 |
6 | .button-new-tag {
7 | margin-left: 10px;
8 | height: 32px;
9 | line-height: 30px;
10 | padding-top: 0;
11 | padding-bottom: 0;
12 | }
13 |
14 | .input-new-tag {
15 | width: 90px;
16 | margin-left: 10px;
17 | vertical-align: bottom;
18 | }
19 |
20 | .tag-group {
21 | display: flex;
22 | align-items: center;
23 |
24 | &__title {
25 | width: 45px;
26 | font-size: 14px;
27 | color: #606266;
28 | }
29 |
30 | &+.tag-group {
31 | margin-top: 10px;
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/examples/demo-styles/time-picker.scss:
--------------------------------------------------------------------------------
1 | .demo-block {
2 | .el-date-editor + .el-date-editor {
3 | margin-left: 10px;
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/examples/demo-styles/timeline.scss:
--------------------------------------------------------------------------------
1 | .demo-timeline .source .radio {
2 | margin-bottom: 20px;
3 | }
4 | .demo-timeline .source .radio .el-radio-group {
5 | margin-left: 20px;
6 | }
7 |
--------------------------------------------------------------------------------
/examples/demo-styles/tooltip.scss:
--------------------------------------------------------------------------------
1 | .demo-tooltip {
2 | .el-tooltip + .el-tooltip {
3 | margin-left: 15px;
4 | }
5 | .box {
6 | width: 400px;
7 |
8 | .top {
9 | text-align: center;
10 | }
11 |
12 | .left {
13 | float: left;
14 | width: 60px;
15 | }
16 |
17 | .right {
18 | float: right;
19 | width: 60px;
20 | }
21 |
22 | .bottom {
23 | clear: both;
24 | text-align: center;
25 | }
26 |
27 | .item {
28 | margin: 4px;
29 | }
30 |
31 | .left .el-tooltip__popper,
32 | .right .el-tooltip__popper {
33 | padding: 8px 10px;
34 | }
35 | .el-tooltip {
36 | margin-left: 0;
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/examples/demo-styles/transfer.scss:
--------------------------------------------------------------------------------
1 | .demo-transfer {
2 | .transfer-footer {
3 | margin-left: 15px;
4 | padding: 6px 5px;
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/examples/demo-styles/transition.scss:
--------------------------------------------------------------------------------
1 | .demo-transition {
2 | .transition-box {
3 | margin-bottom: 10px;
4 | width: 200px;
5 | height: 100px;
6 | border-radius: 4px;
7 | background-color: #409EFF;
8 | text-align: center;
9 | color: #fff;
10 | padding: 40px 20px;
11 | margin-right: 20px;
12 | box-sizing: border-box;
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/examples/demo-styles/tree.scss:
--------------------------------------------------------------------------------
1 | .demo-tree {
2 | .leaf {
3 | width: 20px;
4 | background: #ddd;
5 | }
6 |
7 | .folder {
8 | width: 20px;
9 | background: #888;
10 | }
11 |
12 | .buttons {
13 | margin-top: 20px;
14 | }
15 |
16 | .filter-tree {
17 | margin-top: 20px;
18 | }
19 |
20 | .custom-tree-container {
21 | display: flex;
22 | margin: -24px;
23 | }
24 |
25 | .block {
26 | flex: 1;
27 | padding: 8px 24px 24px;
28 |
29 | &:first-child {
30 | border-right: solid 1px #eff2f6;
31 | }
32 |
33 | > p {
34 | text-align: center;
35 | margin: 0;
36 | line-height: 4;
37 | }
38 | }
39 |
40 | .custom-tree-node {
41 | flex: 1;
42 | display: flex;
43 | align-items: center;
44 | justify-content: space-between;
45 | font-size: 14px;
46 | padding-right: 8px;
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/examples/demo-styles/typography.scss:
--------------------------------------------------------------------------------
1 | .demo-typo-size {
2 | .color-dark-light {
3 | color: #99a9bf;
4 | }
5 | }
6 | .demo-term-box img {
7 | width: 24%;
8 | margin: 0 4% 20px 0;
9 | }
10 |
11 | .lineH-left {
12 | display: inline-block;
13 | height: 80px;
14 | }
15 | .lineH-right {
16 | display: inline-block;
17 | list-style: none;
18 | padding: 0 0 0 90px;
19 | margin: 0;
20 | vertical-align: top;
21 | }
22 | .lineH-right li {
23 | font-size: 13px;
24 | color: #666;
25 | height: 20px;
26 | line-height: 20px;
27 | }
28 | .lineH-right li span {
29 | padding-left: 40px;
30 | }
31 |
--------------------------------------------------------------------------------
/examples/demo-styles/upload.scss:
--------------------------------------------------------------------------------
1 | .upload-tip {
2 | color: #8492a6;
3 | font-size: 12px;
4 | margin-top: 7px;
5 | }
6 | .demo-block {
7 | margin-bottom: 24px;
8 |
9 | .upload-demo {
10 | width: 360px;
11 | }
12 | .avatar-uploader {
13 | .el-upload {
14 | border: 1px dashed #d9d9d9;
15 | border-radius: 6px;
16 | cursor: pointer;
17 | position: relative;
18 | overflow: hidden;
19 |
20 | &:hover,
21 | &:focus {
22 | border-color: #409eff;
23 | }
24 | }
25 | .avatar-uploader-icon {
26 | font-size: 28px;
27 | color: #8c939d;
28 | width: 178px;
29 | height: 178px;
30 | line-height: 178px;
31 | text-align: center;
32 | }
33 | .avatar {
34 | width: 178px;
35 | height: 178px;
36 | display: block;
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/examples/docs/en-US/icon.md:
--------------------------------------------------------------------------------
1 | ## Icon
2 |
3 | Element provides a set of common icons.
4 |
5 | ### Basic usage
6 |
7 | Just assign the class name to `el-icon-iconName`.
8 |
9 | :::demo
10 |
11 | ```html
12 |
13 |
14 |
15 | Search
16 |
17 | ```
18 | :::
19 |
20 | ### Icons
21 |
22 |
23 | -
24 |
25 |
26 | {{'el-icon-' + name}}
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/examples/docs/es/icon.md:
--------------------------------------------------------------------------------
1 | ## Icon
2 |
3 | Element proporciona un conjunto de iconos propios.
4 |
5 | ### Uso básico
6 |
7 | Simplemente asigna el nombre de la clase a `el-icon-iconName`.
8 |
9 | :::demo
10 |
11 | ```html
12 |
13 |
14 |
15 | Search
16 |
17 | ```
18 | :::
19 |
20 | ### Iconos
21 |
22 |
23 | -
24 |
25 |
26 | {{'el-icon-' + name}}
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/examples/docs/fr-FR/icon.md:
--------------------------------------------------------------------------------
1 | ## Icônes
2 |
3 | Element fournit un ensemble d'icônes basiques.
4 |
5 | ### Usage
6 |
7 | Il vous suffit d'assigner le nom de classe `el-icon-iconName` à une balise ``.
8 |
9 | :::demo
10 |
11 | ```html
12 |
13 |
14 |
15 | Chercher
16 |
17 | ```
18 | :::
19 |
20 | ### Icônes
21 |
22 |
23 | -
24 |
25 |
26 | {{'el-icon-' + name}}
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/examples/docs/zh-CN/icon.md:
--------------------------------------------------------------------------------
1 | ## Icon 图标
2 |
3 | 提供了一套常用的图标集合。
4 |
5 | ### 使用方法
6 |
7 | 直接通过设置类名为 `el-icon-iconName` 来使用即可。例如:
8 |
9 | :::demo
10 | ```html
11 |
12 |
13 |
14 | 搜索
15 |
16 | ```
17 | :::
18 |
19 | ### 图标集合
20 |
21 |
22 | -
23 |
24 |
25 | {{'el-icon-' + name}}
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/examples/docs/zh-CN/page-header.md:
--------------------------------------------------------------------------------
1 | ## PageHeader 页头
2 |
3 | 如果页面的路径比较简单,推荐使用页头组件而非面包屑组件。
4 |
5 | ### 基础
6 |
7 | :::demo
8 | ```html
9 |
10 |
11 |
12 |
21 | ```
22 | :::
23 |
24 | ### Attributes
25 | | 参数 | 说明 | 类型 | 可选值 | 默认值 |
26 | |---------- |-------------- |---------- |------------------------------ | ------ |
27 | | title | 标题 | string | — | 返回 |
28 | | content | 内容 | string | — | — |
29 |
30 |
31 | ### Events
32 | | 事件名称 | 说明 | 回调参数 |
33 | |---------- |-------------- |---------- |
34 | | back | 点击左侧区域触发 | — |
35 |
36 | ### Slots
37 | | 事件名称 | 说明 |
38 | |---------- |------------- |
39 | | title | 标题内容 |
40 | | content | 内容 |
41 |
--------------------------------------------------------------------------------
/examples/dom/class.js:
--------------------------------------------------------------------------------
1 | export const hasClass = function(obj, cls) {
2 | return obj.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)'));
3 | };
4 |
5 | export const addClass = function(obj, cls) {
6 | if (!hasClass(obj, cls)) obj.className += ' ' + cls;
7 | };
8 |
9 | export const removeClass = function(obj, cls) {
10 | if (hasClass(obj, cls)) {
11 | const reg = new RegExp('(\\s|^)' + cls + '(\\s|$)');
12 | obj.className = obj.className.replace(reg, ' ');
13 | }
14 | };
15 |
16 | export const toggleClass = function(obj, cls) {
17 | if (hasClass(obj, cls)) {
18 | removeClass(obj, cls);
19 | } else {
20 | addClass(obj, cls);
21 | }
22 | };
23 |
--------------------------------------------------------------------------------
/examples/extension/.gitignore:
--------------------------------------------------------------------------------
1 | dist
--------------------------------------------------------------------------------
/examples/extension/src/app.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import App from './editor/index';
3 | import Element from 'main/index.js';
4 | import 'packages/theme-chalk/src/index.scss';
5 |
6 | export default () => {
7 | Vue.use(Element, { zIndex: 100000 });
8 | const root = document.createElement('div');
9 | document.body.appendChild(root);
10 |
11 | window.ga = function() {
12 | console.log(arguments);
13 | };
14 |
15 | new Vue({ // eslint-disable-line
16 | render: h => h(App)
17 | }).$mount(root);
18 | };
19 |
--------------------------------------------------------------------------------
/examples/extension/src/background.js:
--------------------------------------------------------------------------------
1 | chrome.browserAction.onClicked.addListener(tab => {
2 | chrome.tabs.executeScript(tab.id, {
3 | file: 'entry.js'
4 | });
5 | })
6 | ;
7 |
--------------------------------------------------------------------------------
/examples/extension/src/editor/icon-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/extension/src/editor/icon-close.png
--------------------------------------------------------------------------------
/examples/extension/src/editor/icon-entrance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/extension/src/editor/icon-entrance.png
--------------------------------------------------------------------------------
/examples/extension/src/editor/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
--------------------------------------------------------------------------------
/examples/extension/src/editor/utils.js:
--------------------------------------------------------------------------------
1 | const ELEMENT_THEME_USER_CONFIG = 'ELEMENT_THEME_USER_CONFIG';
2 | export const loadFromLocal = (key) => {
3 | return new window.Promise((resolve) => {
4 | chrome.storage.local.get([key], (result) => {
5 | resolve(result[key]);
6 | });
7 | });
8 | };
9 | export const saveToLocal = (key, value) => {
10 | chrome.storage.local.set({[key]: value});
11 | };
12 |
13 | export const loadUserThemeFromLocal = () => {
14 | return loadFromLocal(ELEMENT_THEME_USER_CONFIG);
15 | };
16 | export const saveUserThemeToLocal = (value) => {
17 | saveToLocal(ELEMENT_THEME_USER_CONFIG, value);
18 | };
19 |
--------------------------------------------------------------------------------
/examples/extension/src/entry.js:
--------------------------------------------------------------------------------
1 | import init from './app';
2 |
3 | if (!window.ElementThemeRollerInit) {
4 | window.ElementThemeRollerInit = true;
5 | init();
6 | }
7 |
8 |
--------------------------------------------------------------------------------
/examples/extension/src/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/extension/src/icon.png
--------------------------------------------------------------------------------
/examples/extension/src/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Element Theme Roller",
3 | "version": "0.0.9",
4 | "description": "Customize all Design Tokens of Element UI and preview in real-time",
5 | "web_accessible_resources": ["entry.js"],
6 | "background": {
7 | "scripts": [
8 | "background.js"
9 | ],
10 | "persistent": true
11 | },
12 | "icons": {
13 | "128": "icon.png"
14 | },
15 | "browser_action": {
16 | "default_icon": "icon.png",
17 | "default_title": "Element Theme Roller"
18 | },
19 | "content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'",
20 | "manifest_version": 2,
21 | "permissions": [
22 | "activeTab",
23 | "storage",
24 | "https://*.ele.me/",
25 | "https://*.elenet.me/"
26 | ]
27 | }
--------------------------------------------------------------------------------
/examples/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/examples/favicon.ico
--------------------------------------------------------------------------------
/examples/i18n/route.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "lang": "zh-CN"
4 | },
5 | {
6 | "lang": "en-US"
7 | },
8 | {
9 | "lang": "es"
10 | },
11 | {
12 | "lang": "fr-FR"
13 | }
14 | ]
15 |
--------------------------------------------------------------------------------
/examples/i18n/title.json:
--------------------------------------------------------------------------------
1 | {
2 | "zh-CN": {
3 | "home": "Element - 网站快速成型工具",
4 | "guide": "指南 | Element",
5 | "component": "组件 | Element",
6 | "resource": "资源 | Element"
7 | },
8 | "en-US": {
9 | "home": "Element - A Desktop UI Toolkit for Web",
10 | "guide": "Guide | Element",
11 | "component": "Component | Element",
12 | "resource": "Resource | Element"
13 | },
14 | "es": {
15 | "home": "Element - Un kit de interfaz de usuario para la web",
16 | "guide": "Guía | Element",
17 | "component": "Componentes | Element",
18 | "resource": "Recursos | Element"
19 | },
20 | "fr-FR": {
21 | "home": "Element - Un kit de composants d'interface pour le web",
22 | "guide": "Guide | Element",
23 | "component": "Composants | Element",
24 | "resource": "Ressources | Element"
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/examples/pages/template/theme-nav.tpl:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/examples/play.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Element from 'main/index.js';
3 | import App from './play/index.vue';
4 | import 'packages/theme-chalk/src/index.scss';
5 |
6 | Vue.use(Element);
7 |
8 | new Vue({ // eslint-disable-line
9 | render: h => h(App)
10 | }).$mount('#app');
11 |
--------------------------------------------------------------------------------
/examples/play/index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
16 |
--------------------------------------------------------------------------------
/examples/util.js:
--------------------------------------------------------------------------------
1 | export function stripScript(content) {
2 | const result = content.match(/<(script)>([\s\S]+)<\/\1>/);
3 | return result && result[2] ? result[2].trim() : '';
4 | }
5 |
6 | export function stripStyle(content) {
7 | const result = content.match(/<(style)\s*>([\s\S]+)<\/\1>/);
8 | return result && result[2] ? result[2].trim() : '';
9 | }
10 |
11 | export function stripTemplate(content) {
12 | content = content.trim();
13 | if (!content) {
14 | return content;
15 | }
16 | return content.replace(/<(script|style)[\s\S]+<\/\1>/g, '').trim();
17 | }
18 |
--------------------------------------------------------------------------------
/examples/versions.json:
--------------------------------------------------------------------------------
1 | {"1.4.13":"1.4","2.0.11":"2.0","2.1.0":"2.1","2.2.2":"2.2","2.3.9":"2.3","2.4.11":"2.4","2.5.4":"2.5","2.6.3":"2.6","2.7.2":"2.7","2.8.2":"2.8","2.9.2":"2.9","2.10.1":"2.10","2.11.1":"2.11","2.12.0":"2.12","2.13.2":"2.13","2.14.1":"2.14","2.15.14":"2.15"}
--------------------------------------------------------------------------------
/packages/alert/index.js:
--------------------------------------------------------------------------------
1 | import Alert from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Alert.install = function(Vue) {
5 | Vue.component(Alert.name, Alert);
6 | };
7 |
8 | export default Alert;
9 |
--------------------------------------------------------------------------------
/packages/aside/index.js:
--------------------------------------------------------------------------------
1 | import Aside from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Aside.install = function(Vue) {
5 | Vue.component(Aside.name, Aside);
6 | };
7 |
8 | export default Aside;
9 |
--------------------------------------------------------------------------------
/packages/aside/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/packages/autocomplete/index.js:
--------------------------------------------------------------------------------
1 | import ElAutocomplete from './src/autocomplete';
2 |
3 | /* istanbul ignore next */
4 | ElAutocomplete.install = function(Vue) {
5 | Vue.component(ElAutocomplete.name, ElAutocomplete);
6 | };
7 |
8 | export default ElAutocomplete;
9 |
--------------------------------------------------------------------------------
/packages/avatar/index.js:
--------------------------------------------------------------------------------
1 | import Avatar from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Avatar.install = function(Vue) {
5 | Vue.component(Avatar.name, Avatar);
6 | };
7 |
8 | export default Avatar;
9 |
--------------------------------------------------------------------------------
/packages/backtop/index.js:
--------------------------------------------------------------------------------
1 | import Backtop from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Backtop.install = function(Vue) {
5 | Vue.component(Backtop.name, Backtop);
6 | };
7 |
8 | export default Backtop;
9 |
--------------------------------------------------------------------------------
/packages/badge/index.js:
--------------------------------------------------------------------------------
1 | import Badge from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Badge.install = function(Vue) {
5 | Vue.component(Badge.name, Badge);
6 | };
7 |
8 | export default Badge;
9 |
--------------------------------------------------------------------------------
/packages/breadcrumb-item/index.js:
--------------------------------------------------------------------------------
1 | import ElBreadcrumbItem from '../breadcrumb/src/breadcrumb-item';
2 |
3 | /* istanbul ignore next */
4 | ElBreadcrumbItem.install = function(Vue) {
5 | Vue.component(ElBreadcrumbItem.name, ElBreadcrumbItem);
6 | };
7 |
8 | export default ElBreadcrumbItem;
9 |
--------------------------------------------------------------------------------
/packages/breadcrumb/index.js:
--------------------------------------------------------------------------------
1 | import ElBreadcrumb from './src/breadcrumb';
2 |
3 | /* istanbul ignore next */
4 | ElBreadcrumb.install = function(Vue) {
5 | Vue.component(ElBreadcrumb.name, ElBreadcrumb);
6 | };
7 |
8 | export default ElBreadcrumb;
9 |
--------------------------------------------------------------------------------
/packages/breadcrumb/src/breadcrumb.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
35 |
--------------------------------------------------------------------------------
/packages/button-group/index.js:
--------------------------------------------------------------------------------
1 | import ElButtonGroup from '../button/src/button-group';
2 |
3 | /* istanbul ignore next */
4 | ElButtonGroup.install = function(Vue) {
5 | Vue.component(ElButtonGroup.name, ElButtonGroup);
6 | };
7 |
8 | export default ElButtonGroup;
9 |
--------------------------------------------------------------------------------
/packages/button/index.js:
--------------------------------------------------------------------------------
1 | import ElButton from './src/button';
2 |
3 | /* istanbul ignore next */
4 | ElButton.install = function(Vue) {
5 | Vue.component(ElButton.name, ElButton);
6 | };
7 |
8 | export default ElButton;
9 |
--------------------------------------------------------------------------------
/packages/button/src/button-group.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
--------------------------------------------------------------------------------
/packages/calendar/index.js:
--------------------------------------------------------------------------------
1 | import Calendar from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Calendar.install = function(Vue) {
5 | Vue.component(Calendar.name, Calendar);
6 | };
7 |
8 | export default Calendar;
9 |
--------------------------------------------------------------------------------
/packages/card/index.js:
--------------------------------------------------------------------------------
1 | import Card from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Card.install = function(Vue) {
5 | Vue.component(Card.name, Card);
6 | };
7 |
8 | export default Card;
9 |
--------------------------------------------------------------------------------
/packages/card/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
24 |
--------------------------------------------------------------------------------
/packages/carousel-item/index.js:
--------------------------------------------------------------------------------
1 | import ElCarouselItem from '../carousel/src/item';
2 |
3 | /* istanbul ignore next */
4 | ElCarouselItem.install = function(Vue) {
5 | Vue.component(ElCarouselItem.name, ElCarouselItem);
6 | };
7 |
8 | export default ElCarouselItem;
9 |
--------------------------------------------------------------------------------
/packages/carousel/index.js:
--------------------------------------------------------------------------------
1 | import Carousel from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Carousel.install = function(Vue) {
5 | Vue.component(Carousel.name, Carousel);
6 | };
7 |
8 | export default Carousel;
9 |
--------------------------------------------------------------------------------
/packages/cascader-panel/index.js:
--------------------------------------------------------------------------------
1 | import CascaderPanel from './src/cascader-panel';
2 |
3 | /* istanbul ignore next */
4 | CascaderPanel.install = function(Vue) {
5 | Vue.component(CascaderPanel.name, CascaderPanel);
6 | };
7 |
8 | export default CascaderPanel;
9 |
--------------------------------------------------------------------------------
/packages/cascader/index.js:
--------------------------------------------------------------------------------
1 | import Cascader from './src/cascader';
2 |
3 | /* istanbul ignore next */
4 | Cascader.install = function(Vue) {
5 | Vue.component(Cascader.name, Cascader);
6 | };
7 |
8 | export default Cascader;
9 |
--------------------------------------------------------------------------------
/packages/checkbox-button/index.js:
--------------------------------------------------------------------------------
1 | import ElCheckboxButton from '../checkbox/src/checkbox-button.vue';
2 |
3 | /* istanbul ignore next */
4 | ElCheckboxButton.install = function(Vue) {
5 | Vue.component(ElCheckboxButton.name, ElCheckboxButton);
6 | };
7 |
8 | export default ElCheckboxButton;
9 |
--------------------------------------------------------------------------------
/packages/checkbox-group/index.js:
--------------------------------------------------------------------------------
1 | import ElCheckboxGroup from '../checkbox/src/checkbox-group.vue';
2 |
3 | /* istanbul ignore next */
4 | ElCheckboxGroup.install = function(Vue) {
5 | Vue.component(ElCheckboxGroup.name, ElCheckboxGroup);
6 | };
7 |
8 | export default ElCheckboxGroup;
9 |
--------------------------------------------------------------------------------
/packages/checkbox/index.js:
--------------------------------------------------------------------------------
1 | import ElCheckbox from './src/checkbox';
2 |
3 | /* istanbul ignore next */
4 | ElCheckbox.install = function(Vue) {
5 | Vue.component(ElCheckbox.name, ElCheckbox);
6 | };
7 |
8 | export default ElCheckbox;
9 |
--------------------------------------------------------------------------------
/packages/checkbox/src/checkbox-group.vue:
--------------------------------------------------------------------------------
1 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/packages/col/index.js:
--------------------------------------------------------------------------------
1 | import ElCol from './src/col';
2 |
3 | /* istanbul ignore next */
4 | ElCol.install = function(Vue) {
5 | Vue.component(ElCol.name, ElCol);
6 | };
7 |
8 | export default ElCol;
9 |
10 |
--------------------------------------------------------------------------------
/packages/collapse-item/index.js:
--------------------------------------------------------------------------------
1 | import ElCollapseItem from '../collapse/src/collapse-item.vue';
2 |
3 | /* istanbul ignore next */
4 | ElCollapseItem.install = function(Vue) {
5 | Vue.component(ElCollapseItem.name, ElCollapseItem);
6 | };
7 |
8 | export default ElCollapseItem;
9 |
--------------------------------------------------------------------------------
/packages/collapse/index.js:
--------------------------------------------------------------------------------
1 | import ElCollapse from './src/collapse';
2 |
3 | /* istanbul ignore next */
4 | ElCollapse.install = function(Vue) {
5 | Vue.component(ElCollapse.name, ElCollapse);
6 | };
7 |
8 | export default ElCollapse;
9 |
10 |
--------------------------------------------------------------------------------
/packages/color-picker/index.js:
--------------------------------------------------------------------------------
1 | import ColorPicker from './src/main';
2 |
3 | /* istanbul ignore next */
4 | ColorPicker.install = function(Vue) {
5 | Vue.component(ColorPicker.name, ColorPicker);
6 | };
7 |
8 | export default ColorPicker;
9 |
--------------------------------------------------------------------------------
/packages/color-picker/src/draggable.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | let isDragging = false;
3 |
4 | export default function(element, options) {
5 | if (Vue.prototype.$isServer) return;
6 | const moveFn = function(event) {
7 | if (options.drag) {
8 | options.drag(event);
9 | }
10 | };
11 | const upFn = function(event) {
12 | document.removeEventListener('mousemove', moveFn);
13 | document.removeEventListener('mouseup', upFn);
14 | document.onselectstart = null;
15 | document.ondragstart = null;
16 |
17 | isDragging = false;
18 |
19 | if (options.end) {
20 | options.end(event);
21 | }
22 | };
23 | element.addEventListener('mousedown', function(event) {
24 | if (isDragging) return;
25 | document.onselectstart = function() { return false; };
26 | document.ondragstart = function() { return false; };
27 |
28 | document.addEventListener('mousemove', moveFn);
29 | document.addEventListener('mouseup', upFn);
30 | isDragging = true;
31 |
32 | if (options.start) {
33 | options.start(event);
34 | }
35 | });
36 | }
37 |
--------------------------------------------------------------------------------
/packages/container/index.js:
--------------------------------------------------------------------------------
1 | import Container from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Container.install = function(Vue) {
5 | Vue.component(Container.name, Container);
6 | };
7 |
8 | export default Container;
9 |
--------------------------------------------------------------------------------
/packages/container/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
34 |
--------------------------------------------------------------------------------
/packages/date-picker/index.js:
--------------------------------------------------------------------------------
1 | import DatePicker from './src/picker/date-picker';
2 |
3 | /* istanbul ignore next */
4 | DatePicker.install = function install(Vue) {
5 | Vue.component(DatePicker.name, DatePicker);
6 | };
7 |
8 | export default DatePicker;
9 |
--------------------------------------------------------------------------------
/packages/date-picker/src/picker/date-picker.js:
--------------------------------------------------------------------------------
1 | import Picker from '../picker';
2 | import DatePanel from '../panel/date';
3 | import DateRangePanel from '../panel/date-range';
4 | import MonthRangePanel from '../panel/month-range';
5 |
6 | const getPanel = function(type) {
7 | if (type === 'daterange' || type === 'datetimerange') {
8 | return DateRangePanel;
9 | } else if (type === 'monthrange') {
10 | return MonthRangePanel;
11 | }
12 | return DatePanel;
13 | };
14 |
15 | export default {
16 | mixins: [Picker],
17 |
18 | name: 'ElDatePicker',
19 |
20 | props: {
21 | type: {
22 | type: String,
23 | default: 'date'
24 | },
25 | timeArrowControl: Boolean
26 | },
27 |
28 | watch: {
29 | type(type) {
30 | if (this.picker) {
31 | this.unmountPicker();
32 | this.panel = getPanel(type);
33 | this.mountPicker();
34 | } else {
35 | this.panel = getPanel(type);
36 | }
37 | }
38 | },
39 |
40 | created() {
41 | this.panel = getPanel(this.type);
42 | }
43 | };
44 |
--------------------------------------------------------------------------------
/packages/date-picker/src/picker/time-picker.js:
--------------------------------------------------------------------------------
1 | import Picker from '../picker';
2 | import TimePanel from '../panel/time';
3 | import TimeRangePanel from '../panel/time-range';
4 |
5 | export default {
6 | mixins: [Picker],
7 |
8 | name: 'ElTimePicker',
9 |
10 | props: {
11 | isRange: Boolean,
12 | arrowControl: Boolean
13 | },
14 |
15 | data() {
16 | return {
17 | type: ''
18 | };
19 | },
20 |
21 | watch: {
22 | isRange(isRange) {
23 | if (this.picker) {
24 | this.unmountPicker();
25 | this.type = isRange ? 'timerange' : 'time';
26 | this.panel = isRange ? TimeRangePanel : TimePanel;
27 | this.mountPicker();
28 | } else {
29 | this.type = isRange ? 'timerange' : 'time';
30 | this.panel = isRange ? TimeRangePanel : TimePanel;
31 | }
32 | }
33 | },
34 |
35 | created() {
36 | this.type = this.isRange ? 'timerange' : 'time';
37 | this.panel = this.isRange ? TimeRangePanel : TimePanel;
38 | }
39 | };
40 |
--------------------------------------------------------------------------------
/packages/date-picker/src/picker/time-select.js:
--------------------------------------------------------------------------------
1 | import Picker from '../picker';
2 | import Panel from '../panel/time-select';
3 |
4 | export default {
5 | mixins: [Picker],
6 |
7 | name: 'ElTimeSelect',
8 |
9 | componentName: 'ElTimeSelect',
10 |
11 | props: {
12 | type: {
13 | type: String,
14 | default: 'time-select'
15 | }
16 | },
17 |
18 | beforeCreate() {
19 | this.panel = Panel;
20 | }
21 | };
22 |
--------------------------------------------------------------------------------
/packages/descriptions-item/index.js:
--------------------------------------------------------------------------------
1 | import DescriptionsItem from '../descriptions/src/descriptions-item';
2 |
3 | /* istanbul ignore next */
4 | DescriptionsItem.install = function install(Vue) {
5 | Vue.component(DescriptionsItem.name, DescriptionsItem);
6 | };
7 |
8 | export default DescriptionsItem;
9 |
--------------------------------------------------------------------------------
/packages/descriptions/index.js:
--------------------------------------------------------------------------------
1 | import Descriptions from './src/index';
2 |
3 | /* istanbul ignore next */
4 | Descriptions.install = function install(Vue) {
5 | Vue.component(Descriptions.name, Descriptions);
6 | };
7 |
8 | export default Descriptions;
9 |
--------------------------------------------------------------------------------
/packages/descriptions/src/descriptions-item.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'ElDescriptionsItem',
3 | props: {
4 | label: {
5 | type: String,
6 | default: ''
7 | },
8 | span: {
9 | type: Number,
10 | default: 1
11 | },
12 | contentClassName: {
13 | type: String,
14 | default: ''
15 | },
16 | contentStyle: {
17 | type: Object
18 | },
19 | labelClassName: {
20 | type: String,
21 | default: ''
22 | },
23 | labelStyle: {
24 | type: Object
25 | }
26 | },
27 | render() {
28 | return null;
29 | }
30 | };
31 |
--------------------------------------------------------------------------------
/packages/dialog/index.js:
--------------------------------------------------------------------------------
1 | import ElDialog from './src/component';
2 |
3 | /* istanbul ignore next */
4 | ElDialog.install = function(Vue) {
5 | Vue.component(ElDialog.name, ElDialog);
6 | };
7 |
8 | export default ElDialog;
9 |
--------------------------------------------------------------------------------
/packages/divider/index.js:
--------------------------------------------------------------------------------
1 | import Divider from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Divider.install = function(Vue) {
5 | Vue.component(Divider.name, Divider);
6 | };
7 |
8 | export default Divider;
9 |
--------------------------------------------------------------------------------
/packages/divider/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
16 |
38 |
--------------------------------------------------------------------------------
/packages/drawer/index.js:
--------------------------------------------------------------------------------
1 | import Drawer from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Drawer.install = function(Vue) {
5 | Vue.component(Drawer.name, Drawer);
6 | };
7 |
8 | export default Drawer;
9 |
--------------------------------------------------------------------------------
/packages/dropdown-item/index.js:
--------------------------------------------------------------------------------
1 | import ElDropdownItem from '../dropdown/src/dropdown-item';
2 |
3 | /* istanbul ignore next */
4 | ElDropdownItem.install = function(Vue) {
5 | Vue.component(ElDropdownItem.name, ElDropdownItem);
6 | };
7 |
8 | export default ElDropdownItem;
9 |
--------------------------------------------------------------------------------
/packages/dropdown-menu/index.js:
--------------------------------------------------------------------------------
1 | import ElDropdownMenu from '../dropdown/src/dropdown-menu';
2 |
3 | /* istanbul ignore next */
4 | ElDropdownMenu.install = function(Vue) {
5 | Vue.component(ElDropdownMenu.name, ElDropdownMenu);
6 | };
7 |
8 | export default ElDropdownMenu;
9 |
--------------------------------------------------------------------------------
/packages/dropdown/index.js:
--------------------------------------------------------------------------------
1 | import ElDropdown from './src/dropdown';
2 |
3 | /* istanbul ignore next */
4 | ElDropdown.install = function(Vue) {
5 | Vue.component(ElDropdown.name, ElDropdown);
6 | };
7 |
8 | export default ElDropdown;
9 |
--------------------------------------------------------------------------------
/packages/dropdown/src/dropdown-item.vue:
--------------------------------------------------------------------------------
1 |
2 |
15 |
16 |
38 |
--------------------------------------------------------------------------------
/packages/empty/index.js:
--------------------------------------------------------------------------------
1 | import Empty from './src/index.vue';
2 |
3 | Empty.install = (Vue) => {
4 | Vue.component(Empty.name, Empty);
5 | };
6 |
7 | export default Empty;
8 |
--------------------------------------------------------------------------------
/packages/footer/index.js:
--------------------------------------------------------------------------------
1 | import Footer from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Footer.install = function(Vue) {
5 | Vue.component(Footer.name, Footer);
6 | };
7 |
8 | export default Footer;
9 |
--------------------------------------------------------------------------------
/packages/footer/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/packages/form-item/index.js:
--------------------------------------------------------------------------------
1 | import ElFormItem from '../form/src/form-item';
2 |
3 | /* istanbul ignore next */
4 | ElFormItem.install = function(Vue) {
5 | Vue.component(ElFormItem.name, ElFormItem);
6 | };
7 |
8 | export default ElFormItem;
9 |
--------------------------------------------------------------------------------
/packages/form/index.js:
--------------------------------------------------------------------------------
1 | import ElForm from './src/form';
2 |
3 | /* istanbul ignore next */
4 | ElForm.install = function(Vue) {
5 | Vue.component(ElForm.name, ElForm);
6 | };
7 |
8 | export default ElForm;
9 |
--------------------------------------------------------------------------------
/packages/header/index.js:
--------------------------------------------------------------------------------
1 | import Header from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Header.install = function(Vue) {
5 | Vue.component(Header.name, Header);
6 | };
7 |
8 | export default Header;
9 |
--------------------------------------------------------------------------------
/packages/header/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
21 |
--------------------------------------------------------------------------------
/packages/icon/index.js:
--------------------------------------------------------------------------------
1 | import ElIcon from './src/icon.vue';
2 |
3 | /* istanbul ignore next */
4 | ElIcon.install = function(Vue) {
5 | Vue.component(ElIcon.name, ElIcon);
6 | };
7 |
8 | export default ElIcon;
9 |
--------------------------------------------------------------------------------
/packages/icon/src/icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
14 |
--------------------------------------------------------------------------------
/packages/image/index.js:
--------------------------------------------------------------------------------
1 | import Image from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Image.install = function(Vue) {
5 | Vue.component(Image.name, Image);
6 | };
7 |
8 | export default Image;
9 |
--------------------------------------------------------------------------------
/packages/infinite-scroll/index.js:
--------------------------------------------------------------------------------
1 | import InfiniteScroll from './src/main.js';
2 |
3 | /* istanbul ignore next */
4 | InfiniteScroll.install = function(Vue) {
5 | Vue.directive(InfiniteScroll.name, InfiniteScroll);
6 | };
7 |
8 | export default InfiniteScroll;
9 |
--------------------------------------------------------------------------------
/packages/input-number/index.js:
--------------------------------------------------------------------------------
1 | import ElInputNumber from './src/input-number';
2 |
3 | /* istanbul ignore next */
4 | ElInputNumber.install = function(Vue) {
5 | Vue.component(ElInputNumber.name, ElInputNumber);
6 | };
7 |
8 | export default ElInputNumber;
9 |
--------------------------------------------------------------------------------
/packages/input/index.js:
--------------------------------------------------------------------------------
1 | import ElInput from './src/input';
2 |
3 | /* istanbul ignore next */
4 | ElInput.install = function(Vue) {
5 | Vue.component(ElInput.name, ElInput);
6 | };
7 |
8 | export default ElInput;
9 |
--------------------------------------------------------------------------------
/packages/link/index.js:
--------------------------------------------------------------------------------
1 | import Link from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Link.install = function(Vue) {
5 | Vue.component(Link.name, Link);
6 | };
7 |
8 | export default Link;
9 |
--------------------------------------------------------------------------------
/packages/loading/index.js:
--------------------------------------------------------------------------------
1 | import directive from './src/directive';
2 | import service from './src/index';
3 |
4 | export default {
5 | install(Vue) {
6 | Vue.use(directive);
7 | Vue.prototype.$loading = service;
8 | },
9 | directive,
10 | service
11 | };
12 |
--------------------------------------------------------------------------------
/packages/main/index.js:
--------------------------------------------------------------------------------
1 | import Main from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Main.install = function(Vue) {
5 | Vue.component(Main.name, Main);
6 | };
7 |
8 | export default Main;
9 |
--------------------------------------------------------------------------------
/packages/main/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
13 |
--------------------------------------------------------------------------------
/packages/menu-item-group/index.js:
--------------------------------------------------------------------------------
1 | import ElMenuItemGroup from '../menu/src/menu-item-group';
2 |
3 | /* istanbul ignore next */
4 | ElMenuItemGroup.install = function(Vue) {
5 | Vue.component(ElMenuItemGroup.name, ElMenuItemGroup);
6 | };
7 |
8 | export default ElMenuItemGroup;
9 |
--------------------------------------------------------------------------------
/packages/menu-item/index.js:
--------------------------------------------------------------------------------
1 | import ElMenuItem from '../menu/src/menu-item';
2 |
3 | /* istanbul ignore next */
4 | ElMenuItem.install = function(Vue) {
5 | Vue.component(ElMenuItem.name, ElMenuItem);
6 | };
7 |
8 | export default ElMenuItem;
9 |
--------------------------------------------------------------------------------
/packages/menu/index.js:
--------------------------------------------------------------------------------
1 | import ElMenu from './src/menu';
2 |
3 | /* istanbul ignore next */
4 | ElMenu.install = function(Vue) {
5 | Vue.component(ElMenu.name, ElMenu);
6 | };
7 |
8 | export default ElMenu;
9 |
--------------------------------------------------------------------------------
/packages/message-box/index.js:
--------------------------------------------------------------------------------
1 | import MessageBox from './src/main.js';
2 | export default MessageBox;
3 |
--------------------------------------------------------------------------------
/packages/message/index.js:
--------------------------------------------------------------------------------
1 | import Message from './src/main.js';
2 | export default Message;
3 |
--------------------------------------------------------------------------------
/packages/notification/index.js:
--------------------------------------------------------------------------------
1 | import Notification from './src/main.js';
2 | export default Notification;
3 |
--------------------------------------------------------------------------------
/packages/option-group/index.js:
--------------------------------------------------------------------------------
1 | import ElOptionGroup from '../select/src/option-group';
2 |
3 | /* istanbul ignore next */
4 | ElOptionGroup.install = function(Vue) {
5 | Vue.component(ElOptionGroup.name, ElOptionGroup);
6 | };
7 |
8 | export default ElOptionGroup;
9 |
--------------------------------------------------------------------------------
/packages/option/index.js:
--------------------------------------------------------------------------------
1 | import ElOption from '../select/src/option';
2 |
3 | /* istanbul ignore next */
4 | ElOption.install = function(Vue) {
5 | Vue.component(ElOption.name, ElOption);
6 | };
7 |
8 | export default ElOption;
9 |
--------------------------------------------------------------------------------
/packages/page-header/index.js:
--------------------------------------------------------------------------------
1 | import PageHeader from './src/main';
2 |
3 | /* istanbul ignore next */
4 | PageHeader.install = function(Vue) {
5 | Vue.component(PageHeader.name, PageHeader);
6 | };
7 |
8 | export default PageHeader;
9 |
--------------------------------------------------------------------------------
/packages/page-header/src/main.vue:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 |
31 |
--------------------------------------------------------------------------------
/packages/pagination/index.js:
--------------------------------------------------------------------------------
1 | import Pagination from './src/pagination';
2 |
3 | /* istanbul ignore next */
4 | Pagination.install = function(Vue) {
5 | Vue.component(Pagination.name, Pagination);
6 | };
7 |
8 | export default Pagination;
9 |
--------------------------------------------------------------------------------
/packages/popconfirm/index.js:
--------------------------------------------------------------------------------
1 | import Popconfirm from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Popconfirm.install = function(Vue) {
5 | Vue.component(Popconfirm.name, Popconfirm);
6 | };
7 |
8 | export default Popconfirm;
9 |
--------------------------------------------------------------------------------
/packages/popover/index.js:
--------------------------------------------------------------------------------
1 | import Popover from './src/main';
2 | import directive from './src/directive';
3 | import Vue from 'vue';
4 |
5 | Vue.directive('popover', directive);
6 |
7 | /* istanbul ignore next */
8 | Popover.install = function(Vue) {
9 | Vue.directive('popover', directive);
10 | Vue.component(Popover.name, Popover);
11 | };
12 | Popover.directive = directive;
13 |
14 | export default Popover;
15 |
--------------------------------------------------------------------------------
/packages/popover/src/directive.js:
--------------------------------------------------------------------------------
1 | const getReference = (el, binding, vnode) => {
2 | const _ref = binding.expression ? binding.value : binding.arg;
3 | const popper = vnode.context.$refs[_ref];
4 | if (popper) {
5 | if (Array.isArray(popper)) {
6 | popper[0].$refs.reference = el;
7 | } else {
8 | popper.$refs.reference = el;
9 | }
10 | }
11 | };
12 |
13 | export default {
14 | bind(el, binding, vnode) {
15 | getReference(el, binding, vnode);
16 | },
17 | inserted(el, binding, vnode) {
18 | getReference(el, binding, vnode);
19 | }
20 | };
21 |
--------------------------------------------------------------------------------
/packages/progress/index.js:
--------------------------------------------------------------------------------
1 | import ElProgress from './src/progress';
2 |
3 | /* istanbul ignore next */
4 | ElProgress.install = function(Vue) {
5 | Vue.component(ElProgress.name, ElProgress);
6 | };
7 |
8 | export default ElProgress;
9 |
--------------------------------------------------------------------------------
/packages/radio-button/index.js:
--------------------------------------------------------------------------------
1 | import RadioButton from '../radio/src/radio-button.vue';
2 |
3 | /* istanbul ignore next */
4 | RadioButton.install = function(Vue) {
5 | Vue.component(RadioButton.name, RadioButton);
6 | };
7 |
8 | export default RadioButton;
9 |
--------------------------------------------------------------------------------
/packages/radio-group/index.js:
--------------------------------------------------------------------------------
1 | import RadioGroup from '../radio/src/radio-group.vue';
2 |
3 | /* istanbul ignore next */
4 | RadioGroup.install = function(Vue) {
5 | Vue.component(RadioGroup.name, RadioGroup);
6 | };
7 |
8 | export default RadioGroup;
9 |
--------------------------------------------------------------------------------
/packages/radio/index.js:
--------------------------------------------------------------------------------
1 | import Radio from './src/radio';
2 |
3 | /* istanbul ignore next */
4 | Radio.install = function(Vue) {
5 | Vue.component(Radio.name, Radio);
6 | };
7 |
8 | export default Radio;
9 |
--------------------------------------------------------------------------------
/packages/rate/index.js:
--------------------------------------------------------------------------------
1 | import Rate from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Rate.install = function(Vue) {
5 | Vue.component(Rate.name, Rate);
6 | };
7 |
8 | export default Rate;
9 |
--------------------------------------------------------------------------------
/packages/result/index.js:
--------------------------------------------------------------------------------
1 | import Result from './src/index.vue';
2 |
3 | /* istanbul ignore next */
4 | Result.install = function(Vue) {
5 | Vue.component(Result.name, Result);
6 | };
7 |
8 | export default Result;
9 |
--------------------------------------------------------------------------------
/packages/result/src/icon-error.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/packages/result/src/icon-info.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/packages/result/src/icon-success.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/packages/result/src/icon-warning.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
9 |
14 |
--------------------------------------------------------------------------------
/packages/row/index.js:
--------------------------------------------------------------------------------
1 | import Row from './src/row';
2 |
3 | /* istanbul ignore next */
4 | Row.install = function(Vue) {
5 | Vue.component(Row.name, Row);
6 | };
7 |
8 | export default Row;
9 |
10 |
--------------------------------------------------------------------------------
/packages/row/src/row.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'ElRow',
3 |
4 | componentName: 'ElRow',
5 |
6 | props: {
7 | tag: {
8 | type: String,
9 | default: 'div'
10 | },
11 | gutter: Number,
12 | type: String,
13 | justify: {
14 | type: String,
15 | default: 'start'
16 | },
17 | align: String
18 | },
19 |
20 | computed: {
21 | style() {
22 | const ret = {};
23 |
24 | if (this.gutter) {
25 | ret.marginLeft = `-${this.gutter / 2}px`;
26 | ret.marginRight = ret.marginLeft;
27 | }
28 |
29 | return ret;
30 | }
31 | },
32 |
33 | render(h) {
34 | return h(this.tag, {
35 | class: [
36 | 'el-row',
37 | this.justify !== 'start' ? `is-justify-${this.justify}` : '',
38 | this.align ? `is-align-${this.align}` : '',
39 | { 'el-row--flex': this.type === 'flex' }
40 | ],
41 | style: this.style
42 | }, this.$slots.default);
43 | }
44 | };
45 |
--------------------------------------------------------------------------------
/packages/scrollbar/index.js:
--------------------------------------------------------------------------------
1 | import Scrollbar from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Scrollbar.install = function(Vue) {
5 | Vue.component(Scrollbar.name, Scrollbar);
6 | };
7 |
8 | export default Scrollbar;
9 |
--------------------------------------------------------------------------------
/packages/scrollbar/src/util.js:
--------------------------------------------------------------------------------
1 | export const BAR_MAP = {
2 | vertical: {
3 | offset: 'offsetHeight',
4 | scroll: 'scrollTop',
5 | scrollSize: 'scrollHeight',
6 | size: 'height',
7 | key: 'vertical',
8 | axis: 'Y',
9 | client: 'clientY',
10 | direction: 'top'
11 | },
12 | horizontal: {
13 | offset: 'offsetWidth',
14 | scroll: 'scrollLeft',
15 | scrollSize: 'scrollWidth',
16 | size: 'width',
17 | key: 'horizontal',
18 | axis: 'X',
19 | client: 'clientX',
20 | direction: 'left'
21 | }
22 | };
23 |
24 | export function renderThumbStyle({ move, size, bar }) {
25 | const style = {};
26 | const translate = `translate${bar.axis}(${ move }%)`;
27 |
28 | style[bar.size] = size;
29 | style.transform = translate;
30 | style.msTransform = translate;
31 | style.webkitTransform = translate;
32 |
33 | return style;
34 | };
35 |
--------------------------------------------------------------------------------
/packages/select/index.js:
--------------------------------------------------------------------------------
1 | import Select from './src/select';
2 |
3 | /* istanbul ignore next */
4 | Select.install = function(Vue) {
5 | Vue.component(Select.name, Select);
6 | };
7 |
8 | export default Select;
9 |
--------------------------------------------------------------------------------
/packages/skeleton-item/index.js:
--------------------------------------------------------------------------------
1 | import SkeletonItem from '../skeleton/src/item';
2 |
3 | /* istanbul ignore next */
4 | SkeletonItem.install = function(Vue) {
5 | Vue.component(SkeletonItem.name, SkeletonItem);
6 | };
7 |
8 | export default SkeletonItem;
9 |
--------------------------------------------------------------------------------
/packages/skeleton/index.js:
--------------------------------------------------------------------------------
1 | import Skeleton from './src/index.vue';
2 |
3 | /* istanbul ignore next */
4 | Skeleton.install = function(Vue) {
5 | Vue.component(Skeleton.name, Skeleton);
6 | };
7 |
8 | export default Skeleton;
9 |
--------------------------------------------------------------------------------
/packages/skeleton/src/img-placeholder.vue:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
17 |
--------------------------------------------------------------------------------
/packages/skeleton/src/item.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/slider/index.js:
--------------------------------------------------------------------------------
1 | import Slider from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Slider.install = function(Vue) {
5 | Vue.component(Slider.name, Slider);
6 | };
7 |
8 | export default Slider;
9 |
--------------------------------------------------------------------------------
/packages/slider/src/marker.js:
--------------------------------------------------------------------------------
1 | export default {
2 | name: 'ElMarker',
3 |
4 | props: {
5 | mark: {
6 | type: [String, Object]
7 | }
8 | },
9 | render() {
10 | let label = typeof this.mark === 'string' ? this.mark : this.mark.label;
11 |
12 | return (
13 |
14 | { label }
15 |
16 | );
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/packages/spinner/index.js:
--------------------------------------------------------------------------------
1 | import Spinner from './src/spinner';
2 |
3 | /* istanbul ignore next */
4 | Spinner.install = function(Vue) {
5 | Vue.component(Spinner.name, Spinner);
6 | };
7 |
8 | export default Spinner;
9 |
--------------------------------------------------------------------------------
/packages/spinner/src/spinner.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
28 |
--------------------------------------------------------------------------------
/packages/statistic/index.js:
--------------------------------------------------------------------------------
1 | import Statistic from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Statistic.install = function(Vue) {
5 | Vue.component(Statistic.name, Statistic);
6 | };
7 |
8 | export default Statistic;
9 |
--------------------------------------------------------------------------------
/packages/step/index.js:
--------------------------------------------------------------------------------
1 | import Step from '../steps/src/step';
2 |
3 | /* istanbul ignore next */
4 | Step.install = function(Vue) {
5 | Vue.component(Step.name, Step);
6 | };
7 |
8 | export default Step;
9 |
--------------------------------------------------------------------------------
/packages/steps/index.js:
--------------------------------------------------------------------------------
1 | import Steps from './src/steps';
2 |
3 | /* istanbul ignore next */
4 | Steps.install = function(Vue) {
5 | Vue.component(Steps.name, Steps);
6 | };
7 |
8 | export default Steps;
9 |
--------------------------------------------------------------------------------
/packages/submenu/index.js:
--------------------------------------------------------------------------------
1 | import ElSubmenu from '../menu/src/submenu';
2 |
3 | /* istanbul ignore next */
4 | ElSubmenu.install = function(Vue) {
5 | Vue.component(ElSubmenu.name, ElSubmenu);
6 | };
7 |
8 | export default ElSubmenu;
9 |
--------------------------------------------------------------------------------
/packages/switch/index.js:
--------------------------------------------------------------------------------
1 | import Switch from './src/component';
2 |
3 | /* istanbul ignore next */
4 | Switch.install = function(Vue) {
5 | Vue.component(Switch.name, Switch);
6 | };
7 |
8 | export default Switch;
9 |
10 |
--------------------------------------------------------------------------------
/packages/tab-pane/index.js:
--------------------------------------------------------------------------------
1 | import TabPane from '../tabs/src/tab-pane.vue';
2 |
3 | /* istanbul ignore next */
4 | TabPane.install = function(Vue) {
5 | Vue.component(TabPane.name, TabPane);
6 | };
7 |
8 | export default TabPane;
9 |
--------------------------------------------------------------------------------
/packages/table-column/index.js:
--------------------------------------------------------------------------------
1 | import ElTableColumn from '../table/src/table-column';
2 |
3 | /* istanbul ignore next */
4 | ElTableColumn.install = function(Vue) {
5 | Vue.component(ElTableColumn.name, ElTableColumn);
6 | };
7 |
8 | export default ElTableColumn;
9 |
--------------------------------------------------------------------------------
/packages/table/index.js:
--------------------------------------------------------------------------------
1 | import ElTable from './src/table';
2 |
3 | /* istanbul ignore next */
4 | ElTable.install = function(Vue) {
5 | Vue.component(ElTable.name, ElTable);
6 | };
7 |
8 | export default ElTable;
9 |
--------------------------------------------------------------------------------
/packages/table/src/dropdown.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | var dropdowns = [];
3 |
4 | !Vue.prototype.$isServer && document.addEventListener('click', function(event) {
5 | dropdowns.forEach(function(dropdown) {
6 | var target = event.target;
7 | if (!dropdown || !dropdown.$el) return;
8 | if (target === dropdown.$el || dropdown.$el.contains(target)) {
9 | return;
10 | }
11 | dropdown.handleOutsideClick && dropdown.handleOutsideClick(event);
12 | });
13 | });
14 |
15 | export default {
16 | open(instance) {
17 | if (instance) {
18 | dropdowns.push(instance);
19 | }
20 | },
21 |
22 | close(instance) {
23 | var index = dropdowns.indexOf(instance);
24 | if (index !== -1) {
25 | dropdowns.splice(instance, 1);
26 | }
27 | }
28 | };
29 |
--------------------------------------------------------------------------------
/packages/tabs/index.js:
--------------------------------------------------------------------------------
1 | import ElTabs from './src/tabs';
2 |
3 | /* istanbul ignore next */
4 | ElTabs.install = function(Vue) {
5 | Vue.component(ElTabs.name, ElTabs);
6 | };
7 |
8 | export default ElTabs;
9 |
--------------------------------------------------------------------------------
/packages/tag/index.js:
--------------------------------------------------------------------------------
1 | import ElTag from './src/tag';
2 |
3 | /* istanbul ignore next */
4 | ElTag.install = function(Vue) {
5 | Vue.component(ElTag.name, ElTag);
6 | };
7 |
8 | export default ElTag;
9 |
--------------------------------------------------------------------------------
/packages/theme-chalk/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | lib
3 | npm-debug*
4 |
--------------------------------------------------------------------------------
/packages/theme-chalk/README.md:
--------------------------------------------------------------------------------
1 | # element-theme-chalk
2 | > element component chalk theme.
3 |
4 |
5 | ## Installation
6 | ```shell
7 | npm i element-theme-chalk -S
8 | ```
9 |
10 | ## Usage
11 |
12 | Use Sass import
13 | ```css
14 | @import 'element-theme-chalk';
15 | ```
16 |
17 | Or Use webpack
18 | ```javascript
19 | import 'element-theme-chalk';
20 | ```
21 |
22 | Or
23 | ```html
24 |
25 | ```
26 |
27 | ## Import on demand
28 | ```javascript
29 | import 'element-theme-chalk/lib/input.css';
30 | import 'element-theme-chalk/lib/select.css';
31 |
32 | // ...
33 | ```
34 |
--------------------------------------------------------------------------------
/packages/theme-chalk/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const { series, src, dest } = require('gulp');
4 | const sass = require('gulp-sass');
5 | const autoprefixer = require('gulp-autoprefixer');
6 | const cssmin = require('gulp-cssmin');
7 |
8 | function compile() {
9 | return src('./src/*.scss')
10 | .pipe(sass.sync())
11 | .pipe(autoprefixer({
12 | browsers: ['ie > 9', 'last 2 versions'],
13 | cascade: false
14 | }))
15 | .pipe(cssmin())
16 | .pipe(dest('./lib'));
17 | }
18 |
19 | function copyfont() {
20 | return src('./src/fonts/**')
21 | .pipe(cssmin())
22 | .pipe(dest('./lib/fonts'));
23 | }
24 |
25 | exports.build = series(compile, copyfont);
26 |
--------------------------------------------------------------------------------
/packages/theme-chalk/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "element-theme-chalk",
3 | "version": "2.15.14",
4 | "description": "Element component chalk theme.",
5 | "main": "lib/index.css",
6 | "style": "lib/index.css",
7 | "files": [
8 | "lib",
9 | "src"
10 | ],
11 | "scripts": {
12 | "build": "gulp build"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "git+https://github.com/ElementUI/theme-chalk.git"
17 | },
18 | "keywords": [
19 | "element",
20 | "theme"
21 | ],
22 | "author": "yi.shyang@ele.me",
23 | "license": "MIT",
24 | "bugs": {
25 | "url": "https://github.com/ElementUI/theme-chalk/issues"
26 | },
27 | "homepage": "https://github.com/ElementUI/theme-chalk#readme",
28 | "devDependencies": {
29 | "gulp": "^3.9.1",
30 | "gulp-cssmin": "^0.1.7",
31 | "gulp-sass": "^3.1.0",
32 | "gulp-autoprefixer": "^4.0.0"
33 | },
34 | "dependencies": {}
35 | }
36 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/aside.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 |
3 | @include b(aside) {
4 | overflow: auto;
5 | box-sizing: border-box;
6 | flex-shrink: 0;
7 | }
8 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/backtop.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(backtop) {
5 | position: fixed;
6 | background-color: $--backtop-background-color;
7 | width: 40px;
8 | height: 40px;
9 | border-radius: 50%;
10 | color: $--backtop-font-color;
11 | display: flex;
12 | align-items: center;
13 | justify-content: center;
14 | font-size: 20px;
15 | box-shadow: 0 0 6px rgba(0,0,0, .12);
16 | cursor: pointer;
17 | z-index: 5;
18 |
19 | &:hover {
20 | background-color: $--backtop-hover-background-color
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/base.scss:
--------------------------------------------------------------------------------
1 | @import "common/transition.scss";
2 | @import "icon.scss";
3 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/breadcrumb-item.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/breadcrumb-item.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/button-group.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/button-group.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/card.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(card) {
5 | border-radius: $--card-border-radius;
6 | border: 1px solid $--card-border-color;
7 | background-color: $--color-white;
8 | overflow: hidden;
9 | color: $--color-text-primary;
10 | transition: 0.3s;
11 |
12 | @include when(always-shadow) {
13 | box-shadow: $--box-shadow-light;
14 | }
15 |
16 | @include when(hover-shadow) {
17 | &:hover,
18 | &:focus {
19 | box-shadow: $--box-shadow-light;
20 | }
21 | }
22 |
23 | @include e(header) {
24 | padding: #{$--card-padding - 2 $--card-padding};
25 | border-bottom: 1px solid $--card-border-color;
26 | box-sizing: border-box;
27 | }
28 |
29 | @include e(body) {
30 | padding: $--card-padding;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/checkbox-button.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/checkbox-button.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/checkbox-group.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/checkbox-group.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/collapse-item.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/collapse-item.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/common/popup.scss:
--------------------------------------------------------------------------------
1 | @import "./var.scss";
2 | @import "../mixins/mixins";
3 |
4 | .v-modal-enter {
5 | animation: v-modal-in .2s ease;
6 | }
7 |
8 | .v-modal-leave {
9 | animation: v-modal-out .2s ease forwards;
10 | }
11 |
12 | @keyframes v-modal-in {
13 | 0% {
14 | opacity: 0;
15 | }
16 | 100% {
17 | }
18 | }
19 |
20 | @keyframes v-modal-out {
21 | 0% {
22 | }
23 | 100% {
24 | opacity: 0;
25 | }
26 | }
27 |
28 | .v-modal {
29 | position: fixed;
30 | left: 0;
31 | top: 0;
32 | width: 100%;
33 | height: 100%;
34 | opacity: $--popup-modal-opacity;
35 | background: $--popup-modal-background-color;
36 | }
37 |
38 | @include b(popup-parent) {
39 | @include m(hidden) {
40 | overflow: hidden;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/container.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
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 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/date-picker.scss:
--------------------------------------------------------------------------------
1 | @import "./date-picker/date-table.scss";
2 | @import "./date-picker/month-table.scss";
3 | @import "./date-picker/year-table.scss";
4 | @import "./date-picker/time-spinner.scss";
5 | @import "./date-picker/picker.scss";
6 | @import "./date-picker/date-picker.scss";
7 | @import "./date-picker/date-range-picker.scss";
8 | @import "./date-picker/time-range-picker.scss";
9 | @import "./date-picker/time-picker.scss";
10 | @import "./input.scss";
11 | @import "./scrollbar.scss";
12 | @import "./popper";
--------------------------------------------------------------------------------
/packages/theme-chalk/src/date-picker/time-range-picker.scss:
--------------------------------------------------------------------------------
1 | @import "../common/var";
2 |
3 | @include b(time-range-picker) {
4 | width: 354px;
5 | overflow: visible;
6 |
7 | @include e(content) {
8 | position: relative;
9 | text-align: center;
10 | padding: 10px;
11 | }
12 |
13 | @include e(cell) {
14 | box-sizing: border-box;
15 | margin: 0;
16 | padding: 4px 7px 7px;
17 | width: 50%;
18 | display: inline-block;
19 | }
20 |
21 | @include e(header) {
22 | margin-bottom: 5px;
23 | text-align: center;
24 | font-size: 14px;
25 | }
26 |
27 | @include e(body) {
28 | border-radius:2px;
29 | border: 1px solid $--datepicker-border-color;
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/date-picker/year-table.scss:
--------------------------------------------------------------------------------
1 | @import "../common/var";
2 |
3 | @include b(year-table) {
4 | font-size: 12px;
5 | margin: -1px;
6 | border-collapse: collapse;
7 |
8 | .el-icon {
9 | color: $--datepicker-icon-color;
10 | }
11 |
12 | td {
13 | text-align: center;
14 | padding: 20px 3px;
15 | cursor: pointer;
16 |
17 | &.today {
18 | .cell {
19 | color: $--color-primary;
20 | font-weight: bold;
21 | }
22 | }
23 |
24 | &.disabled .cell {
25 | background-color: $--background-color-base;
26 | cursor: not-allowed;
27 | color: $--color-text-placeholder;
28 |
29 | &:hover {
30 | color: $--color-text-placeholder;
31 | }
32 | }
33 |
34 | .cell {
35 | width: 48px;
36 | height: 32px;
37 | display: block;
38 | line-height: 32px;
39 | color: $--datepicker-font-color;
40 | margin: 0 auto;
41 |
42 | &:hover {
43 | color: $--datepicker-hover-font-color;
44 | }
45 | }
46 |
47 | &.current:not(.disabled) .cell {
48 | color: $--datepicker-active-color;
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/descriptions-item.scss:
--------------------------------------------------------------------------------
1 | @import 'mixins/mixins';
2 | @import 'common/var';
3 |
4 | @include b(descriptions-item) {
5 | vertical-align: top;
6 |
7 | @include e(container) {
8 | display: flex;
9 |
10 | .el-descriptions-item__label,
11 | .el-descriptions-item__content {
12 | display: inline-flex;
13 | align-items: baseline;
14 | }
15 | .el-descriptions-item__content {
16 | flex: 1;
17 | }
18 | }
19 |
20 | @include e(label) {
21 | &.has-colon {
22 | &::after {
23 | content: ':';
24 | position: relative;
25 | top: -0.5px;
26 | }
27 | }
28 | &.is-bordered-label {
29 | font-weight: bold;
30 | color: $--color-text-secondary;
31 | background: $--descriptions-item-bordered-label-background;
32 | }
33 | &:not(.is-bordered-label) {
34 | margin-right: 10px;
35 | }
36 | }
37 |
38 | @include e(content) {
39 | word-break: break-word;
40 | overflow-wrap: break-word;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/display.scss:
--------------------------------------------------------------------------------
1 | @import "common/var";
2 | @import "mixins/mixins";
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 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/divider.scss:
--------------------------------------------------------------------------------
1 | @import "common/var";
2 | @import "mixins/mixins";
3 |
4 | @include b(divider) {
5 | background-color: $--border-color-base;
6 | position: relative;
7 |
8 | @include m(horizontal) {
9 | display: block;
10 | height: 1px;
11 | width: 100%;
12 | margin: 24px 0;
13 | }
14 |
15 | @include m(vertical) {
16 | display: inline-block;
17 | width: 1px;
18 | height: 1em;
19 | margin: 0 8px;
20 | vertical-align: middle;
21 | position: relative;
22 | }
23 |
24 | @include e(text) {
25 | position: absolute;
26 | background-color: $--color-white;
27 | padding: 0 20px;
28 | font-weight: 500;
29 | color: $--color-text-primary;
30 | font-size: 14px;
31 |
32 | @include when(left) {
33 | left: 20px;
34 | transform: translateY(-50%);
35 | }
36 |
37 | @include when(center) {
38 | left: 50%;
39 | transform: translateX(-50%) translateY(-50%);
40 | }
41 |
42 | @include when(right) {
43 | right: 20px;
44 | transform: translateY(-50%);
45 | }
46 | }
47 | }
--------------------------------------------------------------------------------
/packages/theme-chalk/src/dropdown-item.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/dropdown-item.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/dropdown-menu.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/dropdown-menu.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/empty.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(empty) {
5 | display: flex;
6 | justify-content: center;
7 | align-items: center;
8 | flex-direction: column;
9 | text-align: center;
10 | box-sizing: border-box;
11 | padding: $--empty-padding;
12 |
13 | @include e(image) {
14 | width: $--empty-image-width;
15 |
16 | img {
17 | user-select: none;
18 | width: 100%;
19 | height: 100%;
20 | vertical-align: top;
21 | object-fit: contain;
22 | }
23 |
24 | svg {
25 | fill: $--svg-monochrome-grey;
26 | width: 100%;
27 | height: 100%;
28 | vertical-align: top;
29 | }
30 | }
31 |
32 | @include e(description) {
33 | margin-top: $--empty-description-margin-top;
34 |
35 | p {
36 | margin: 0;
37 | font-size: $--font-size-base;
38 | color: $--color-text-secondary;
39 | }
40 | }
41 |
42 | @include e(bottom) {
43 | margin-top: $--empty-bottom-margin-top;
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/fonts/element-icons.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/fonts/element-icons.ttf
--------------------------------------------------------------------------------
/packages/theme-chalk/src/fonts/element-icons.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/fonts/element-icons.woff
--------------------------------------------------------------------------------
/packages/theme-chalk/src/footer.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(footer) {
5 | padding: $--footer-padding;
6 | box-sizing: border-box;
7 | flex-shrink: 0;
8 | }
9 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/form-item.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/form-item.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/header.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(header) {
5 | padding: $--header-padding;
6 | box-sizing: border-box;
7 | flex-shrink: 0;
8 | }
9 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/infinite-scroll.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/infinite-scroll.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/infiniteScroll.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/infiniteScroll.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/main.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(main) {
5 | // IE11 supports the element partially https://caniuse.com/#search=main
6 | display: block;
7 | flex: 1;
8 | flex-basis: auto;
9 | overflow: auto;
10 | box-sizing: border-box;
11 | padding: $--main-padding;
12 | }
13 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/menu-item-group.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/menu-item-group.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/menu-item.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/menu-item.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/mixins/config.scss:
--------------------------------------------------------------------------------
1 | $namespace: 'el';
2 | $element-separator: '__';
3 | $modifier-separator: '--';
4 | $state-prefix: 'is-';
5 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/mixins/function.scss:
--------------------------------------------------------------------------------
1 | @import "config";
2 |
3 | /* BEM support Func
4 | -------------------------- */
5 | @function selectorToString($selector) {
6 | $selector: inspect($selector);
7 | $selector: str-slice($selector, 2, -2);
8 | @return $selector;
9 | }
10 |
11 | @function containsModifier($selector) {
12 | $selector: selectorToString($selector);
13 |
14 | @if str-index($selector, $modifier-separator) {
15 | @return true;
16 | } @else {
17 | @return false;
18 | }
19 | }
20 |
21 | @function containWhenFlag($selector) {
22 | $selector: selectorToString($selector);
23 |
24 | @if str-index($selector, '.' + $state-prefix) {
25 | @return true
26 | } @else {
27 | @return false
28 | }
29 | }
30 |
31 | @function containPseudoClass($selector) {
32 | $selector: selectorToString($selector);
33 |
34 | @if str-index($selector, ':') {
35 | @return true
36 | } @else {
37 | @return false
38 | }
39 | }
40 |
41 | @function hitAllSpecialNestRule($selector) {
42 |
43 | @return containsModifier($selector) or containWhenFlag($selector) or containPseudoClass($selector);
44 | }
45 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/mixins/utils.scss:
--------------------------------------------------------------------------------
1 | @mixin utils-user-select($value) {
2 | -moz-user-select: $value;
3 | -webkit-user-select: $value;
4 | -ms-user-select: $value;
5 | }
6 |
7 | @mixin utils-clearfix {
8 | $selector: &;
9 |
10 | @at-root {
11 | #{$selector}::before,
12 | #{$selector}::after {
13 | display: table;
14 | content: "";
15 | }
16 | #{$selector}::after {
17 | clear: both
18 | }
19 | }
20 | }
21 |
22 | @mixin utils-vertical-center {
23 | $selector: &;
24 |
25 | @at-root {
26 | #{$selector}::after {
27 | display: inline-block;
28 | content: "";
29 | height: 100%;
30 | vertical-align: middle
31 | }
32 | }
33 | }
34 |
35 | @mixin utils-ellipsis {
36 | overflow: hidden;
37 | text-overflow: ellipsis;
38 | white-space: nowrap;
39 | }
--------------------------------------------------------------------------------
/packages/theme-chalk/src/option-group.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(select-group) {
5 | $gap: 20px;
6 |
7 | margin: 0;
8 | padding: 0;
9 |
10 | @include e(wrap) {
11 | position: relative;
12 | list-style: none;
13 | margin: 0;
14 | padding: 0;
15 |
16 | &:not(:last-of-type) {
17 | padding-bottom: 24px;
18 |
19 | &::after {
20 | content: '';
21 | position: absolute;
22 | display: block;
23 | left: $gap;
24 | right: $gap;
25 | bottom: 12px;
26 | height: 1px;
27 | background: $--border-color-light;
28 | }
29 | }
30 | }
31 |
32 | @include e(title) {
33 | padding-left: $gap;
34 | font-size: $--select-group-font-size;
35 | color: $--select-group-color;
36 | line-height: $--select-group-height;
37 | }
38 |
39 | & .el-select-dropdown__item {
40 | padding-left: $gap;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/option.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(select-dropdown) {
5 | @include e(item) {
6 | font-size: $--select-font-size;
7 | padding: 0 20px;
8 | position: relative;
9 | white-space: nowrap;
10 | overflow: hidden;
11 | text-overflow: ellipsis;
12 | color: $--select-option-color;
13 | height: $--select-option-height;
14 | line-height: $--select-option-height;
15 | box-sizing: border-box;
16 | cursor: pointer;
17 |
18 | @include when(disabled) {
19 | color: $--select-option-disabled-color;
20 | cursor: not-allowed;
21 |
22 | &:hover {
23 | background-color: $--color-white;
24 | }
25 | }
26 |
27 | &.hover, &:hover {
28 | background-color: $--select-option-hover-background;
29 | }
30 |
31 | &.selected {
32 | color: $--select-option-selected-font-color;
33 | font-weight: bold;
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/page-header.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(page-header) {
5 | display: flex;
6 | line-height: 24px;
7 |
8 | @include e(left) {
9 | display: flex;
10 | cursor: pointer;
11 | margin-right: 40px;
12 | position: relative;
13 |
14 | &::after {
15 | content: "";
16 | position: absolute;
17 | width: 1px;
18 | height: 16px;
19 | right: -20px;
20 | top: 50%;
21 | transform: translateY(-50%);
22 | background-color: $--border-color-base;
23 | }
24 |
25 | .el-icon-back {
26 | font-size: 18px;
27 | margin-right: 6px;
28 | align-self: center;
29 | }
30 |
31 | @include e(title) {
32 | font-size: 14px;
33 | font-weight: 500;
34 | }
35 | }
36 |
37 | @include e(content) {
38 | font-size: 18px;
39 | color: $--color-text-primary;
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/popconfirm.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
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: 0
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/popover.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 | @import "./popper";
4 |
5 | @include b(popover) {
6 | position: absolute;
7 | background: $--popover-background-color;
8 | min-width: 150px;
9 | border-radius: 4px;
10 | border: 1px solid $--popover-border-color;
11 | padding: $--popover-padding;
12 | z-index: $--index-popper;
13 | color: $--color-text-regular;
14 | line-height: 1.4;
15 | text-align: justify;
16 | font-size: $--popover-font-size;
17 | box-shadow: $--box-shadow-light;
18 | word-break: break-all;
19 |
20 | @include m(plain) {
21 | padding: $--popover-padding-large;
22 | }
23 |
24 | @include e(title) {
25 | color: $--popover-title-font-color;
26 | font-size: $--popover-title-font-size;
27 | line-height: 1;
28 | margin-bottom: 12px;
29 | }
30 |
31 | @include e(reference) {
32 | &:focus:not(.focusing), &:focus:hover {
33 | outline-width: 0;
34 | }
35 | }
36 |
37 | &:focus:active, &:focus {
38 | outline-width: 0;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/radio-group.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(radio-group) {
5 | display: inline-block;
6 | line-height: 1;
7 | vertical-align: middle;
8 | font-size: 0;
9 | }
10 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/rate.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(rate) {
5 | height: $--rate-height;
6 | line-height: 1;
7 |
8 | &:focus, &:active {
9 | outline-width: 0;
10 | }
11 |
12 | @include e(item) {
13 | display: inline-block;
14 | position: relative;
15 | font-size: 0;
16 | vertical-align: middle;
17 | }
18 |
19 | @include e(icon) {
20 | position: relative;
21 | display: inline-block;
22 | font-size: $--rate-icon-size;
23 | margin-right: $--rate-icon-margin;
24 | color: $--rate-icon-color;
25 | transition: .3s;
26 | &.hover {
27 | transform: scale(1.15);
28 | }
29 |
30 | .path2 {
31 | position: absolute;
32 | left: 0;
33 | top: 0;
34 | }
35 | }
36 |
37 | @include e(decimal) {
38 | position: absolute;
39 | top: 0;
40 | left: 0;
41 | display: inline-block;
42 | overflow: hidden;
43 | }
44 |
45 | @include e(text) {
46 | font-size: $--rate-font-size;
47 | vertical-align: middle;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/row.scss:
--------------------------------------------------------------------------------
1 | @import "common/var";
2 | @import "mixins/mixins";
3 | @import "mixins/utils";
4 |
5 | @include b(row) {
6 | position: relative;
7 | box-sizing: border-box;
8 | @include utils-clearfix;
9 |
10 | @include m(flex) {
11 | display: flex;
12 | &:before,
13 | &:after {
14 | display: none;
15 | }
16 |
17 | @include when(justify-center) {
18 | justify-content: center;
19 | }
20 | @include when(justify-end) {
21 | justify-content: flex-end;
22 | }
23 | @include when(justify-space-between) {
24 | justify-content: space-between;
25 | }
26 | @include when(justify-space-around) {
27 | justify-content: space-around;
28 | }
29 |
30 | @include when(align-top) {
31 | align-items: flex-start;
32 | }
33 |
34 | @include when(align-middle) {
35 | align-items: center;
36 | }
37 | @include when(align-bottom) {
38 | align-items: flex-end;
39 | }
40 | }
41 |
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/skeleton.scss:
--------------------------------------------------------------------------------
1 | @import 'mixins/mixins';
2 | @import 'common/var';
3 | @import "./skeleton-item.scss";
4 |
5 | @mixin skeleton-color() {
6 | background: linear-gradient(
7 | 90deg,
8 | $--skeleton-color 25%,
9 | $--skeleton-to-color 37%,
10 | $--skeleton-color 63%
11 | );
12 | background-size: 400% 100%;
13 | animation: #{$namespace}-skeleton-loading 1.4s ease infinite;
14 | }
15 |
16 | @keyframes #{$namespace}-skeleton-loading {
17 | 0% {
18 | background-position: 100% 50%;
19 | }
20 | 100% {
21 | background-position: 0 50%;
22 | }
23 | }
24 |
25 | @include b(skeleton) {
26 | width: 100%;
27 | @each $unit in (first-line, paragraph) {
28 | @include e($unit) {
29 | height: 16px;
30 | margin-top: 16px;
31 | background: $--skeleton-color;
32 | }
33 | }
34 |
35 | @include when(animated) {
36 | .#{$namespace}-skeleton__item {
37 | @include skeleton-color();
38 | }
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/spinner.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 |
3 | @include b(time-spinner) {
4 | width: 100%;
5 | white-space: nowrap;
6 | }
7 |
8 | @include b(spinner) {
9 | display: inline-block;
10 | vertical-align: middle;
11 | }
12 | @include b(spinner-inner) {
13 | animation: rotate 2s linear infinite;
14 | width: 50px;
15 | height: 50px;
16 |
17 | & .path {
18 | stroke: #ececec;
19 | stroke-linecap: round;
20 | animation: dash 1.5s ease-in-out infinite;
21 | }
22 |
23 | }
24 |
25 | @keyframes rotate {
26 | 100% {
27 | transform: rotate(360deg);
28 | }
29 | }
30 |
31 | @keyframes dash {
32 | 0% {
33 | stroke-dasharray: 1, 150;
34 | stroke-dashoffset: 0;
35 | }
36 | 50% {
37 | stroke-dasharray: 90, 150;
38 | stroke-dashoffset: -35;
39 | }
40 | 100% {
41 | stroke-dasharray: 90, 150;
42 | stroke-dashoffset: -124;
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/statistic.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(statistic) {
5 | $statistic-justify: center;
6 | $statistic-align: center;
7 | width: 100%;
8 | box-sizing: border-box;
9 | margin: 0;
10 | padding: 0;
11 | color: $--color-black;
12 | font-variant: tabular-nums;
13 | list-style: none;
14 | font-feature-settings: "tnum";
15 | text-align: center;
16 | .head {
17 | margin-bottom: 4px;
18 | color: $--color-text-regular;
19 | font-size: $--font-size-small;
20 | }
21 |
22 | .con {
23 | font-family: Sans-serif;
24 | display: flex;
25 | justify-content: $statistic-justify;
26 | align-items: $statistic-align;
27 | color: $--color-text-primary;
28 | .number {
29 | font-size: $--font-size-extra-large;
30 | padding: 0 4px;
31 | }
32 | span {
33 | display: inline-block;
34 | margin: 0;
35 | line-height: 100%;
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/steps.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 |
3 | @include b(steps) {
4 | display: flex;
5 |
6 | @include m(simple) {
7 | padding: 13px 8%;
8 | border-radius: 4px;
9 | background: $--background-color-base;
10 | }
11 |
12 | @include m(horizontal) {
13 | white-space: nowrap;
14 | }
15 |
16 | @include m(vertical) {
17 | height: 100%;
18 | flex-flow: column;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/submenu.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/submenu.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/tab-pane.scss:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ElemeFE/element/c345bb453bf11badb4831a6a3f600c9372b3a336/packages/theme-chalk/src/tab-pane.scss
--------------------------------------------------------------------------------
/packages/theme-chalk/src/time-picker.scss:
--------------------------------------------------------------------------------
1 | @import "./date-picker/picker.scss";
2 | @import "./date-picker/picker-panel.scss";
3 | @import "./date-picker/time-spinner.scss";
4 | @import "./date-picker/time-picker.scss";
5 | @import "./date-picker/time-range-picker.scss";
6 | @import "./input.scss";
7 | @import "./scrollbar.scss";
8 | @import "./popper";
9 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/time-select.scss:
--------------------------------------------------------------------------------
1 | @import "common/var";
2 | @import "./date-picker/picker.scss";
3 | @import "./date-picker/date-picker.scss";
4 | @import "./scrollbar.scss";
5 | @import "./popper";
6 |
7 | .time-select {
8 | margin: 5px 0;
9 | min-width: 0;
10 | }
11 |
12 | .time-select .el-picker-panel__content {
13 | max-height: 200px;
14 | margin: 0;
15 | }
16 |
17 | .time-select-item {
18 | padding: 8px 10px;
19 | font-size: 14px;
20 | line-height: 20px;
21 | }
22 |
23 | .time-select-item.selected:not(.disabled) {
24 | color: $--color-primary;
25 | font-weight: bold;
26 | }
27 |
28 | .time-select-item.disabled {
29 | color: $--datepicker-border-color;
30 | cursor: not-allowed;
31 | }
32 |
33 | .time-select-item:hover {
34 | background-color: $--background-color-base;
35 | font-weight: bold;
36 | cursor: pointer;
37 | }
38 |
--------------------------------------------------------------------------------
/packages/theme-chalk/src/timeline.scss:
--------------------------------------------------------------------------------
1 | @import "mixins/mixins";
2 | @import "common/var";
3 |
4 | @include b(timeline) {
5 | margin: 0;
6 | font-size: $--font-size-base;
7 | list-style: none;
8 |
9 | & .el-timeline-item:last-child {
10 | & .el-timeline-item__tail {
11 | display: none;
12 | }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/packages/time-picker/index.js:
--------------------------------------------------------------------------------
1 | import TimePicker from '../date-picker/src/picker/time-picker';
2 |
3 | /* istanbul ignore next */
4 | TimePicker.install = function(Vue) {
5 | Vue.component(TimePicker.name, TimePicker);
6 | };
7 |
8 | export default TimePicker;
9 |
--------------------------------------------------------------------------------
/packages/time-select/index.js:
--------------------------------------------------------------------------------
1 | import TimeSelect from '../date-picker/src/picker/time-select';
2 |
3 | /* istanbul ignore next */
4 | TimeSelect.install = function(Vue) {
5 | Vue.component(TimeSelect.name, TimeSelect);
6 | };
7 |
8 | export default TimeSelect;
9 |
--------------------------------------------------------------------------------
/packages/timeline-item/index.js:
--------------------------------------------------------------------------------
1 | import ElTimelineItem from '../timeline/src/item';
2 |
3 | /* istanbul ignore next */
4 | ElTimelineItem.install = function(Vue) {
5 | Vue.component(ElTimelineItem.name, ElTimelineItem);
6 | };
7 |
8 | export default ElTimelineItem;
9 |
--------------------------------------------------------------------------------
/packages/timeline/index.js:
--------------------------------------------------------------------------------
1 | import Timeline from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Timeline.install = function(Vue) {
5 | Vue.component(Timeline.name, Timeline);
6 | };
7 |
8 | export default Timeline;
9 |
--------------------------------------------------------------------------------
/packages/timeline/src/main.vue:
--------------------------------------------------------------------------------
1 |
34 |
--------------------------------------------------------------------------------
/packages/tooltip/index.js:
--------------------------------------------------------------------------------
1 | import Tooltip from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Tooltip.install = function(Vue) {
5 | Vue.component(Tooltip.name, Tooltip);
6 | };
7 |
8 | export default Tooltip;
9 |
--------------------------------------------------------------------------------
/packages/transfer/index.js:
--------------------------------------------------------------------------------
1 | import Transfer from './src/main';
2 |
3 | /* istanbul ignore next */
4 | Transfer.install = function(Vue) {
5 | Vue.component(Transfer.name, Transfer);
6 | };
7 |
8 | export default Transfer;
9 |
--------------------------------------------------------------------------------
/packages/tree/index.js:
--------------------------------------------------------------------------------
1 | import Tree from './src/tree.vue';
2 |
3 | /* istanbul ignore next */
4 | Tree.install = function(Vue) {
5 | Vue.component(Tree.name, Tree);
6 | };
7 |
8 | export default Tree;
9 |
--------------------------------------------------------------------------------
/packages/tree/src/model/util.js:
--------------------------------------------------------------------------------
1 | export const NODE_KEY = '$treeNodeId';
2 |
3 | export const markNodeData = function(node, data) {
4 | if (!data || data[NODE_KEY]) return;
5 | Object.defineProperty(data, NODE_KEY, {
6 | value: node.id,
7 | enumerable: false,
8 | configurable: false,
9 | writable: false
10 | });
11 | };
12 |
13 | export const getNodeKey = function(key, data) {
14 | if (!key) return data[NODE_KEY];
15 | return data[key];
16 | };
17 |
18 | export const findNearestComponent = (element, componentName) => {
19 | let target = element;
20 | while (target && target.tagName !== 'BODY') {
21 | if (target.__vue__ && target.__vue__.$options.name === componentName) {
22 | return target.__vue__;
23 | }
24 | target = target.parentNode;
25 | }
26 | return null;
27 | };
28 |
--------------------------------------------------------------------------------
/packages/upload/index.js:
--------------------------------------------------------------------------------
1 | import Upload from './src';
2 |
3 | /* istanbul ignore next */
4 | Upload.install = function(Vue) {
5 | Vue.component(Upload.name, Upload);
6 | };
7 |
8 | export default Upload;
9 |
--------------------------------------------------------------------------------
/src/directives/mousewheel.js:
--------------------------------------------------------------------------------
1 | import normalizeWheel from 'normalize-wheel';
2 |
3 | const isFirefox = typeof navigator !== 'undefined' && navigator.userAgent.toLowerCase().indexOf('firefox') > -1;
4 |
5 | const mousewheel = function(element, callback) {
6 | if (element && element.addEventListener) {
7 | element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', function(event) {
8 | const normalized = normalizeWheel(event);
9 | callback && callback.apply(this, [event, normalized]);
10 | });
11 | }
12 | };
13 |
14 | export default {
15 | bind(el, binding) {
16 | mousewheel(el, binding.value);
17 | }
18 | };
19 |
--------------------------------------------------------------------------------
/src/directives/repeat-click.js:
--------------------------------------------------------------------------------
1 | import { once, on } from 'element-ui/src/utils/dom';
2 | import { isMac } from 'element-ui/src/utils/util';
3 |
4 | export default {
5 | bind(el, binding, vnode) {
6 | let interval = null;
7 | let startTime;
8 | const maxIntervals = isMac() ? 100 : 200;
9 | const handler = () => vnode.context[binding.expression].apply();
10 | const clear = () => {
11 | if (Date.now() - startTime < maxIntervals) {
12 | handler();
13 | }
14 | clearInterval(interval);
15 | interval = null;
16 | };
17 |
18 | on(el, 'mousedown', (e) => {
19 | if (e.button !== 0) return;
20 | startTime = Date.now();
21 | once(document, 'mouseup', clear);
22 | clearInterval(interval);
23 | interval = setInterval(handler, maxIntervals);
24 | });
25 | }
26 | };
27 |
--------------------------------------------------------------------------------
/src/mixins/emitter.js:
--------------------------------------------------------------------------------
1 | function broadcast(componentName, eventName, params) {
2 | this.$children.forEach(child => {
3 | var name = child.$options.componentName;
4 |
5 | if (name === componentName) {
6 | child.$emit.apply(child, [eventName].concat(params));
7 | } else {
8 | broadcast.apply(child, [componentName, eventName].concat([params]));
9 | }
10 | });
11 | }
12 | export default {
13 | methods: {
14 | dispatch(componentName, eventName, params) {
15 | var parent = this.$parent || this.$root;
16 | var name = parent.$options.componentName;
17 |
18 | while (parent && (!name || name !== componentName)) {
19 | parent = parent.$parent;
20 |
21 | if (parent) {
22 | name = parent.$options.componentName;
23 | }
24 | }
25 | if (parent) {
26 | parent.$emit.apply(parent, [eventName].concat(params));
27 | }
28 | },
29 | broadcast(componentName, eventName, params) {
30 | broadcast.call(this, componentName, eventName, params);
31 | }
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/src/mixins/focus.js:
--------------------------------------------------------------------------------
1 | export default function(ref) {
2 | return {
3 | methods: {
4 | focus() {
5 | this.$refs[ref].focus();
6 | }
7 | }
8 | };
9 | };
10 |
--------------------------------------------------------------------------------
/src/mixins/locale.js:
--------------------------------------------------------------------------------
1 | import { t } from 'element-ui/src/locale';
2 |
3 | export default {
4 | methods: {
5 | t(...args) {
6 | return t.apply(this, args);
7 | }
8 | }
9 | };
10 |
--------------------------------------------------------------------------------
/src/utils/after-leave.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Bind after-leave event for vue instance. Make sure after-leave is called in any browsers.
3 | *
4 | * @param {Vue} instance Vue instance.
5 | * @param {Function} callback callback of after-leave event
6 | * @param {Number} speed the speed of transition, default value is 300ms
7 | * @param {Boolean} once weather bind after-leave once. default value is false.
8 | */
9 | export default function(instance, callback, speed = 300, once = false) {
10 | if (!instance || !callback) throw new Error('instance & callback is required');
11 | let called = false;
12 | const afterLeaveCallback = function() {
13 | if (called) return;
14 | called = true;
15 | if (callback) {
16 | callback.apply(null, arguments);
17 | }
18 | };
19 | if (once) {
20 | instance.$once('after-leave', afterLeaveCallback);
21 | } else {
22 | instance.$on('after-leave', afterLeaveCallback);
23 | }
24 | setTimeout(() => {
25 | afterLeaveCallback();
26 | }, speed + 100);
27 | };
28 |
--------------------------------------------------------------------------------
/src/utils/menu/aria-menubar.js:
--------------------------------------------------------------------------------
1 | import MenuItem from './aria-menuitem';
2 |
3 | const Menu = function(domNode) {
4 | this.domNode = domNode;
5 | this.init();
6 | };
7 |
8 | Menu.prototype.init = function() {
9 | let menuChildren = this.domNode.childNodes;
10 | [].filter.call(menuChildren, child => child.nodeType === 1).forEach(child => {
11 | new MenuItem(child); // eslint-disable-line
12 | });
13 | };
14 | export default Menu;
15 |
--------------------------------------------------------------------------------
/src/utils/merge.js:
--------------------------------------------------------------------------------
1 | export default function(target) {
2 | for (let i = 1, j = arguments.length; i < j; i++) {
3 | let source = arguments[i] || {};
4 | for (let prop in source) {
5 | if (source.hasOwnProperty(prop)) {
6 | let value = source[prop];
7 | if (value !== undefined) {
8 | target[prop] = value;
9 | }
10 | }
11 | }
12 | }
13 |
14 | return target;
15 | };
16 |
--------------------------------------------------------------------------------
/src/utils/scroll-into-view.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | export default function scrollIntoView(container, selected) {
4 | if (Vue.prototype.$isServer) return;
5 |
6 | if (!selected) {
7 | container.scrollTop = 0;
8 | return;
9 | }
10 |
11 | const offsetParents = [];
12 | let pointer = selected.offsetParent;
13 | while (pointer && container !== pointer && container.contains(pointer)) {
14 | offsetParents.push(pointer);
15 | pointer = pointer.offsetParent;
16 | }
17 | const top = selected.offsetTop + offsetParents.reduce((prev, curr) => (prev + curr.offsetTop), 0);
18 | const bottom = top + selected.offsetHeight;
19 | const viewRectTop = container.scrollTop;
20 | const viewRectBottom = viewRectTop + container.clientHeight;
21 |
22 | if (top < viewRectTop) {
23 | container.scrollTop = top;
24 | } else if (bottom > viewRectBottom) {
25 | container.scrollTop = bottom - container.clientHeight;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/utils/scrollbar-width.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 |
3 | let scrollBarWidth;
4 |
5 | export default function() {
6 | if (Vue.prototype.$isServer) return 0;
7 | if (scrollBarWidth !== undefined) return scrollBarWidth;
8 |
9 | const outer = document.createElement('div');
10 | outer.className = 'el-scrollbar__wrap';
11 | outer.style.visibility = 'hidden';
12 | outer.style.width = '100px';
13 | outer.style.position = 'absolute';
14 | outer.style.top = '-9999px';
15 | document.body.appendChild(outer);
16 |
17 | const widthNoScroll = outer.offsetWidth;
18 | outer.style.overflow = 'scroll';
19 |
20 | const inner = document.createElement('div');
21 | inner.style.width = '100%';
22 | outer.appendChild(inner);
23 |
24 | const widthWithScroll = inner.offsetWidth;
25 | outer.parentNode.removeChild(outer);
26 | scrollBarWidth = widthNoScroll - widthWithScroll;
27 |
28 | return scrollBarWidth;
29 | };
30 |
--------------------------------------------------------------------------------
/src/utils/shared.js:
--------------------------------------------------------------------------------
1 | export function isDef(val) {
2 | return val !== undefined && val !== null;
3 | }
4 | export function isKorean(text) {
5 | const reg = /([(\uAC00-\uD7AF)|(\u3130-\u318F)])+/gi;
6 | return reg.test(text);
7 | }
8 |
--------------------------------------------------------------------------------
/src/utils/vdom.js:
--------------------------------------------------------------------------------
1 | import { hasOwn } from 'element-ui/src/utils/util';
2 |
3 | export function isVNode(node) {
4 | return node !== null && typeof node === 'object' && hasOwn(node, 'componentOptions');
5 | };
6 |
--------------------------------------------------------------------------------
/test/.eslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "mocha": true,
4 | "es6": true
5 | },
6 | "globals": {
7 | "expect": true,
8 | "sinon": true
9 | },
10 | "parserOptions": {
11 | "ecmaVersion": 2017
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/test/ssr/require.test.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | try {
4 | process.env.VUE_ENV = 'server';
5 | require(path.join(process.env.PWD, './lib/index'));
6 | console.log('SSR require test PASS');
7 | } catch (e) {
8 | console.error('SSR require test error');
9 | throw Error(e);
10 | }
11 |
--------------------------------------------------------------------------------
/test/unit/index.js:
--------------------------------------------------------------------------------
1 | require('babel-regenerator-runtime'); // add regenerator support for async await
2 | require('packages/theme-chalk/lib/index.css');
3 |
4 | // require all test files (files that ends with .spec.js)
5 | const testsContext = require.context('./specs', true, /\.spec$/);
6 | testsContext.keys().forEach(testsContext);
7 |
8 | // require all src files except main.js for coverage.
9 | // you can also change this to match only the subset of files that
10 | // you want coverage for.
11 | const srcContext = require.context('../../src', true, /^\.\/(?!main(\.js)?$)/);
12 | srcContext.keys().forEach(srcContext);
13 |
--------------------------------------------------------------------------------
/test/unit/karma.conf.js:
--------------------------------------------------------------------------------
1 | const webpackConfig = require('../../build/webpack.test');
2 |
3 | module.exports = function(config) {
4 | const configuration = {
5 | browsers: ['ChromeHeadless'],
6 | frameworks: ['mocha', 'sinon-chai'],
7 | reporters: ['spec', 'coverage'],
8 | files: ['./index.js'],
9 | preprocessors: {
10 | './index.js': ['webpack', 'sourcemap']
11 | },
12 | webpack: webpackConfig,
13 | webpackMiddleware: {
14 | noInfo: true
15 | },
16 | coverageReporter: {
17 | dir: './coverage',
18 | reporters: [
19 | { type: 'lcov', subdir: '.' },
20 | { type: 'text-summary' }
21 | ]
22 | },
23 | client: {
24 | mocha: {
25 | timeout: 4000
26 | }
27 | }
28 | };
29 |
30 | config.set(configuration);
31 | };
32 |
--------------------------------------------------------------------------------
/test/unit/specs/backtop.spec.js:
--------------------------------------------------------------------------------
1 | import { createVue, destroyVM, wait } from '../util';
2 |
3 | describe('Backtop', () => {
4 | let vm;
5 | afterEach(() => {
6 | destroyVM(vm);
7 | });
8 |
9 | it('create', async() => {
10 | vm = createVue({
11 | template: `
12 |
19 | `
20 | }, true);
21 | expect(vm.$el).to.exist;
22 | expect(vm.$el.innerText).to.be.equal('');
23 | vm.$refs.scrollTarget.scrollTop = 2000;
24 | await wait();
25 | expect(vm.$el.innerText).to.be.equal('test_up_text');
26 | });
27 | });
28 |
29 |
--------------------------------------------------------------------------------
/test/unit/specs/breadcrumb.spec.js:
--------------------------------------------------------------------------------
1 | import { createVue, destroyVM } from '../util';
2 |
3 | describe('Breadcrumb', () => {
4 | let vm;
5 | afterEach(() => {
6 | destroyVM(vm);
7 | });
8 |
9 | it('create', done => {
10 | vm = createVue(`
11 |
12 | 首页
13 | 活动管理
14 | 活动列表
15 | 活动详情
16 |
17 | `);
18 | vm.$nextTick(_ => {
19 | expect(vm.$el.querySelector('.el-breadcrumb__separator').innerText).to.equal('>');
20 | done();
21 | });
22 | });
23 | });
24 |
--------------------------------------------------------------------------------
/test/unit/specs/divider.spec.js:
--------------------------------------------------------------------------------
1 | import { createVue, destroyVM } from '../util';
2 |
3 | describe('Divider', () => {
4 | let vm;
5 | afterEach(() => {
6 | destroyVM(vm);
7 | });
8 |
9 | it('content', () => {
10 | vm = createVue({
11 | template: `
12 | 我是一条完美分割线!
13 | `
14 | });
15 |
16 | expect(vm.$el).to.property('textContent').to.include('我是一条完美分割线!');
17 | });
18 |
19 | it('direction', () => {
20 | vm = createVue({
21 | template: `
22 | 我是一条完美分割线!
23 | `
24 | });
25 |
26 | expect(vm.$el.className).to.include('el-divider--vertical');
27 | });
28 |
29 | it('apply class to divider', () => {
30 | vm = createVue({
31 | template: `
32 | 我是一条完美分割线!
33 | `
34 | });
35 | expect(vm.$el.className).to.include('my-divider');
36 | });
37 | });
38 |
--------------------------------------------------------------------------------
/test/unit/specs/page-header.spec.js:
--------------------------------------------------------------------------------
1 | import { createVue, destroyVM, waitImmediate } from '../util';
2 | import PageHeader from 'packages/page-header';
3 |
4 | describe('PageHeader', () => {
5 | let vm;
6 | afterEach(() => {
7 | destroyVM(vm);
8 | });
9 |
10 | it('render well and trigger back event', async() => {
11 | vm = createVue(PageHeader, {
12 | content: 'content'
13 | });
14 | expect(vm.$el).to.exist;
15 | const spy = sinon.spy();
16 | vm.$on('back', spy);
17 | vm.$el.querySelector('.el-page-header__left').click();
18 |
19 | await waitImmediate();
20 |
21 | expect(spy.calledOnce).to.be.true;
22 | });
23 | });
24 |
25 |
--------------------------------------------------------------------------------
/test/unit/specs/popconfirm.spec.js:
--------------------------------------------------------------------------------
1 | import { createVue, destroyVM } from '../util';
2 |
3 | describe('Popconfirm', () => {
4 | let vm;
5 | afterEach(() => {
6 | destroyVM(vm);
7 | });
8 |
9 | describe('trigger', () => {
10 | const createVM = () => {
11 | return createVue(`
12 |
13 |
16 |
17 |
18 |
19 | `, true);
20 | };
21 | it('click', () => {
22 | vm = createVM();
23 | vm.$el.querySelector('button').click();
24 | document.body.click();
25 | expect(document.body.querySelector('.el-popconfirm__action').style.display).to.equal('');
26 | });
27 | });
28 |
29 | });
30 |
--------------------------------------------------------------------------------
/test/unit/specs/statistic.spec.js:
--------------------------------------------------------------------------------
1 | import { createTest, destroyVM } from '../util';
2 | import Statistic from 'packages/statistic';
3 |
4 | describe('Statistic', () => {
5 | let vm;
6 | afterEach(() => {
7 | destroyVM(vm);
8 | });
9 |
10 | it('create', () => {
11 | vm = createTest(Statistic, true);
12 | expect(vm.$el).to.exist;
13 | });
14 | });
15 |
16 |
--------------------------------------------------------------------------------
/types/alert.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type AlertType = 'success' | 'warning' | 'info' | 'error'
4 | export type AlertEffect = 'dark' | 'light'
5 |
6 | /** Alert Component */
7 | export declare class ElAlert extends ElementUIComponent {
8 | /** Title */
9 | title: string
10 |
11 | /** Component type */
12 | type: AlertType
13 |
14 | /** Descriptive text. Can also be passed with the default slot */
15 | description: string
16 |
17 | /** If closable or not */
18 | closable: boolean
19 |
20 | /** whether to center the text */
21 | center: boolean
22 |
23 | /** Customized close button text */
24 | closeText: string
25 |
26 | /** If a type icon is displayed */
27 | showIcon: boolean
28 |
29 | /** Choose effect */
30 | effect: AlertEffect
31 | }
32 |
--------------------------------------------------------------------------------
/types/aside.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Aside Component */
4 | export declare class ElAside extends ElementUIComponent {
5 | /** Width of the side section */
6 | width: string
7 | }
8 |
--------------------------------------------------------------------------------
/types/avatar.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Avatar Component */
4 | export declare class ElAvatar extends ElementUIComponent {
5 | icon: string;
6 |
7 | size: string | number;
8 |
9 | shape: string;
10 |
11 | src: string;
12 |
13 | error: () => false;
14 |
15 | srcSet: string;
16 |
17 | alt: string;
18 |
19 | fit: string;
20 | }
21 |
--------------------------------------------------------------------------------
/types/backtop.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Backtop Component */
4 | export declare class ElBacktop extends ElementUIComponent {
5 | /** Backtop target */
6 | target: string
7 |
8 | /** Backtop visibility height */
9 | visibilityHeight: string | number
10 |
11 | /** Backtop right position */
12 | right: string | number
13 |
14 | /** Backtop bottom position */
15 | bottom: string | number
16 | }
17 |
--------------------------------------------------------------------------------
/types/badge.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Badge Component */
4 | export declare class ElBadge extends ElementUIComponent {
5 | /** Display value */
6 | value: string | number
7 |
8 | /** Maximum value, shows '{max}+' when exceeded. Only works if `value` is a number */
9 | max: number
10 |
11 | /** If a little dot is displayed */
12 | isDot: boolean
13 |
14 | /** Hidden badge */
15 | hidden: boolean
16 | }
17 |
--------------------------------------------------------------------------------
/types/breadcrumb-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Breadcrumb Item Component */
4 | export declare class ElBreadcrumbItem extends ElementUIComponent {
5 | /** Target route of the link, same as to of vue-router */
6 | to: string | object
7 |
8 | /** If true, the navigation will not leave a history record */
9 | replace: boolean
10 | }
11 |
--------------------------------------------------------------------------------
/types/breadcrumb.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Displays the location of the current page, making it easier to browser back */
4 | export declare class ElBreadcrumb extends ElementUIComponent {
5 | /** Separator character */
6 | separator: string
7 |
8 | /** Class name of the icon separator */
9 | separatorClass: string
10 | }
11 |
--------------------------------------------------------------------------------
/types/button-group.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Button Group Component */
4 | export declare class ElButtonGroup extends ElementUIComponent {}
5 |
--------------------------------------------------------------------------------
/types/button.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent, ElementUIComponentSize } from './component'
2 |
3 | /** Button type */
4 | export type ButtonType = 'primary' | 'success' | 'warning' | 'danger' | 'info' | 'text'
5 |
6 | /** Same as native button's type */
7 | export type ButtonNativeType = 'button' | 'submit' | 'reset' | 'menu'
8 |
9 | /** Button Component */
10 | export declare class ElButton extends ElementUIComponent {
11 | /** Button size */
12 | size: ElementUIComponentSize
13 |
14 | /** Button type */
15 | type: ButtonType
16 |
17 | /** Determine whether it's a plain button */
18 | plain: boolean
19 |
20 | /** Determine whether it's a round button */
21 | round: boolean
22 |
23 | /** Determine whether it's loading */
24 | loading: boolean
25 |
26 | /** Disable the button */
27 | disabled: boolean
28 |
29 | /** Button icon, accepts an icon name of Element icon component */
30 | icon: string
31 |
32 | /** Same as native button's autofocus */
33 | autofocus: boolean
34 |
35 | /** Same as native button's type */
36 | nativeType: ButtonNativeType
37 | }
38 |
--------------------------------------------------------------------------------
/types/calendar.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type DateType = Date | String | Number
4 |
5 | /** Calendar Component */
6 | export declare class ElCalendar extends ElementUIComponent {
7 | /** Binding value */
8 | value: DateType
9 |
10 | /** Specify the display range of the calendar */
11 | range: DateType[]
12 |
13 | /** First day of week */
14 | firstDayOfWeek: number
15 | }
16 |
--------------------------------------------------------------------------------
/types/card.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode, VNodeDirective } from 'vue'
2 | import { ElementUIComponent } from './component'
3 |
4 | export interface CardSlots {
5 | /** Content of the card */
6 | default: VNode[],
7 |
8 | /** Title of the card */
9 | header: VNode[]
10 |
11 | [key: string]: VNode[]
12 | }
13 |
14 | /** Integrate information in a card container */
15 | export declare class ElCard extends ElementUIComponent {
16 | /** Title of the card */
17 | header: string
18 |
19 | /** CSS style of body */
20 | bodyStyle: object
21 |
22 | /** When to show card shadows */
23 | shadow: string
24 |
25 | $slots: CardSlots
26 | }
27 |
--------------------------------------------------------------------------------
/types/carousel-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Carousel Item Component */
4 | export declare class ElCarouselItem extends ElementUIComponent {
5 | /** Name of the item, can be used in setActiveItem */
6 | name: string
7 |
8 | /** Text content for the corresponding indicator */
9 | label: string
10 | }
11 |
--------------------------------------------------------------------------------
/types/checkbox-button.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Checkbox Button Component */
4 | export declare class ElCheckboxButton extends ElementUIComponent {
5 | /** Value of the checkbox when used inside a checkbox-group */
6 | label: string | number | boolean
7 |
8 | /** Value of the checkbox if it's checked */
9 | trueLabel: string | number
10 |
11 | /** Value of the checkbox if it's not checked */
12 | falseLabel: string | number
13 |
14 | /** Native 'name' attribute */
15 | name: string
16 |
17 | /** If the checkbox is disabled */
18 | disabled: boolean
19 |
20 | /** If the checkbox is checked */
21 | checked: boolean
22 | }
23 |
--------------------------------------------------------------------------------
/types/checkbox-group.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent, ElementUIComponentSize } from './component'
2 |
3 | /** Checkbox Group Component */
4 | export declare class ElCheckboxGroup extends ElementUIComponent {
5 | /** Size of checkbox buttons or bordered checkboxes */
6 | size: ElementUIComponentSize
7 |
8 | /** Whether the nesting checkboxes are disabled */
9 | disabled: boolean
10 |
11 | /** Minimum number of checkbox checked */
12 | min: number
13 |
14 | /** Maximum number of checkbox checked */
15 | max: number
16 |
17 | /** Font color when button is active */
18 | textColor: string
19 |
20 | /** Border and background color when button is active */
21 | fill: string
22 | }
23 |
--------------------------------------------------------------------------------
/types/checkbox.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent, ElementUIComponentSize } from './component'
2 |
3 | /** Checkbox Component */
4 | export declare class ElCheckbox extends ElementUIComponent {
5 | /** The form input value */
6 | value: string | string[]
7 |
8 | /** Value of the checkbox when used inside a checkbox-group */
9 | label: string | number | boolean
10 |
11 | /** Value of the checkbox if it's checked */
12 | trueLabel: string | number
13 |
14 | /** Value of the checkbox if it's not checked */
15 | falseLabel: string | number
16 |
17 | /** Native 'name' attribute */
18 | name: string
19 |
20 | /** Whether to add a border around Checkbox */
21 | border: boolean
22 |
23 | /** Size of the Checkbox, only works when border is true */
24 | size: ElementUIComponentSize
25 |
26 | /** If the checkbox is disabled */
27 | disabled: boolean
28 |
29 | /** If the checkbox is checked */
30 | checked: boolean
31 |
32 | /** Same as indeterminate in native checkbox */
33 | indeterminate: boolean
34 | }
35 |
--------------------------------------------------------------------------------
/types/collapse-item.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode } from 'vue'
2 | import { ElementUIComponent } from './component'
3 |
4 | export interface CollapseItemSlots {
5 | /** Content of the collapse item */
6 | default: VNode[],
7 |
8 | /** Title of the collapse item */
9 | title: VNode[]
10 |
11 | [key: string]: VNode[]
12 | }
13 |
14 | /** Collapse Item Component */
15 | export declare class ElCollapseItem extends ElementUIComponent {
16 | /** Unique identification of the panel */
17 | name: string | number
18 |
19 | /** Title of the panel */
20 | title: string
21 |
22 | $slots: CollapseItemSlots
23 |
24 | /** Disable the collapse item */
25 | disabled: boolean
26 | }
27 |
--------------------------------------------------------------------------------
/types/collapse.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Use Collapse to store contents. */
4 | export declare class ElCollapse extends ElementUIComponent {
5 | /** Whether to activate accordion mode */
6 | accordion: boolean
7 |
8 | /** Currently active panel */
9 | value: string | number | string[] | number[]
10 | }
11 |
--------------------------------------------------------------------------------
/types/color-picker.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent, ElementUIComponentSize } from './component'
2 |
3 | export type ColorFormat = 'hsl' | 'hsv' | 'hex' | 'rgb'
4 |
5 | /** ColorPicker Component */
6 | export declare class ElColorPicker extends ElementUIComponent {
7 | /** Whether to display the alpha slider */
8 | showAlpha: boolean
9 |
10 | /** Whether to disable the ColorPicker */
11 | disabled: boolean
12 |
13 | /** Size of ColorPicker */
14 | size: ElementUIComponentSize
15 |
16 | /** Whether to display the alpha slider */
17 | popperClass: string
18 |
19 | /** Custom class name for ColorPicker's dropdown */
20 | colorFormat: ColorFormat
21 | }
22 |
--------------------------------------------------------------------------------
/types/component.d.ts:
--------------------------------------------------------------------------------
1 | import Vue from 'vue'
2 |
3 | /** ElementUI component common definition */
4 | export declare class ElementUIComponent extends Vue {
5 | /** Install component into Vue */
6 | static install (vue: typeof Vue): void
7 | }
8 |
9 | /** Component size definition for button, input, etc */
10 | export type ElementUIComponentSize = 'large' | 'medium' | 'small' | 'mini'
11 |
12 | /** Horizontal alignment */
13 | export type ElementUIHorizontalAlignment = 'left' | 'center' | 'right'
14 |
--------------------------------------------------------------------------------
/types/container.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Container Component */
4 | export declare class ElContainer extends ElementUIComponent {
5 | /** Layout direction for child elements */
6 | direction: 'horizontal' | 'vertical'
7 | }
8 |
--------------------------------------------------------------------------------
/types/descriptions-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { VNode } from 'vue'
3 |
4 | interface ElDescriptionsItemSlots {
5 | /* label slot: custom label */
6 | label: VNode[]
7 |
8 | /* default slot: custom content */
9 | default: VNode[]
10 |
11 | [key: string]: VNode[]
12 | }
13 |
14 | /** description item. **/
15 | export declare class ElDescriptionsItem extends ElementUIComponent {
16 |
17 | /* label text */
18 | label: string
19 |
20 | /* the number of columns included */
21 | span: number
22 |
23 | /* custom label class name */
24 | labelClassName: string
25 |
26 | /* custom content class name */
27 | contentClassName: string
28 |
29 | /* custom label style */
30 | labelStyle: object
31 |
32 | /* custom content style */
33 | contentStyle: object
34 |
35 | $slots: ElDescriptionsItemSlots
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/types/divider.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type ContentPosition = 'left' | 'center' | 'right'
4 |
5 | /** Divider Component */
6 | export declare class ElDivider extends ElementUIComponent {
7 | /** enable vertical divider */
8 | vertical: boolean
9 |
10 | /** customize the content on the divider line */
11 | posiiton: ContentPosition
12 | }
13 |
--------------------------------------------------------------------------------
/types/dropdown-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Toggleable menu for displaying lists of links and actions. */
4 | export declare class ElDropdownItem extends ElementUIComponent {
5 | /** A command to be dispatched to Dropdown's command callback */
6 | command: string | number | object
7 |
8 | /** Whether the item is disabled */
9 | disabled: boolean
10 |
11 | /** Whether a divider is displayed */
12 | divided: boolean
13 |
14 | /** Icon to show on left side of text */
15 | icon: string
16 | }
17 |
--------------------------------------------------------------------------------
/types/dropdown-menu.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Dropdown Menu Component */
4 | export declare class ElDropdownMenu extends ElementUIComponent {}
5 |
--------------------------------------------------------------------------------
/types/empty.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { VNode } from 'vue'
3 |
4 | interface ELEmptySlots {
5 | /* default slot: Custom bottom content */
6 | default: VNode[]
7 |
8 | /* image slot: Custom image */
9 | image: VNode[]
10 |
11 | /* description slot: Custom description */
12 | description: VNode[]
13 |
14 |
15 | [key: string]: VNode[]
16 | }
17 |
18 | /** Placeholder hints for empty states. */
19 | export declare class ElEmpty extends ElementUIComponent {
20 | /* image URL */
21 | image: string
22 |
23 | /* image size (width) */
24 | imageSize: number
25 |
26 | /* description */
27 | description: string
28 |
29 | $slots: ELEmptySlots
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/types/footer.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Footer Component */
4 | export declare class ElFooter extends ElementUIComponent {
5 | /** Height of the footer */
6 | height: string
7 | }
8 |
--------------------------------------------------------------------------------
/types/header.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Header Component */
4 | export declare class ElHeader extends ElementUIComponent {
5 | /** Height of the header */
6 | height: string
7 | }
8 |
--------------------------------------------------------------------------------
/types/icon.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Icon Component */
4 | export declare class ElIcon extends ElementUIComponent {
5 | /** Icon name */
6 | name: string
7 | }
8 |
--------------------------------------------------------------------------------
/types/index.d.ts:
--------------------------------------------------------------------------------
1 | export * from './element-ui'
2 |
3 | import * as ElementUI from './element-ui'
4 | export default ElementUI
5 |
--------------------------------------------------------------------------------
/types/infinite-scroll.d.ts:
--------------------------------------------------------------------------------
1 | import { VNodeDirective } from 'vue'
2 |
3 | export interface ElInfiniteScroll extends VNodeDirective {
4 | name: 'infinite-scroll',
5 | value: Function
6 | }
--------------------------------------------------------------------------------
/types/link.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Button type */
4 | export type LinkType = 'primary' | 'success' | 'warning' | 'danger' | 'info'
5 |
6 | /** Link Component */
7 | export declare class ElLink extends ElementUIComponent {
8 | /** Link type */
9 | type: LinkType
10 |
11 | /** Disable the link */
12 | disabled: boolean
13 |
14 | /** Link underline */
15 | underline: boolean
16 |
17 | /** Link icon, accepts an icon name of Element icon component */
18 | icon: string
19 |
20 | /** Link href */
21 | href: string
22 |
23 | /** Link target */
24 | target: string
25 | }
26 |
--------------------------------------------------------------------------------
/types/main.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Main Component */
4 | export declare class ElMain extends ElementUIComponent {}
5 |
--------------------------------------------------------------------------------
/types/menu-item-group.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Menu Item Group Component */
4 | export declare class ElMenuItemGroup extends ElementUIComponent {
5 | /** Group title */
6 | title: string
7 | }
8 |
--------------------------------------------------------------------------------
/types/menu-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Menu Item Component */
4 | export declare class ElMenuItem extends ElementUIComponent {
5 | /** Unique identification */
6 | index: string
7 |
8 | /** Vue Router object */
9 | route: object
10 | }
11 |
--------------------------------------------------------------------------------
/types/option-group.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Dropdown Select Option Group Component */
4 | export declare class ElOptionGroup extends ElementUIComponent {
5 | /** Name of the group */
6 | label: string
7 |
8 | /** Whether to disable all options in this group */
9 | disabled: boolean
10 | }
11 |
--------------------------------------------------------------------------------
/types/option.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Dropdown Select Option Component */
4 | export declare class ElOption extends ElementUIComponent {
5 | /** Value of option */
6 | value: any
7 |
8 | /** Label of option, same as value if omitted */
9 | label: string
10 |
11 | /** Whether option is disabled */
12 | disabled: boolean
13 | }
14 |
--------------------------------------------------------------------------------
/types/page-header.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** PageHeader Component */
4 | export declare class ElPageHeader extends ElementUIComponent {
5 | /** title */
6 | title: String
7 |
8 | /** content */
9 | content: String
10 | }
11 |
--------------------------------------------------------------------------------
/types/popconfirm.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { ElPopover } from './popover'
3 |
4 | /** Popconfirm Component */
5 | export declare class ElPopconfirm extends ElPopover {
6 | /** Popconfirm title */
7 | title: string
8 |
9 | /** Popconfirm ok text */
10 | confirmButtonText: string
11 |
12 | /** Popconfirm cancel text */
13 | cancelButtonText: string
14 |
15 | /** Popconfirm ok type */
16 | confirmButtonType: string
17 |
18 | /** Popconfirm cancal type */
19 | cancelButtonType: string
20 |
21 | /** Popconfirm icon */
22 | icon: string
23 |
24 | /** Popconfirm icon color */
25 | iconColor: string
26 |
27 | /** Popconfirm hide icon */
28 | hideIcon: boolean
29 | }
30 |
--------------------------------------------------------------------------------
/types/radio-button.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Radio Button Component */
4 | export declare class ElRadioButton extends ElementUIComponent {
5 | /** The form input value */
6 | value: string
7 |
8 | /** The value of radio */
9 | label: string | number
10 |
11 | /** Whether radio is disabled */
12 | disabled: boolean
13 |
14 | /** Native 'name' attribute */
15 | name: string
16 | }
17 |
--------------------------------------------------------------------------------
/types/radio-group.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type RadioGroupSize = 'large' | 'small'
4 |
5 | /** Radio Group Component */
6 | export declare class ElRadioGroup extends ElementUIComponent {
7 | /** The size of radio buttons */
8 | size: RadioGroupSize
9 |
10 | /** Border and background color when button is active */
11 | fill: string
12 |
13 | /** Whether the nesting radios are disabled */
14 | disabled: boolean
15 |
16 | /** Font color when button is active */
17 | textColor: string
18 | }
19 |
--------------------------------------------------------------------------------
/types/radio.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Radio Component */
4 | export declare class ElRadio extends ElementUIComponent {
5 | /** The form input value */
6 | value: string
7 |
8 | /** The value of radio */
9 | label: string | number | boolean
10 |
11 | /** Whether radio is disabled */
12 | disabled: boolean
13 |
14 | /** Whether to add a border around Radio */
15 | border: boolean
16 |
17 | /** Native 'name' attribute */
18 | name: string
19 | }
20 |
--------------------------------------------------------------------------------
/types/result.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { VNode } from 'vue'
3 |
4 | interface ElResultSlots {
5 | /* title slot: custom title */
6 | title: VNode[]
7 |
8 | /* icon slot: custom icon */
9 | icon: VNode[]
10 |
11 | /* subTitle slot: custom sub title */
12 | subTitle: VNode[]
13 |
14 | /* extra slot: custom extra area, display on the top right */
15 | extra: VNode[]
16 |
17 | [key: string]: VNode[]
18 | }
19 |
20 | /** Used to give feedback on the result of user's operation or access exception. **/
21 | export declare class ElResult extends ElementUIComponent {
22 |
23 | /* title */
24 | title: string
25 |
26 | /* sub title */
27 | subTitle: string
28 |
29 | /* icon type */
30 | icon: 'success' | 'warning' | 'info' | 'error'
31 |
32 | $slots: ElResultSlots
33 | }
34 |
--------------------------------------------------------------------------------
/types/row.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Horizontal alignment of flex layout */
4 | export type HorizontalAlignment = 'start' | 'end' | 'center' | 'space-around' | 'space-between'
5 |
6 | /** vertical alignment of flex layout */
7 | export type VertialAlignment = 'top' | 'middle' | 'bottom'
8 |
9 | /** Row Layout Component */
10 | export declare class ElRow extends ElementUIComponent {
11 | /** Grid spacing */
12 | gutter: number
13 |
14 | /** Layout mode. You can use flex. Works in modern browsers */
15 | type: string
16 |
17 | /** Horizontal alignment of flex layout */
18 | justify: HorizontalAlignment
19 |
20 | /** Vertical alignment of flex layout */
21 | align: VertialAlignment
22 |
23 | /** Custom element tag */
24 | tag: string
25 | }
26 |
--------------------------------------------------------------------------------
/types/skeleton-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Skeleton Item Component */
4 | export declare class ElSkeletonItem extends ElementUIComponent {
5 | /** The current rendering skeleton type; default: text */
6 | variant: 'p' | 'text' | 'h1' | 'h3' | 'text' | 'caption' | 'button' | 'image' | 'circle' | 'rect'
7 | }
8 |
--------------------------------------------------------------------------------
/types/skeleton.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { VNode } from 'vue'
3 |
4 | interface ElSkeletonSlots {
5 | /* default slot: Real rendering DOM */
6 | default: VNode[]
7 |
8 | /* template slot: Custom rendering skeleton template */
9 | template: VNode[]
10 |
11 | [key: string]: VNode[]
12 | }
13 |
14 | /** When loading data, and you need a rich experience for visual and interactions for your end users */
15 | export declare class ElSkeleton extends ElementUIComponent {
16 | /** whether showing the animation; default: false */
17 | animated: boolean
18 |
19 | /** how many fake items to render to the DOM; default: 1 */
20 | count: number
21 |
22 | /** whether showing the skeleton; default true */
23 | loading: boolean
24 |
25 | /** numbers of the row, only useful when no template slot were given; default: 4 */
26 | rows: boolean
27 |
28 | /** Rendering delay in millseconds; default: 0 */
29 | throttle: number
30 |
31 | $slots: ElSkeletonSlots
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/types/spinner.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Spinner Component */
4 | export declare class ElSpinner extends ElementUIComponent {
5 | /** The type of spinner */
6 | type: string
7 |
8 | /** The radius of spinner */
9 | radius: number
10 |
11 | /** The width of spinner */
12 | strokeWidth: number
13 |
14 | /** The color of spinner */
15 | strokeColor: string
16 | }
17 |
--------------------------------------------------------------------------------
/types/statistic.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Statistic Component */
4 | export declare class ElStatistic extends ElementUIComponent {
5 | /** Set the decimal point */
6 | decimalSeparator: string
7 |
8 | /** Sets the thousandth identifier */
9 | groupSeparator: string
10 |
11 | /** numerical precision */
12 | precision: number
13 |
14 | /** Numerical content */
15 | value: string | number
16 |
17 | /** Title of numerical value */
18 | title: string | number
19 |
20 | /** Whether to enable the countdown function */
21 | timeIndices: boolean
22 |
23 | /** Sets the style of the value */
24 | valueStyle: object
25 |
26 | /** Numeric content formatting countdown display */
27 | format: string
28 |
29 | /** Set the ratio */
30 | rate: number
31 |
32 | /** Set the suffix of the value */
33 | suffix: string
34 |
35 | /** Set the prefix of the value */
36 | prefix: string
37 | }
38 |
--------------------------------------------------------------------------------
/types/step.d.ts:
--------------------------------------------------------------------------------
1 | import { VNode } from 'vue'
2 | import { ElementUIComponent } from './component'
3 |
4 | export type StepStatus = 'wait' | 'process' | 'finish' | 'error' | 'success'
5 |
6 | export interface StepRenderSlots {
7 | /** Custom icon */
8 | icon: VNode[],
9 |
10 | /** Step title */
11 | title: VNode[],
12 |
13 | /** Step description */
14 | description: VNode[],
15 |
16 | [key: string]: VNode[]
17 | }
18 |
19 | /** Step Component */
20 | export declare class ElStep extends ElementUIComponent {
21 | /** Step title */
22 | title: string
23 |
24 | /** Step description */
25 | description: string
26 |
27 | /** Step icon */
28 | icon: string
29 |
30 | /** Current status. It will be automatically set by Steps if not configured. */
31 | status: StepStatus
32 |
33 | readonly $slots: StepRenderSlots
34 | }
35 |
--------------------------------------------------------------------------------
/types/steps.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 | import { StepStatus } from './step'
3 |
4 | export type StepsDirection = 'vertical' | 'horizontal'
5 |
6 | /** Guide the user to complete tasks in accordance with the process. Its steps can be set according to the actual application scenario and the number of the steps can't be less than 2. */
7 | export declare class ElSteps extends ElementUIComponent {
8 | /** The spacing of each step, will be responsive if omitted. Support percentage. */
9 | space: number | string
10 |
11 | /** Display direction */
12 | direction: StepsDirection
13 |
14 | /** Current activation step */
15 | active: number
16 |
17 | /** Status of current step */
18 | processStatus: StepStatus
19 |
20 | /** Status of end step */
21 | finishStatus: StepStatus
22 |
23 | /** Whether step description is centered */
24 | alignCenter: boolean
25 |
26 | /** Whether to apply simple theme */
27 | simple: boolean
28 | }
29 |
--------------------------------------------------------------------------------
/types/submenu.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Submenu Component */
4 | export declare class ElSubmenu extends ElementUIComponent {
5 | /** Unique identification */
6 | index: string | null
7 |
8 | /** Delay time before showing a sub-menu */
9 | showTimeout: number
10 |
11 | /** Delay time before hiding a sub-menu */
12 | hideTimeout: number
13 |
14 | /** Custom class name for the popup menu */
15 | popperClass: string
16 |
17 | /** Whether the sub-menu is disabled */
18 | disabled: boolean
19 |
20 | /** Whether to append the popper menu to body */
21 | popperAppendToBody: boolean
22 | }
23 |
--------------------------------------------------------------------------------
/types/tab-pane.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Tab Pane Component */
4 | export declare class ElTabPane extends ElementUIComponent {
5 | /** Title of the tab */
6 | label: string
7 |
8 | /** Whether Tab is disabled */
9 | disabled: boolean
10 |
11 | /** Identifier corresponding to the activeName of Tabs, representing the alias of the tab-pane */
12 | name: string
13 |
14 | /** Whether Tab is closable */
15 | closable: boolean
16 |
17 | /** Whether Tab is lazily rendered */
18 | lazy: boolean
19 | }
20 |
--------------------------------------------------------------------------------
/types/tabs.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type TabType = 'card' | 'border-card'
4 | export type TabPosition = 'top' | 'right' | 'bottom' | 'left'
5 |
6 | /** Divide data collections which are related yet belong to different types */
7 | export declare class ElTabs extends ElementUIComponent {
8 | /** Type of Tab */
9 | type: TabType
10 |
11 | /** Whether Tab is closable */
12 | closable: boolean
13 |
14 | /** Whether Tab is addable */
15 | addable: boolean
16 |
17 | /** Whether Tab is addable and closable */
18 | editable: boolean
19 |
20 | /** Name of the selected tab */
21 | value: string
22 |
23 | /** Position of tabs */
24 | tabPosition: TabPosition
25 |
26 | /** Whether width of tab automatically fits its container */
27 | stretch: Boolean
28 |
29 | /** Hook function before switching tab. If false or a Promise is returned and then is rejected, switching will be prevented */
30 | beforeLeave: (activeName: string, oldActiveName: string) => boolean | Promise
31 | }
32 |
--------------------------------------------------------------------------------
/types/tag.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent, ElementUIComponentSize } from './component'
2 |
3 | export type TagType = 'primary' | 'gray' | 'success' | 'warning' | 'danger'
4 | export type TagTheme = 'dark' | 'light' | 'plain'
5 |
6 | /** Tag Component */
7 | export declare class ElTag extends ElementUIComponent {
8 | /** Tag type */
9 | type: TagType
10 |
11 | /** Whether Tab can be removed */
12 | closable: boolean
13 |
14 | /** Whether the removal animation is disabled */
15 | disableTransitions: boolean
16 |
17 | /** Whether Tag has a highlighted border */
18 | hit: boolean
19 |
20 | /** Background color of the tag */
21 | color: string
22 |
23 | /** Tag size */
24 | size: ElementUIComponentSize
25 |
26 | /** Tag theme */
27 | effect: TagTheme
28 | }
29 |
--------------------------------------------------------------------------------
/types/timeline-item.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | export type TimelineItemPlacement = 'top' | 'bottom'
4 | export type TimelineItemType = 'primary' | 'success' | 'warning' | 'danger' | 'info'
5 | export type TimelineItemSize = 'normal' | 'large'
6 |
7 | /** TimelineItem Component */
8 | export declare class ElTimelineItem extends ElementUIComponent {
9 | timestamp: string
10 |
11 | hideTimestamp: boolean
12 |
13 | placement: TimelineItemPlacement
14 |
15 | type: TimelineItemType
16 |
17 | size: TimelineItemSize
18 |
19 | icon: string
20 | }
21 |
--------------------------------------------------------------------------------
/types/timeline.d.ts:
--------------------------------------------------------------------------------
1 | import { ElementUIComponent } from './component'
2 |
3 | /** Timeline Component */
4 | export declare class ElTimeline extends ElementUIComponent {
5 | reverse: boolean
6 | }
7 |
--------------------------------------------------------------------------------