element-pe 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attributes.json +1 -1
- package/dist/index.css +1 -1
- package/dist/index.full.js +632 -1287
- package/dist/index.full.min.js +9 -10
- package/dist/index.full.min.js.map +1 -1
- package/dist/index.full.min.mjs +7 -8
- package/dist/index.full.min.mjs.map +1 -1
- package/dist/index.full.mjs +630 -1289
- package/es/component.d.ts +24 -2
- package/es/components/affix/index.js +1 -1
- package/es/components/autocomplete/index.d.ts +4 -4
- package/es/components/autocomplete/src/index.vue.d.ts +2 -2
- package/es/components/carousel/index.d.ts +2 -2
- package/es/components/carousel/src/main.vue.d.ts +2 -2
- package/es/components/cascader/index.d.ts +2 -2
- package/es/components/cascader/src/index.vue.d.ts +1 -1
- package/es/components/checkbox/index.d.ts +6 -6
- package/es/components/checkbox/src/checkbox-button.vue.d.ts +1 -1
- package/es/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
- package/es/components/checkbox/src/checkbox.vue.d.ts +2 -2
- package/es/components/color-picker/index.d.ts +2 -2
- package/es/components/color-picker/src/components/alpha-slider.vue.d.ts +1 -1
- package/es/components/color-picker/src/components/hue-slider.vue.d.ts +1 -1
- package/es/components/color-picker/src/index.vue.d.ts +1 -1
- package/es/components/descriptions/index.d.ts +8 -8
- package/es/components/descriptions/src/description-item.d.ts +2 -2
- package/es/components/descriptions/src/descriptions-cell.d.ts +1 -1
- package/es/components/descriptions/src/index.vue.d.ts +4 -4
- package/es/components/drawer/index.d.ts +6 -6
- package/es/components/drawer/src/index.vue.d.ts +3 -3
- package/es/components/dropdown/index.d.ts +2 -2
- package/es/components/dropdown/src/dropdown.vue.d.ts +2 -2
- package/es/components/form/index.js +2 -2
- package/es/components/icon/index.d.ts +1 -1
- package/es/components/icon/src/icon.vue.d.ts +1 -1
- package/es/components/image/index.d.ts +3 -3
- package/es/components/image/index.js +2 -3
- package/es/components/image/src/image.d.ts +1 -1
- package/es/components/image/src/image.vue.d.ts +3 -3
- package/es/components/image-viewer/index.d.ts +28 -104
- package/es/components/image-viewer/index.js +60 -61
- package/es/components/image-viewer/src/image-viewer.d.ts +14 -0
- package/es/components/image-viewer/src/image-viewer.vue.d.ts +55 -0
- package/es/components/input/index.d.ts +116 -360
- package/es/components/input/index.js +216 -209
- package/es/components/input/src/calc-textarea-height.d.ts +6 -0
- package/es/components/input/src/input.d.ts +46 -0
- package/es/components/input/src/input.vue.d.ts +162 -0
- package/es/components/input-number/index.d.ts +2 -2
- package/es/components/input-number/src/index.vue.d.ts +1 -1
- package/es/components/menu/index.d.ts +7 -3
- package/es/components/menu/index.js +8 -3
- package/es/components/menu/src/menu.d.ts +8 -3
- package/es/components/pagination/index.d.ts +2 -2
- package/es/components/pagination/src/pagination.d.ts +2 -2
- package/es/components/progress/index.js +0 -1
- package/es/components/radio/index.d.ts +2 -2
- package/es/components/radio/src/radio.vue.d.ts +2 -2
- package/es/components/rate/index.js +1 -1
- package/es/components/row/index.d.ts +4 -4
- package/es/components/row/src/row.d.ts +2 -2
- package/es/components/scrollbar/index.d.ts +4 -4
- package/es/components/scrollbar/src/index.vue.d.ts +2 -2
- package/es/components/select/index.d.ts +3 -3
- package/es/components/select/src/select.vue.d.ts +3 -3
- package/es/components/select-v2/index.d.ts +6 -6
- package/es/components/select-v2/index.js +2 -0
- package/es/components/select-v2/src/select.vue.d.ts +3 -3
- package/es/components/slider/index.d.ts +4 -4
- package/es/components/slider/src/button.vue.d.ts +2 -2
- package/es/components/slider/src/index.vue.d.ts +2 -2
- package/es/components/space/index.d.ts +2 -2
- package/es/components/space/src/space.d.ts +2 -2
- package/es/components/steps/index.d.ts +2 -2
- package/es/components/steps/src/index.vue.d.ts +2 -2
- package/es/components/table/index.d.ts +4 -4
- package/es/components/table/index.js +17 -9
- package/es/components/table/src/table.vue.d.ts +4 -4
- package/es/components/tag/index.d.ts +1 -1
- package/es/components/tag/src/tag.vue.d.ts +1 -1
- package/es/components/timeline/index.d.ts +4 -4
- package/es/components/timeline/src/item.vue.d.ts +2 -2
- package/es/components/tree/index.js +1 -1
- package/es/components/tree-v2/index.d.ts +1 -1
- package/es/components/tree-v2/index.js +2 -24
- package/es/components/tree-v2/src/tree.vue.d.ts +1 -1
- package/es/components/upload/index.d.ts +4 -4
- package/es/components/upload/src/index.vue.d.ts +2 -2
- package/es/components/upload/src/upload.vue.d.ts +2 -2
- package/es/components/virtual-list/src/builders/build-grid.d.ts +3 -3
- package/es/components/virtual-list/src/builders/build-list.d.ts +4 -4
- package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +3 -3
- package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
- package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +3 -3
- package/es/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
- package/es/components/virtual-list/src/components/scrollbar.d.ts +1 -1
- package/es/utils/dom.d.ts +5 -5
- package/es/utils/dom.js +29 -36
- package/es/utils/props.d.ts +2 -2
- package/es/utils/props.js +15 -7
- package/es/utils/util.d.ts +2 -2
- package/es/utils/util.js +3 -3
- package/es/version.d.ts +1 -1
- package/es/version.js +1 -1
- package/lib/component.d.ts +24 -2
- package/lib/components/affix/index.js +1 -1
- package/lib/components/autocomplete/index.d.ts +4 -4
- package/lib/components/autocomplete/src/index.vue.d.ts +2 -2
- package/lib/components/carousel/index.d.ts +2 -2
- package/lib/components/carousel/src/main.vue.d.ts +2 -2
- package/lib/components/cascader/index.d.ts +2 -2
- package/lib/components/cascader/src/index.vue.d.ts +1 -1
- package/lib/components/checkbox/index.d.ts +6 -6
- package/lib/components/checkbox/src/checkbox-button.vue.d.ts +1 -1
- package/lib/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
- package/lib/components/checkbox/src/checkbox.vue.d.ts +2 -2
- package/lib/components/color-picker/index.d.ts +2 -2
- package/lib/components/color-picker/src/components/alpha-slider.vue.d.ts +1 -1
- package/lib/components/color-picker/src/components/hue-slider.vue.d.ts +1 -1
- package/lib/components/color-picker/src/index.vue.d.ts +1 -1
- package/lib/components/descriptions/index.d.ts +8 -8
- package/lib/components/descriptions/src/description-item.d.ts +2 -2
- package/lib/components/descriptions/src/descriptions-cell.d.ts +1 -1
- package/lib/components/descriptions/src/index.vue.d.ts +4 -4
- package/lib/components/drawer/index.d.ts +6 -6
- package/lib/components/drawer/src/index.vue.d.ts +3 -3
- package/lib/components/dropdown/index.d.ts +2 -2
- package/lib/components/dropdown/src/dropdown.vue.d.ts +2 -2
- package/lib/components/form/index.js +2 -2
- package/lib/components/icon/index.d.ts +1 -1
- package/lib/components/icon/src/icon.vue.d.ts +1 -1
- package/lib/components/image/index.d.ts +3 -3
- package/lib/components/image/index.js +2 -3
- package/lib/components/image/src/image.d.ts +1 -1
- package/lib/components/image/src/image.vue.d.ts +3 -3
- package/lib/components/image-viewer/index.d.ts +28 -104
- package/lib/components/image-viewer/index.js +61 -60
- package/lib/components/image-viewer/src/image-viewer.d.ts +14 -0
- package/lib/components/image-viewer/src/image-viewer.vue.d.ts +55 -0
- package/lib/components/input/index.d.ts +116 -360
- package/lib/components/input/index.js +215 -206
- package/lib/components/input/src/calc-textarea-height.d.ts +6 -0
- package/lib/components/input/src/input.d.ts +46 -0
- package/lib/components/input/src/input.vue.d.ts +162 -0
- package/lib/components/input-number/index.d.ts +2 -2
- package/lib/components/input-number/src/index.vue.d.ts +1 -1
- package/lib/components/menu/index.d.ts +7 -3
- package/lib/components/menu/index.js +8 -3
- package/lib/components/menu/src/menu.d.ts +8 -3
- package/lib/components/pagination/index.d.ts +2 -2
- package/lib/components/pagination/src/pagination.d.ts +2 -2
- package/lib/components/progress/index.js +0 -1
- package/lib/components/radio/index.d.ts +2 -2
- package/lib/components/radio/src/radio.vue.d.ts +2 -2
- package/lib/components/rate/index.js +1 -1
- package/lib/components/row/index.d.ts +4 -4
- package/lib/components/row/src/row.d.ts +2 -2
- package/lib/components/scrollbar/index.d.ts +4 -4
- package/lib/components/scrollbar/src/index.vue.d.ts +2 -2
- package/lib/components/select/index.d.ts +3 -3
- package/lib/components/select/src/select.vue.d.ts +3 -3
- package/lib/components/select-v2/index.d.ts +6 -6
- package/lib/components/select-v2/index.js +2 -0
- package/lib/components/select-v2/src/select.vue.d.ts +3 -3
- package/lib/components/slider/index.d.ts +4 -4
- package/lib/components/slider/src/button.vue.d.ts +2 -2
- package/lib/components/slider/src/index.vue.d.ts +2 -2
- package/lib/components/space/index.d.ts +2 -2
- package/lib/components/space/src/space.d.ts +2 -2
- package/lib/components/steps/index.d.ts +2 -2
- package/lib/components/steps/src/index.vue.d.ts +2 -2
- package/lib/components/table/index.d.ts +4 -4
- package/lib/components/table/index.js +17 -9
- package/lib/components/table/src/table.vue.d.ts +4 -4
- package/lib/components/tag/index.d.ts +1 -1
- package/lib/components/tag/src/tag.vue.d.ts +1 -1
- package/lib/components/timeline/index.d.ts +4 -4
- package/lib/components/timeline/src/item.vue.d.ts +2 -2
- package/lib/components/tree/index.js +1 -1
- package/lib/components/tree-v2/index.d.ts +1 -1
- package/lib/components/tree-v2/index.js +2 -24
- package/lib/components/tree-v2/src/tree.vue.d.ts +1 -1
- package/lib/components/upload/index.d.ts +4 -4
- package/lib/components/upload/src/index.vue.d.ts +2 -2
- package/lib/components/upload/src/upload.vue.d.ts +2 -2
- package/lib/components/virtual-list/src/builders/build-grid.d.ts +3 -3
- package/lib/components/virtual-list/src/builders/build-list.d.ts +4 -4
- package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +3 -3
- package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
- package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +3 -3
- package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
- package/lib/components/virtual-list/src/components/scrollbar.d.ts +1 -1
- package/lib/utils/dom.d.ts +5 -5
- package/lib/utils/dom.js +29 -36
- package/lib/utils/props.d.ts +2 -2
- package/lib/utils/props.js +15 -7
- package/lib/utils/util.d.ts +2 -2
- package/lib/utils/util.js +2 -2
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +3 -2
- package/packages/components/affix/src/affix.vue +1 -1
- package/packages/components/color-picker/src/index.vue +1 -1
- package/packages/components/form/__tests__/form.spec.ts +1 -1
- package/packages/components/form/src/form-item.vue +2 -2
- package/packages/components/image/src/image.ts +3 -3
- package/packages/components/image/src/image.vue +1 -1
- package/packages/components/image-viewer/__tests__/image-viewer.spec.ts +1 -1
- package/packages/components/image-viewer/index.ts +5 -10
- package/packages/components/image-viewer/src/image-viewer.ts +32 -0
- package/packages/components/image-viewer/src/{index.vue → image-viewer.vue} +73 -82
- package/packages/components/input/__tests__/input.spec.ts +7 -7
- package/packages/components/input/index.ts +5 -10
- package/packages/components/input/src/{calcTextareaHeight.ts → calc-textarea-height.ts} +9 -7
- package/packages/components/input/src/input.ts +100 -0
- package/packages/components/input/src/{index.vue → input.vue} +135 -239
- package/packages/components/menu/src/menu.ts +10 -3
- package/packages/components/progress/src/index.vue +0 -1
- package/packages/components/rate/src/index.vue +1 -1
- package/packages/components/select-v2/src/useSelect.ts +2 -0
- package/packages/components/space/__tests__/space.spec.ts +1 -1
- package/packages/components/switch/__tests__/switch.spec.ts +1 -1
- package/packages/components/table/src/store/tree.ts +18 -3
- package/packages/components/table/src/table-body/render-helper.ts +1 -1
- package/packages/components/table/src/table-column/index.ts +4 -1
- package/packages/components/table/src/table-layout.ts +2 -2
- package/packages/components/table/src/util.ts +1 -1
- package/packages/components/tree/src/model/node.ts +1 -1
- package/packages/element-plus/package.json +3 -2
- package/packages/element-plus/version.ts +1 -1
- package/packages/theme-chalk/package.json +1 -2
- package/packages/theme-chalk/src/message-box.scss +1 -0
- package/packages/utils/dist/es/dom.d.ts +5 -5
- package/packages/utils/dist/es/dom.js +29 -36
- package/packages/utils/dist/es/props.d.ts +2 -2
- package/packages/utils/dist/es/props.js +15 -7
- package/packages/utils/dist/es/util.d.ts +2 -2
- package/packages/utils/dist/es/util.js +3 -3
- package/packages/utils/dist/lib/dom.d.ts +5 -5
- package/packages/utils/dist/lib/dom.js +29 -36
- package/packages/utils/dist/lib/props.d.ts +2 -2
- package/packages/utils/dist/lib/props.js +15 -7
- package/packages/utils/dist/lib/util.d.ts +2 -2
- package/packages/utils/dist/lib/util.js +2 -2
- package/packages/utils/dom.ts +34 -41
- package/packages/utils/props.ts +27 -11
- package/packages/utils/tests/dom.spec.ts +183 -0
- package/packages/utils/util.ts +8 -9
- package/tags.json +1 -1
- package/theme-chalk/el-message-box.css +1 -1
- package/theme-chalk/index.css +1 -1
- package/theme-chalk/src/message-box.scss +1 -0
- package/web-types.json +1 -1
- package/es/components/image-viewer/src/index.vue.d.ts +0 -67
- package/es/components/input/src/calcTextareaHeight.d.ts +0 -6
- package/es/components/input/src/index.vue.d.ts +0 -197
- package/lib/components/image-viewer/src/index.vue.d.ts +0 -67
- package/lib/components/input/src/calcTextareaHeight.d.ts +0 -6
- package/lib/components/input/src/index.vue.d.ts +0 -197
package/packages/utils/dom.ts
CHANGED
|
@@ -5,8 +5,8 @@ import type { CSSProperties } from 'vue'
|
|
|
5
5
|
import type { Nullable } from './types'
|
|
6
6
|
|
|
7
7
|
/* istanbul ignore next */
|
|
8
|
-
const
|
|
9
|
-
return (s || '').
|
|
8
|
+
const trimArr = function (s: string) {
|
|
9
|
+
return (s || '').split(' ').filter((item) => !!item.trim())
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
/* istanbul ignore next */
|
|
@@ -39,7 +39,7 @@ export const once = function (
|
|
|
39
39
|
event: string,
|
|
40
40
|
fn: EventListener
|
|
41
41
|
): void {
|
|
42
|
-
const listener = function (...args:
|
|
42
|
+
const listener = function (this: any, ...args: any) {
|
|
43
43
|
if (fn) {
|
|
44
44
|
fn.apply(this, args)
|
|
45
45
|
}
|
|
@@ -49,57 +49,50 @@ export const once = function (
|
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
/* istanbul ignore next */
|
|
52
|
-
export function hasClass(el: HTMLElement, cls: string): boolean {
|
|
52
|
+
export function hasClass(el: HTMLElement | Element, cls: string): boolean {
|
|
53
53
|
if (!el || !cls) return false
|
|
54
54
|
if (cls.indexOf(' ') !== -1)
|
|
55
55
|
throw new Error('className should not contain space.')
|
|
56
56
|
if (el.classList) {
|
|
57
57
|
return el.classList.contains(cls)
|
|
58
58
|
} else {
|
|
59
|
-
|
|
59
|
+
const className = el.getAttribute('class') || ''
|
|
60
|
+
return className.split(' ').includes(cls)
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
/* istanbul ignore next */
|
|
64
|
-
export function addClass(el: HTMLElement, cls: string): void {
|
|
65
|
+
export function addClass(el: HTMLElement | Element, cls: string): void {
|
|
65
66
|
if (!el) return
|
|
66
|
-
let
|
|
67
|
-
const
|
|
67
|
+
let className = el.getAttribute('class') || ''
|
|
68
|
+
const curClass = trimArr(className)
|
|
69
|
+
const classes = (cls || '')
|
|
70
|
+
.split(' ')
|
|
71
|
+
.filter((item) => !curClass.includes(item) && !!item.trim())
|
|
68
72
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
el.classList.add(clsName)
|
|
75
|
-
} else if (!hasClass(el, clsName)) {
|
|
76
|
-
curClass += ` ${clsName}`
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (!el.classList) {
|
|
80
|
-
el.className = curClass
|
|
73
|
+
if (el.classList) {
|
|
74
|
+
el.classList.add(...classes)
|
|
75
|
+
} else {
|
|
76
|
+
className += ` ${classes.join(' ')}`
|
|
77
|
+
el.setAttribute('class', className)
|
|
81
78
|
}
|
|
82
79
|
}
|
|
83
80
|
|
|
84
81
|
/* istanbul ignore next */
|
|
85
|
-
export function removeClass(el: HTMLElement, cls: string): void {
|
|
82
|
+
export function removeClass(el: HTMLElement | Element, cls: string): void {
|
|
86
83
|
if (!el || !cls) return
|
|
87
|
-
const classes = cls
|
|
88
|
-
let curClass =
|
|
89
|
-
|
|
90
|
-
for (let i = 0, j = classes.length; i < j; i++) {
|
|
91
|
-
const clsName = classes[i]
|
|
92
|
-
if (!clsName) continue
|
|
84
|
+
const classes = trimArr(cls)
|
|
85
|
+
let curClass = el.getAttribute('class') || ''
|
|
93
86
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
curClass = curClass.replace(` ${clsName} `, ' ')
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
if (!el.classList) {
|
|
101
|
-
el.className = trim(curClass)
|
|
87
|
+
if (el.classList) {
|
|
88
|
+
el.classList.remove(...classes)
|
|
89
|
+
return
|
|
102
90
|
}
|
|
91
|
+
classes.forEach((item) => {
|
|
92
|
+
curClass = curClass.replace(` ${item} `, ' ')
|
|
93
|
+
})
|
|
94
|
+
const className = trimArr(curClass).join(' ')
|
|
95
|
+
el.setAttribute('class', className)
|
|
103
96
|
}
|
|
104
97
|
|
|
105
98
|
/* istanbul ignore next */
|
|
@@ -111,8 +104,8 @@ export const getStyle = function (
|
|
|
111
104
|
element: HTMLElement,
|
|
112
105
|
styleName: string
|
|
113
106
|
): string {
|
|
114
|
-
if (isServer) return
|
|
115
|
-
if (!element || !styleName) return
|
|
107
|
+
if (isServer) return ''
|
|
108
|
+
if (!element || !styleName) return ''
|
|
116
109
|
styleName = camelize(styleName)
|
|
117
110
|
if (styleName === 'float') {
|
|
118
111
|
styleName = 'cssFloat'
|
|
@@ -120,7 +113,7 @@ export const getStyle = function (
|
|
|
120
113
|
try {
|
|
121
114
|
const style = element.style[styleName]
|
|
122
115
|
if (style) return style
|
|
123
|
-
const computed = document.defaultView
|
|
116
|
+
const computed = document.defaultView?.getComputedStyle(element, '')
|
|
124
117
|
return computed ? computed[styleName] : ''
|
|
125
118
|
} catch (e) {
|
|
126
119
|
return element.style[styleName]
|
|
@@ -163,8 +156,8 @@ export function removeStyle(
|
|
|
163
156
|
export const isScroll = (
|
|
164
157
|
el: HTMLElement,
|
|
165
158
|
isVertical?: Nullable<boolean>
|
|
166
|
-
): RegExpMatchArray => {
|
|
167
|
-
if (isServer) return
|
|
159
|
+
): RegExpMatchArray | null => {
|
|
160
|
+
if (isServer) return null
|
|
168
161
|
const determinedDirection = isVertical === null || isVertical === undefined
|
|
169
162
|
const overflow = determinedDirection
|
|
170
163
|
? getStyle(el, 'overflow')
|
|
@@ -178,7 +171,7 @@ export const isScroll = (
|
|
|
178
171
|
export const getScrollContainer = (
|
|
179
172
|
el: HTMLElement,
|
|
180
173
|
isVertical?: Nullable<boolean>
|
|
181
|
-
): Window | HTMLElement => {
|
|
174
|
+
): Window | HTMLElement | undefined => {
|
|
182
175
|
if (isServer) return
|
|
183
176
|
|
|
184
177
|
let parent: HTMLElement = el
|
package/packages/utils/props.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { warn } from 'vue'
|
|
1
2
|
import { isObject } from '@vue/shared'
|
|
2
|
-
import
|
|
3
|
-
import { debugWarn } from './error'
|
|
3
|
+
import fromPairs from 'lodash/fromPairs'
|
|
4
4
|
import type { ExtractPropTypes, PropType } from '@vue/runtime-core'
|
|
5
5
|
import type { Mutable } from './types'
|
|
6
6
|
|
|
@@ -102,7 +102,10 @@ export function buildProp<
|
|
|
102
102
|
R extends boolean = false,
|
|
103
103
|
V = never,
|
|
104
104
|
C = never
|
|
105
|
-
>(
|
|
105
|
+
>(
|
|
106
|
+
option: BuildPropOption<T, D, R, V, C>,
|
|
107
|
+
key?: string
|
|
108
|
+
): BuildPropReturn<T, D, R, V, C> {
|
|
106
109
|
// filter native prop type and nested prop, e.g `null`, `undefined` (from `buildProps`)
|
|
107
110
|
if (!isObject(option) || !!option[propKey]) return option as any
|
|
108
111
|
|
|
@@ -121,11 +124,15 @@ export function buildProp<
|
|
|
121
124
|
if (validator) valid ||= validator(val)
|
|
122
125
|
|
|
123
126
|
if (!valid && allowedValues.length > 0) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
const allowValuesText = [...new Set(allowedValues)]
|
|
128
|
+
.map((value) => JSON.stringify(value))
|
|
129
|
+
.join(', ')
|
|
130
|
+
warn(
|
|
131
|
+
`Invalid prop: validation failed${
|
|
132
|
+
key ? ` for prop "${key}"` : ''
|
|
133
|
+
}. Expected one of [${allowValuesText}], got value ${JSON.stringify(
|
|
134
|
+
val
|
|
135
|
+
)}.`
|
|
129
136
|
)
|
|
130
137
|
}
|
|
131
138
|
return valid
|
|
@@ -133,7 +140,11 @@ export function buildProp<
|
|
|
133
140
|
: undefined
|
|
134
141
|
|
|
135
142
|
return {
|
|
136
|
-
type:
|
|
143
|
+
type:
|
|
144
|
+
typeof type === 'object' &&
|
|
145
|
+
Object.getOwnPropertySymbols(type).includes(wrapperKey)
|
|
146
|
+
? type[wrapperKey]
|
|
147
|
+
: type,
|
|
137
148
|
required: !!required,
|
|
138
149
|
default: defaultValue,
|
|
139
150
|
validator: _validator,
|
|
@@ -164,9 +175,14 @@ export const buildProps = <
|
|
|
164
175
|
: never
|
|
165
176
|
}
|
|
166
177
|
>(
|
|
167
|
-
|
|
178
|
+
props: O
|
|
168
179
|
) =>
|
|
169
|
-
|
|
180
|
+
fromPairs(
|
|
181
|
+
Object.entries(props).map(([key, option]) => [
|
|
182
|
+
key,
|
|
183
|
+
buildProp(option as any, key),
|
|
184
|
+
])
|
|
185
|
+
) as unknown as {
|
|
170
186
|
[K in keyof O]: O[K] extends { [propKey]: boolean }
|
|
171
187
|
? O[K]
|
|
172
188
|
: [O[K]] extends NativePropType
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { hasClass, addClass, removeClass } from '../dom'
|
|
2
|
+
|
|
3
|
+
const getClass = (el: Element) => {
|
|
4
|
+
if (!el) {
|
|
5
|
+
return ''
|
|
6
|
+
}
|
|
7
|
+
return el.getAttribute('class')
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
describe('Dom Utils', () => {
|
|
11
|
+
describe('hasClass', () => {
|
|
12
|
+
it('Judge whether a Element has a class', () => {
|
|
13
|
+
const div = document.createElement('div')
|
|
14
|
+
div.className = 'a b cc'
|
|
15
|
+
expect(hasClass(div, 'a')).toBe(true)
|
|
16
|
+
expect(hasClass(div, 'ab')).toBe(false)
|
|
17
|
+
try {
|
|
18
|
+
expect(hasClass(div, 'a b'))
|
|
19
|
+
} catch (error: any) {
|
|
20
|
+
expect(error.message).toEqual('className should not contain space.')
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const canvas = document.createElement('canvas')
|
|
24
|
+
canvas.className = 'canvas-a canvas-b cc'
|
|
25
|
+
expect(hasClass(canvas, 'a')).toBe(false)
|
|
26
|
+
expect(hasClass(canvas, 'canvas-a')).toBe(true)
|
|
27
|
+
// remove classList
|
|
28
|
+
canvas.setAttribute('classList', '')
|
|
29
|
+
expect(hasClass(canvas, 'b')).toBe(false)
|
|
30
|
+
expect(hasClass(canvas, 'canvas-b')).toBe(true)
|
|
31
|
+
|
|
32
|
+
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
33
|
+
svg.setAttribute('class', 'svg-a svg-b')
|
|
34
|
+
expect(hasClass(svg, 'a')).toBe(false)
|
|
35
|
+
expect(hasClass(svg, 'svg-a')).toBe(true)
|
|
36
|
+
// remove classList
|
|
37
|
+
svg.setAttribute('classList', '')
|
|
38
|
+
expect(hasClass(svg, 'b')).toBe(false)
|
|
39
|
+
expect(hasClass(svg, 'svg-b')).toBe(true)
|
|
40
|
+
|
|
41
|
+
const path = document.createElementNS(
|
|
42
|
+
'http://www.w3.org/2000/svg',
|
|
43
|
+
'path'
|
|
44
|
+
)
|
|
45
|
+
path.setAttribute('class', 'path-a path-b')
|
|
46
|
+
expect(hasClass(path, 'a')).toBe(false)
|
|
47
|
+
expect(hasClass(path, 'path-a')).toBe(true)
|
|
48
|
+
// remove classList
|
|
49
|
+
path.setAttribute('classList', '')
|
|
50
|
+
expect(hasClass(path, 'b')).toBe(false)
|
|
51
|
+
expect(hasClass(path, 'path-b')).toBe(true)
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
describe('addClass', () => {
|
|
56
|
+
it('Add class to element', () => {
|
|
57
|
+
const div = document.createElement('div')
|
|
58
|
+
addClass(div, 'div-abc abc')
|
|
59
|
+
expect(hasClass(div, 'abc')).toBe(true)
|
|
60
|
+
expect(hasClass(div, 'div-abc')).toBe(true)
|
|
61
|
+
expect(hasClass(div, 'div')).toBe(false)
|
|
62
|
+
addClass(div, 'abc')
|
|
63
|
+
expect(getClass(div)).toEqual('div-abc abc')
|
|
64
|
+
// remove classList
|
|
65
|
+
div.setAttribute('classList', '')
|
|
66
|
+
addClass(div, 'div-box con')
|
|
67
|
+
expect(hasClass(div, 'con')).toBe(true)
|
|
68
|
+
expect(hasClass(div, 'div-box')).toBe(true)
|
|
69
|
+
expect(hasClass(div, 'box')).toBe(false)
|
|
70
|
+
addClass(div, 'con')
|
|
71
|
+
expect(getClass(div)).toEqual('div-abc abc div-box con')
|
|
72
|
+
|
|
73
|
+
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
74
|
+
addClass(svg, 'svg-abc svg')
|
|
75
|
+
expect(hasClass(svg, 'svg')).toBe(true)
|
|
76
|
+
expect(hasClass(svg, 'svg-abc')).toBe(true)
|
|
77
|
+
expect(hasClass(svg, 'abc')).toBe(false)
|
|
78
|
+
expect(hasClass(svg, 'sv')).toBe(false)
|
|
79
|
+
addClass(svg, 'svg')
|
|
80
|
+
expect(getClass(svg)).toEqual('svg-abc svg')
|
|
81
|
+
addClass(svg, 'svg-aa space')
|
|
82
|
+
expect(getClass(svg)).toEqual('svg-abc svg svg-aa space')
|
|
83
|
+
// remove classList
|
|
84
|
+
svg.setAttribute('classList', '')
|
|
85
|
+
addClass(svg, 'svg-abc-a svg-b')
|
|
86
|
+
expect(hasClass(svg, 'svg')).toBe(true)
|
|
87
|
+
expect(hasClass(svg, 'svg-abc')).toBe(true)
|
|
88
|
+
expect(hasClass(svg, 'abc')).toBe(false)
|
|
89
|
+
expect(hasClass(svg, 'sv')).toBe(false)
|
|
90
|
+
expect(hasClass(svg, 'svg-abc-a')).toBe(true)
|
|
91
|
+
expect(hasClass(svg, 'svg-b')).toBe(true)
|
|
92
|
+
expect(hasClass(svg, 'a')).toBe(false)
|
|
93
|
+
|
|
94
|
+
const path = document.createElementNS(
|
|
95
|
+
'http://www.w3.org/2000/svg',
|
|
96
|
+
'path'
|
|
97
|
+
)
|
|
98
|
+
addClass(path, 'path-abc path')
|
|
99
|
+
expect(hasClass(path, 'path')).toBe(true)
|
|
100
|
+
expect(hasClass(path, 'path-abc')).toBe(true)
|
|
101
|
+
expect(hasClass(path, 'abc')).toBe(false)
|
|
102
|
+
expect(hasClass(path, 'pa')).toBe(false)
|
|
103
|
+
addClass(path, 'path')
|
|
104
|
+
expect(getClass(path)).toEqual('path-abc path')
|
|
105
|
+
// remove classList
|
|
106
|
+
path.setAttribute('classList', '')
|
|
107
|
+
expect(hasClass(path, 'path')).toBe(true)
|
|
108
|
+
expect(hasClass(path, 'path-abc')).toBe(true)
|
|
109
|
+
expect(hasClass(path, 'abc')).toBe(false)
|
|
110
|
+
expect(hasClass(path, 'pa')).toBe(false)
|
|
111
|
+
})
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
describe('removeClass', () => {
|
|
115
|
+
it('Remove class on element', () => {
|
|
116
|
+
const div = document.createElement('div')
|
|
117
|
+
addClass(div, 'div-abc abc ab bb cc')
|
|
118
|
+
|
|
119
|
+
removeClass(div, 'abc')
|
|
120
|
+
expect(hasClass(div, 'abc')).toBe(false)
|
|
121
|
+
|
|
122
|
+
expect(hasClass(div, 'bb')).toBe(true)
|
|
123
|
+
expect(hasClass(div, 'cc')).toBe(true)
|
|
124
|
+
|
|
125
|
+
removeClass(div, 'bb cc')
|
|
126
|
+
expect(hasClass(div, 'bb')).toBe(false)
|
|
127
|
+
expect(hasClass(div, 'cc')).toBe(false)
|
|
128
|
+
expect(getClass(div)).toEqual('div-abc ab')
|
|
129
|
+
|
|
130
|
+
// remove classList
|
|
131
|
+
div.setAttribute('classList', '')
|
|
132
|
+
addClass(div, 'div-box con')
|
|
133
|
+
removeClass(div, 'div-box con')
|
|
134
|
+
expect(hasClass(div, 'con')).toBe(false)
|
|
135
|
+
expect(hasClass(div, 'div-box')).toBe(false)
|
|
136
|
+
expect(getClass(div)).toBe('div-abc ab')
|
|
137
|
+
|
|
138
|
+
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')
|
|
139
|
+
addClass(svg, 'svg-abc svg')
|
|
140
|
+
removeClass(svg, 'svg-abc svg')
|
|
141
|
+
expect(hasClass(svg, 'svg-abc')).toBe(false)
|
|
142
|
+
expect(hasClass(svg, 'abc')).toBe(false)
|
|
143
|
+
expect(getClass(svg)).toEqual('')
|
|
144
|
+
// remove classList
|
|
145
|
+
svg.setAttribute('classList', '')
|
|
146
|
+
addClass(svg, 'svg-abc-a svg-b')
|
|
147
|
+
expect(hasClass(svg, 'svg')).toBe(false)
|
|
148
|
+
expect(hasClass(svg, 'svg-abc')).toBe(false)
|
|
149
|
+
expect(hasClass(svg, 'abc')).toBe(false)
|
|
150
|
+
expect(hasClass(svg, 'svg-abc-a')).toBe(true)
|
|
151
|
+
expect(hasClass(svg, 'svg-b')).toBe(true)
|
|
152
|
+
removeClass(svg, 'svg')
|
|
153
|
+
expect(getClass(svg)).toEqual('svg-abc-a svg-b')
|
|
154
|
+
removeClass(svg, 'svg-abc-a')
|
|
155
|
+
expect(hasClass(svg, 'svg-abc-a')).toBe(false)
|
|
156
|
+
expect(hasClass(svg, 'svg-b')).toBe(true)
|
|
157
|
+
|
|
158
|
+
const path = document.createElementNS(
|
|
159
|
+
'http://www.w3.org/2000/svg',
|
|
160
|
+
'path'
|
|
161
|
+
)
|
|
162
|
+
addClass(path, 'path-abc path')
|
|
163
|
+
expect(hasClass(path, 'path')).toBe(true)
|
|
164
|
+
expect(hasClass(path, 'path-abc')).toBe(true)
|
|
165
|
+
expect(hasClass(path, 'abc')).toBe(false)
|
|
166
|
+
expect(hasClass(path, 'pa')).toBe(false)
|
|
167
|
+
removeClass(path, 'path')
|
|
168
|
+
expect(hasClass(path, 'path')).toBe(false)
|
|
169
|
+
expect(hasClass(path, 'path-abc')).toBe(true)
|
|
170
|
+
// remove classList
|
|
171
|
+
path.setAttribute('classList', '')
|
|
172
|
+
addClass(path, 'path path-1 path2')
|
|
173
|
+
expect(hasClass(path, 'path')).toBe(true)
|
|
174
|
+
expect(hasClass(path, 'path-1')).toBe(true)
|
|
175
|
+
expect(getClass(path)).toEqual('path-abc path path-1 path2')
|
|
176
|
+
removeClass(path, 'path')
|
|
177
|
+
expect(hasClass(path, 'path')).toBe(false)
|
|
178
|
+
expect(getClass(path)).toEqual('path-abc path-1 path2')
|
|
179
|
+
removeClass(path, 'path-abc path-1 path2')
|
|
180
|
+
expect(getClass(path)).toEqual('')
|
|
181
|
+
})
|
|
182
|
+
})
|
|
183
|
+
})
|
package/packages/utils/util.ts
CHANGED
|
@@ -14,10 +14,10 @@ import {
|
|
|
14
14
|
} from '@vue/shared'
|
|
15
15
|
import isEqualWith from 'lodash/isEqualWith'
|
|
16
16
|
import isServer from './isServer'
|
|
17
|
-
import { debugWarn } from './error'
|
|
17
|
+
import { debugWarn, throwError } from './error'
|
|
18
18
|
|
|
19
19
|
import type { ComponentPublicInstance, CSSProperties, Ref } from 'vue'
|
|
20
|
-
import type {
|
|
20
|
+
import type { TimeoutHandle, Nullable } from './types'
|
|
21
21
|
|
|
22
22
|
export const SCOPE = 'Util'
|
|
23
23
|
|
|
@@ -68,7 +68,7 @@ export function getPropByPath(
|
|
|
68
68
|
tempObj = tempObj[key]
|
|
69
69
|
} else {
|
|
70
70
|
if (strict) {
|
|
71
|
-
|
|
71
|
+
throwError(SCOPE, 'Please transfer a valid prop path to form item!')
|
|
72
72
|
}
|
|
73
73
|
break
|
|
74
74
|
}
|
|
@@ -148,18 +148,17 @@ export const isBool = (val: unknown): val is boolean => typeof val === 'boolean'
|
|
|
148
148
|
export const isNumber = (val: unknown): val is number => typeof val === 'number'
|
|
149
149
|
export const isHTMLElement = (val: unknown) => toRawType(val).startsWith('HTML')
|
|
150
150
|
|
|
151
|
-
export function rafThrottle<T extends
|
|
152
|
-
fn: T
|
|
153
|
-
): AnyFunction<void> {
|
|
151
|
+
export function rafThrottle<T extends (...args: any) => any>(fn: T): T {
|
|
154
152
|
let locked = false
|
|
155
|
-
return function (...args: any[]) {
|
|
153
|
+
return function (this: ThisParameterType<T>, ...args: any[]) {
|
|
156
154
|
if (locked) return
|
|
157
155
|
locked = true
|
|
156
|
+
|
|
158
157
|
window.requestAnimationFrame(() => {
|
|
159
|
-
|
|
158
|
+
Reflect.apply(fn, this, args)
|
|
160
159
|
locked = false
|
|
161
160
|
})
|
|
162
|
-
}
|
|
161
|
+
} as T
|
|
163
162
|
}
|
|
164
163
|
|
|
165
164
|
export const clearTimer = (timer: Ref<TimeoutHandle>) => {
|
package/tags.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"el-affix":{"attributes":["offset","position","target","z-index","change","scroll"],"description":"Fix the element to a specific visible area.\n\n[Docs](https://element-plus.org/en-US/component/affix.html#affix)"},"el-alert":{"attributes":["title","type","description","closable","center","close-text","show-icon","effect","close"],"description":"Displays important alert messages.\n\n[Docs](https://element-plus.org/en-US/component/alert.html#alert)"},"el-avatar":{"attributes":["icon","size","shape","src","src-set","alt","fit","error"],"description":"Avatars can be used to represent people or objects. It supports images, Icons, or characters.\n\n[Docs](https://element-plus.org/en-US/component/avatar.html#avatar)"},"el-backtop":{"attributes":["target","visibility-height","right","bottom","click"],"description":"A button to back to top\n\n[Docs](https://element-plus.org/en-US/component/backtop.html#backtop)"},"el-badge":{"attributes":["value","max","is-dot","hidden","type"],"description":"A number or status mark on buttons and icons.\n\n[Docs](https://element-plus.org/en-US/component/badge.html#badge)"},"el-breadcrumb":{"attributes":["separator","separator-class"],"subtags":["el-breadcrumb-item"],"description":"Displays the location of the current page, making it easier to browser back.\n\n[Docs](https://element-plus.org/en-US/component/breadcrumb.html#breadcrumb)"},"el-breadcrumb-item":{"attributes":["to","replace"],"description":"[Docs](https://element-plus.org/en-US/component/breadcrumb.html#breadcrumb-item)"},"el-button":{"attributes":["size","type","plain","round","circle","loading","disabled","icon","autofocus","native-type"],"description":"Commonly used button.\n\n[Docs](https://element-plus.org/en-US/component/button.html#button)"},"el-button-group":{"attributes":["size"],"subtags":["el-button"],"description":"[Docs](https://element-plus.org/en-US/component/button.html#button-group)"},"el-calendar":{"attributes":["model-value","range"],"description":"Display date.\n\n[Docs](https://element-plus.org/en-US/component/calendar.html#calendar)"},"el-card":{"attributes":["header","body-style","shadow"],"description":"Integrate information in a card container.\n\n[Docs](https://element-plus.org/en-US/component/card.html#card)"},"el-carousel":{"attributes":["height","initial-index","trigger","autoplay","interval","indicator-position","arrow","type","loop","direction","pause-on-hover","change"],"subtags":["el-carousel-item"],"description":"Loop a series of images or texts in a limited space\n\n[Docs](https://element-plus.org/en-US/component/carousel.html#carousel)"},"el-carousel-item":{"attributes":["name","label"],"description":"[Docs](https://element-plus.org/en-US/component/carousel.html#carousel-item)"},"el-cascader":{"attributes":["model-value","options","props","size","placeholder","disabled","clearable","show-all-levels","collapse-tags","separator","filterable","filter-method","debounce","before-filter","popper-class","popper-append-to-body","change","expand-change","blur","focus","visible-change","remove-tag"],"description":"If the options have a clear hierarchical structure, Cascader can be used to view and select them.\n\n[Docs](https://element-plus.org/en-US/component/cascader.html#cascader)"},"el-cascader-panel":{"attributes":["model-value","options","props","change","expand-change"],"description":"[Docs](https://element-plus.org/en-US/component/cascader.html#cascaderpanel)"},"el-checkbox":{"attributes":["model-value","label","true-label","false-label","disabled","border","size","name","checked","indeterminate","change"],"description":"A group of options for multiple choices.\n\n[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox)"},"el-checkbox-group":{"attributes":["model-value","size","disabled","min","max","text-color","fill","change"],"subtags":["el-checkbox","el-checkbox-button"],"description":"[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox-group)"},"el-checkbox-button":{"attributes":["label","true-label","false-label","disabled","name","checked"],"description":"[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox-button)"},"el-collapse":{"attributes":["model-value","accordion","change"],"subtags":["el-collapse-item"],"description":"Use Collapse to store contents.\n\n[Docs](https://element-plus.org/en-US/component/collapse.html#collapse)"},"el-collapse-item":{"attributes":["name","title","disabled"],"description":"[Docs](https://element-plus.org/en-US/component/collapse.html#collapse-item)"},"el-color-picker":{"attributes":["model-value","disabled","size","show-alpha","color-format","popper-class","predefine","change","active-change"],"description":"ColorPicker is a color selector supporting multiple color formats.\n\n[Docs](https://element-plus.org/en-US/component/color-picker.html#colorpicker)"},"el-config-provider":{"description":"[Docs](https://element-plus.org/en-US/component/config-provider.html#configprovider)"},"el-container":{"attributes":["direction"],"subtags":["el-container","el-header","el-aside","el-main","el-footer"],"description":"Container components for scaffolding basic structure of the page:\n\n[Docs](https://element-plus.org/en-US/component/container.html#container)"},"el-header":{"attributes":["height"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#header)"},"el-aside":{"attributes":["width"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#aside)"},"el-main":{"description":"[Docs](https://element-plus.org/en-US/component/container.html#main)"},"el-footer":{"attributes":["height"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#footer)"},"el-date-picker":{"attributes":["model-value","readonly","disabled","size","editable","clearable","placeholder","start-placeholder","end-placeholder","type","format","popper-class","range-separator","default-value","default-time","value-format","name","unlink-panels","prefix-icon","clear-icon","validate-event","disabled-date","shortcuts","change","blur","focus","calendar-change"],"description":"Use Date Picker for date input.\n\n[Docs](https://element-plus.org/en-US/component/date-picker.html#datepicker)"},"el-descriptions":{"attributes":["border","column","direction","size","title","extra"],"subtags":["el-descriptions-item"],"description":"Display multiple fields in list form.\n\n[Docs](https://element-plus.org/en-US/component/descriptions.html#descriptions)"},"el-descriptions-item":{"attributes":["label","span","width","min-width","align","label-align","class-name","label-class-name"],"description":"[Docs](https://element-plus.org/en-US/component/descriptions.html#descriptions-item)"},"el-dialog":{"attributes":["model-value","title","width","fullscreen","top","modal","append-to-body","lock-scroll","custom-class","open-delay","close-delay","close-on-click-modal","close-on-press-escape","show-close","before-close","center","destroy-on-close","open","opened","close","closed"],"description":"Informs users while preserving the current page state.\n\n[Docs](https://element-plus.org/en-US/component/dialog.html#dialog)"},"el-divider":{"attributes":["direction","content-position"],"description":"The dividing line that separates the content.\n\n[Docs](https://element-plus.org/en-US/component/divider.html#divider)"},"el-drawer":{"attributes":["model-value","append-to-body","lock-scroll","before-close","close-on-click-modal","close-on-press-escape","open-delay","close-delay","custom-class","destroy-on-close","modal","direction","show-close","size","title","with-header","modal-class","z-index","open","opened","close","closed"],"description":"Sometimes, `Dialog` does not always satisfy our requirements, let's say you have a massive form, or you need space to display something like `terms & conditions`, `Drawer` has almost identical API with `Dialog`, but it introduces different user experience.\n\n[Docs](https://element-plus.org/en-US/component/drawer.html#drawer)"},"el-dropdown":{"attributes":["type","size","max-height","split-button","disabled","placement","trigger","hide-on-click","show-timeout","hide-timeout","tabindex","click","command","visible-change"],"subtags":["el-dropdown-menu"],"description":"Toggleable menu for displaying lists of links and actions.\n\n[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown)"},"el-dropdown-menu":{"subtags":["el-dropdown-item"],"description":"[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown-menu)"},"el-dropdown-item":{"attributes":["command","disabled","divided","icon"],"description":"[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown-item)"},"el-empty":{"attributes":["image","image-size","description"],"description":"Placeholder hints for empty states.\n\n[Docs](https://element-plus.org/en-US/component/empty.html#empty)"},"el-form":{"attributes":["model","rules","inline","label-position","label-width","label-suffix","hide-required-asterisk","show-message","inline-message","status-icon","validate-on-rule-change","size","disabled","validate"],"subtags":["el-form-item"],"description":"Form consists of `input`, `radio`, `select`, `checkbox` and so on. With form, you can collect, verify and submit data.\n\n[Docs](https://element-plus.org/en-US/component/form.html#form)"},"el-form-item":{"attributes":["prop","label","label-width","required","rules","error","show-message","inline-message","size"],"description":"[Docs](https://element-plus.org/en-US/component/form.html#form-item)"},"el-icon":{"attributes":["color","size"],"description":"Element Plus provides a set of common icons.\n\n[Docs](https://element-plus.org/en-US/component/icon.html#icon)"},"el-image":{"attributes":["alt","fit","hide-on-click-modal","lazy","preview-src-list","referrer-policy","src","scroll-container","z-index","load","error"],"description":"Besides the native features of img, support lazy load, custom placeholder and load failure, etc.\n\n[Docs](https://element-plus.org/en-US/component/image.html#image)"},"el-image-viewer":{"attributes":["url-list","z-index","initial-index","infinite","hide-on-click-modal","append-to-body"],"description":"[Docs](https://element-plus.org/en-US/component/image.html#imageviewer)"},"el-input-number":{"attributes":["model-value","min","max","step","step-strictly","precision","size","disabled","controls","controls-position","name","label","placeholder","change","blur","focus"],"description":"Input numerical values with a customizable range.\n\n[Docs](https://element-plus.org/en-US/component/input-number.html#input-number)"},"el-input":{"attributes":["type","model-value","maxlength","minlength","show-word-limit","placeholder","clearable","show-password","disabled","size","prefix-icon","suffix-icon","rows","autosize","autocomplete","name","readonly","max","min","step","resize","autofocus","form","label","tabindex","validate-event","input-style","blur","focus","change","input","clear"],"description":"Input data using mouse or keyboard.\n\n[Docs](https://element-plus.org/en-US/component/input.html#input)"},"el-autocomplete":{"attributes":["placeholder","clearable","disabled","value-key","icon","model-value","debounce","placement","fetch-suggestions","popper-class","trigger-on-focus","name","select-when-unmatched","label","prefix-icon","suffix-icon","hide-loading","popper-append-to-body","highlight-first-item","select","change"],"description":"You can get some recommended tips based on the current input.\n\n[Docs](https://element-plus.org/en-US/component/input.html#autocomplete)"},"el-row":{"attributes":["gutter","justify","align","tag"],"subtags":["el-col"],"description":"[Docs](https://element-plus.org/en-US/component/layout.html#row)"},"el-col":{"attributes":["span","offset","push","pull","xs","sm","md","lg","xl","tag"],"description":"[Docs](https://element-plus.org/en-US/component/layout.html#col)"},"el-link":{"attributes":["type","underline","disabled","href","icon"],"description":"Text hyperlink\n\n[Docs](https://element-plus.org/en-US/component/link.html#link)"},"el-menu":{"attributes":["mode","collapse","background-color","text-color","active-text-color","default-active","default-openeds","unique-opened","menu-trigger","router","collapse-transition","select","open","close"],"subtags":["el-sub-menu","el-menu-item","el-menu-item-group"],"description":"Menu that provides navigation for your website.\n\n[Docs](https://element-plus.org/en-US/component/menu.html#menu)"},"el-sub-menu":{"attributes":["index","popper-class","show-timeout","hide-timeout","disabled","popper-append-to-body"],"subtags":["el-sub-menu","el-menu-item","el-menu-item-group"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#submenu)"},"el-menu-item":{"attributes":["index","route","disabled","click"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#menu-item)"},"el-menu-item-group":{"attributes":["title"],"subtags":["el-menu-item"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#menu-item-group)"},"el-page-header":{"attributes":["icon","title","content","back"],"description":"If path of the page is simple, it is recommended to use PageHeader instead of the Breadcrumb.\n\n[Docs](https://element-plus.org/en-US/component/page-header.html#page-header)"},"el-pagination":{"attributes":["small","background","page-size","default-page-size","total","page-count","pager-count","current-page","default-current-page","layout","page-sizes","popper-class","prev-text","next-text","disabled","hide-on-single-page","size-change","current-change","prev-click","next-click"],"description":"If you have too much data to display in one page, use pagination.\n\n[Docs](https://element-plus.org/en-US/component/pagination.html#pagination)"},"el-popconfirm":{"attributes":["title","confirm-button-text","cancel-button-text","confirm-button-type","cancel-button-type","icon","icon-color","hide-icon","confirm","cancel"],"description":"A simple confirmation dialog of an element click action.\n\n[Docs](https://element-plus.org/en-US/component/popconfirm.html#popconfirm)"},"el-popover":{"attributes":["trigger","title","content","width","placement","disabled","visible","offset","transition","show-arrow","popper-options","popper-class","show-after","hide-after","auto-close","tabindex","show","after-enter","hide","after-leave"],"description":"[Docs](https://element-plus.org/en-US/component/popover.html#popover)"},"el-progress":{"attributes":["percentage","type","stroke-width","text-inside","status","indeterminate","duration","color","width","show-text","stroke-linecap","format"],"description":"Progress is used to show the progress of current operation, and inform the user the current status.\n\n[Docs](https://element-plus.org/en-US/component/progress.html#progress)"},"el-radio":{"attributes":["model-value","label","disabled","border","size","name","change"],"description":"Single selection among multiple options.\n\n[Docs](https://element-plus.org/en-US/component/radio.html#radio)"},"el-radio-group":{"attributes":["model-value","size","disabled","text-color","fill","change"],"subtags":["el-radio","el-radio-button"],"description":"[Docs](https://element-plus.org/en-US/component/radio.html#radio-group)"},"el-radio-button":{"attributes":["label","disabled","name"],"description":"[Docs](https://element-plus.org/en-US/component/radio.html#radio-button)"},"el-rate":{"attributes":["model-value","max","disabled","allow-half","low-threshold","high-threshold","colors","void-color","disabled-void-color","icon-classes","void-icon-class","disabled-void-icon-class","show-text","show-score","text-color","texts","score-template","change"],"description":"Used for rating\n\n[Docs](https://element-plus.org/en-US/component/rate.html#rate)"},"el-result":{"attributes":["title","sub-title","icon"],"description":"Used to give feedback on the result of user's operation or access exception.\n\n[Docs](https://element-plus.org/en-US/component/result.html#result)"},"el-scrollbar":{"attributes":["height","max-height","native","wrap-style","wrap-class","view-style","view-class","noresize","tag","always","min-size","scroll"],"description":"Used to replace the browser's native scrollbar.\n\n[Docs](https://element-plus.org/en-US/component/scrollbar.html#scrollbar)"},"el-select-v2":{"attributes":["change","visible-change","remove-tag","clear","blur","focus"],"description":"[Docs](https://element-plus.org/en-US/component/select-v2.html#selectv2)"},"el-select":{"attributes":["model-value","multiple","disabled","value-key","size","clearable","collapse-tags","multiple-limit","name","autocomplete","placeholder","filterable","allow-create","filter-method","remote","remote-method","loading","loading-text","no-match-text","no-data-text","popper-class","reserve-keyword","default-first-option","popper-append-to-body","automatic-dropdown","clear-icon","change","visible-change","remove-tag","clear","blur","focus"],"subtags":["el-option-group","el-option"],"description":"When there are plenty of options, use a drop-down menu to display and select desired ones.\n\n[Docs](https://element-plus.org/en-US/component/select.html#select)"},"el-option-group":{"attributes":["label","disabled"],"subtags":["el-option"],"description":"[Docs](https://element-plus.org/en-US/component/select.html#option-group)"},"el-option":{"attributes":["value","label","disabled"],"description":"[Docs](https://element-plus.org/en-US/component/select.html#option)"},"el-skeleton":{"attributes":["animated","count","loading","rows","throttle"],"description":"When loading data, and you need a rich experience for visual and interactions for your end users, you can choose `skeleton`.\n\n[Docs](https://element-plus.org/en-US/component/skeleton.html#skeleton)"},"el-skeleton-item":{"attributes":["variant"],"description":"[Docs](https://element-plus.org/en-US/component/skeleton.html#skeleton-item)"},"el-slider":{"attributes":["model-value","min","max","disabled","step","show-input","show-input-controls","input-size","show-stops","show-tooltip","format-tooltip","range","vertical","height","label","debounce","tooltip-class","marks","change","input"],"description":"Drag the slider within a fixed range.\n\n[Docs](https://element-plus.org/en-US/component/slider.html#slider)"},"el-space":{"attributes":["alignment","class","direction","prefix-cls","style","spacer","size","wrap","fill","fill-ratio"],"description":"Even though we have [Divider]\n\n[Docs](https://element-plus.org/en-US/component/space.html#space)"},"el-steps":{"attributes":["space","direction","active","process-status","finish-status","align-center","simple"],"subtags":["el-step"],"description":"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.\n\n[Docs](https://element-plus.org/en-US/component/steps.html#steps)"},"el-step":{"attributes":["title","description","icon","status"],"description":"[Docs](https://element-plus.org/en-US/component/steps.html#step)"},"el-switch":{"attributes":["model-value","disabled","loading","width","active-icon-class","inactive-icon-class","active-text","inactive-text","active-value","inactive-value","active-color","inactive-color","border-color","name","validate-event","before-change","change"],"description":"Switch is used for switching between two opposing states.\n\n[Docs](https://element-plus.org/en-US/component/switch.html#switch)"},"el-table":{"attributes":["data","height","max-height","stripe","border","size","fit","show-header","highlight-current-row","current-row-key","row-class-name","row-style","cell-class-name","cell-style","header-row-class-name","header-row-style","header-cell-class-name","header-cell-style","row-key","empty-text","default-expand-all","expand-row-keys","default-sort","tooltip-effect","show-summary","sum-text","summary-method","span-method","select-on-indeterminate","indent","lazy","load","tree-props","select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-click","cell-dblclick","cell-contextmenu","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],"subtags":["el-table-column"],"description":"Display multiple data with similar format. You can sort, filter, compare your data in a table.\n\n[Docs](https://element-plus.org/en-US/component/table.html#table)"},"el-table-column":{"attributes":["type","index","label","column-key","prop","width","min-width","fixed","render-header","sortable","sort-method","sort-by","sort-orders","resizable","formatter","show-overflow-tooltip","align","header-align","class-name","label-class-name","selectable","reserve-selection","filters","filter-placement","filter-multiple","filter-method","filtered-value"],"description":"[Docs](https://element-plus.org/en-US/component/table.html#table-column)"},"el-tabs":{"attributes":["model-value","type","closable","addable","editable","tab-position","stretch","before-leave","tab-click","tab-remove","tab-add","edit"],"subtags":["el-tab-pane"],"description":"Divide data collections which are related yet belong to different types.\n\n[Docs](https://element-plus.org/en-US/component/tabs.html#tabs)"},"el-tab-pane":{"attributes":["label","disabled","name","closable","lazy"],"description":"[Docs](https://element-plus.org/en-US/component/tabs.html#tab-pane)"},"el-check-tag":{"attributes":["checked","change"],"description":"[Docs](https://element-plus.org/en-US/component/tag.html#checktag)"},"el-tag":{"attributes":["type","closable","disable-transitions","hit","color","size","effect","click","close"],"description":"Used for marking and selection.\n\n[Docs](https://element-plus.org/en-US/component/tag.html#tag)"},"el-time-picker":{"attributes":["model-value","readonly","disabled","editable","clearable","size","placeholder","start-placeholder","end-placeholder","is-range","arrow-control","align","popper-class","range-separator","format","default-value","name","prefix-icon","clear-icon","disabled-hours","disabled-minutes","disabled-seconds","change","blur","focus"],"description":"Use Time Picker for time input.\n\n[Docs](https://element-plus.org/en-US/component/time-picker.html#timepicker)"},"el-time-select":{"attributes":["model-value","disabled","editable","clearable","size","placeholder","name","prefix-icon","clear-icon","start","end","step","min-time","max-time","change","blur","focus"],"description":"Use Time Select for time input.\n\n[Docs](https://element-plus.org/en-US/component/time-select.html#timeselect)"},"el-timeline":{"subtags":["el-timeline-item"],"description":"Visually display timeline.\n\n[Docs](https://element-plus.org/en-US/component/timeline.html#timeline)"},"el-timeline-item":{"attributes":["timestamp","hide-timestamp","center","placement","type","color","size","icon","hollow"],"description":"[Docs](https://element-plus.org/en-US/component/timeline.html#timeline-item)"},"el-tooltip":{"attributes":["append-to-body","effect","content","placement","model-value","disabled","offset","transition","visible-arrow","popper-options","show-after","hide-after","auto-close","manual","popper-class","enterable","tabindex"],"description":"Display prompt information for mouse hover.\n\n[Docs](https://element-plus.org/en-US/component/tooltip.html#tooltip)"},"el-transfer":{"attributes":["model-value","data","filterable","filter-placeholder","filter-method","target-order","titles","button-texts","render-content","format","props","left-default-checked","right-default-checked","change","left-check-change","right-check-change"],"description":"[Docs](https://element-plus.org/en-US/component/transfer.html#transfer)"},"el-<el-badge-value=\"beta\">tree-v2-virtualized-tree</el-badge>":{"attributes":["data","empty-text","props","highlight-current","expand-on-click-node","check-on-click-node","default-expanded-keys","show-checkbox","check-strictly","default-checked-keys","current-node-key","filter-method","indent","icon","node-click","node-contextmenu","check-change","check","current-change","node-expand","node-collapse"],"description":"Tree view with blazing fast scrolling performance for any amount of data\n\n[Docs](https://element-plus.org/en-US/component/tree-v2.html#<elbadge-value=\"beta\">tree-v2-virtualized-tree</elbadge>)"},"el-tree":{"attributes":["data","empty-text","node-key","props","render-after-expand","load","render-content","highlight-current","default-expand-all","expand-on-click-node","check-on-click-node","auto-expand-parent","default-expanded-keys","show-checkbox","check-strictly","default-checked-keys","current-node-key","filter-node-method","accordion","indent","icon-class","lazy","draggable","allow-drag","allow-drop","node-click","node-contextmenu","check-change","check","current-change","node-expand","node-collapse","node-drag-start","node-drag-enter","node-drag-leave","node-drag-over","node-drag-end","node-drop"],"description":"Display a set of data with hierarchies.\n\n[Docs](https://element-plus.org/en-US/component/tree.html#tree)"},"el-upload":{"attributes":["action","headers","multiple","data","name","with-credentials","show-file-list","drag","accept","on-preview","on-remove","on-success","on-error","on-progress","on-change","before-upload","before-remove","thumbnail-mode","file-list","list-type","auto-upload","http-request","disabled","limit","on-exceed"],"description":"Upload files by clicking or drag-and-drop\n\n[Docs](https://element-plus.org/en-US/component/upload.html#upload)"}}
|
|
1
|
+
{"el-affix":{"attributes":["offset","position","target","z-index","change","scroll"],"description":"Fix the element to a specific visible area.\n\n[Docs](https://element-plus.org/en-US/component/affix.html#affix)"},"el-alert":{"attributes":["title","type","description","closable","center","close-text","show-icon","effect","close"],"description":"Displays important alert messages.\n\n[Docs](https://element-plus.org/en-US/component/alert.html#alert)"},"el-avatar":{"attributes":["icon","size","shape","src","src-set","alt","fit","error"],"description":"Avatars can be used to represent people or objects. It supports images, Icons, or characters.\n\n[Docs](https://element-plus.org/en-US/component/avatar.html#avatar)"},"el-backtop":{"attributes":["target","visibility-height","right","bottom","click"],"description":"A button to back to top\n\n[Docs](https://element-plus.org/en-US/component/backtop.html#backtop)"},"el-badge":{"attributes":["value","max","is-dot","hidden","type"],"description":"A number or status mark on buttons and icons.\n\n[Docs](https://element-plus.org/en-US/component/badge.html#badge)"},"el-breadcrumb":{"attributes":["separator","separator-class"],"subtags":["el-breadcrumb-item"],"description":"Displays the location of the current page, making it easier to browser back.\n\n[Docs](https://element-plus.org/en-US/component/breadcrumb.html#breadcrumb)"},"el-breadcrumb-item":{"attributes":["to","replace"],"description":"[Docs](https://element-plus.org/en-US/component/breadcrumb.html#breadcrumb-item)"},"el-button":{"attributes":["size","type","plain","round","circle","loading","disabled","icon","autofocus","native-type"],"description":"Commonly used button.\n\n[Docs](https://element-plus.org/en-US/component/button.html#button)"},"el-button-group":{"attributes":["size"],"subtags":["el-button"],"description":"[Docs](https://element-plus.org/en-US/component/button.html#button-group)"},"el-calendar":{"attributes":["model-value","range"],"description":"Display date.\n\n[Docs](https://element-plus.org/en-US/component/calendar.html#calendar)"},"el-card":{"attributes":["header","body-style","shadow"],"description":"Integrate information in a card container.\n\n[Docs](https://element-plus.org/en-US/component/card.html#card)"},"el-carousel":{"attributes":["height","initial-index","trigger","autoplay","interval","indicator-position","arrow","type","loop","direction","pause-on-hover","change"],"subtags":["el-carousel-item"],"description":"Loop a series of images or texts in a limited space\n\n[Docs](https://element-plus.org/en-US/component/carousel.html#carousel)"},"el-carousel-item":{"attributes":["name","label"],"description":"[Docs](https://element-plus.org/en-US/component/carousel.html#carousel-item)"},"el-cascader":{"attributes":["model-value","options","props","size","placeholder","disabled","clearable","show-all-levels","collapse-tags","separator","filterable","filter-method","debounce","before-filter","popper-class","popper-append-to-body","change","expand-change","blur","focus","visible-change","remove-tag"],"description":"If the options have a clear hierarchical structure, Cascader can be used to view and select them.\n\n[Docs](https://element-plus.org/en-US/component/cascader.html#cascader)"},"el-cascader-panel":{"attributes":["model-value","options","props","change","expand-change"],"description":"[Docs](https://element-plus.org/en-US/component/cascader.html#cascaderpanel)"},"el-checkbox":{"attributes":["model-value","label","true-label","false-label","disabled","border","size","name","checked","indeterminate","change"],"description":"A group of options for multiple choices.\n\n[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox)"},"el-checkbox-group":{"attributes":["model-value","size","disabled","min","max","text-color","fill","change"],"subtags":["el-checkbox","el-checkbox-button"],"description":"[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox-group)"},"el-checkbox-button":{"attributes":["label","true-label","false-label","disabled","name","checked"],"description":"[Docs](https://element-plus.org/en-US/component/checkbox.html#checkbox-button)"},"el-collapse":{"attributes":["model-value","accordion","change"],"subtags":["el-collapse-item"],"description":"Use Collapse to store contents.\n\n[Docs](https://element-plus.org/en-US/component/collapse.html#collapse)"},"el-collapse-item":{"attributes":["name","title","disabled"],"description":"[Docs](https://element-plus.org/en-US/component/collapse.html#collapse-item)"},"el-color-picker":{"attributes":["model-value","disabled","size","show-alpha","color-format","popper-class","predefine","change","active-change"],"description":"ColorPicker is a color selector supporting multiple color formats.\n\n[Docs](https://element-plus.org/en-US/component/color-picker.html#colorpicker)"},"el-config-provider":{"description":"[Docs](https://element-plus.org/en-US/component/config-provider.html#configprovider)"},"el-container":{"attributes":["direction"],"subtags":["el-container","el-header","el-aside","el-main","el-footer"],"description":"Container components for scaffolding basic structure of the page:\n\n[Docs](https://element-plus.org/en-US/component/container.html#container)"},"el-header":{"attributes":["height"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#header)"},"el-aside":{"attributes":["width"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#aside)"},"el-main":{"description":"[Docs](https://element-plus.org/en-US/component/container.html#main)"},"el-footer":{"attributes":["height"],"description":"[Docs](https://element-plus.org/en-US/component/container.html#footer)"},"el-date-picker":{"attributes":["model-value","readonly","disabled","size","editable","clearable","placeholder","start-placeholder","end-placeholder","type","format","popper-class","range-separator","default-value","default-time","value-format","name","unlink-panels","prefix-icon","clear-icon","validate-event","disabled-date","shortcuts","change","blur","focus","calendar-change"],"description":"Use Date Picker for date input.\n\n[Docs](https://element-plus.org/en-US/component/date-picker.html#datepicker)"},"el-descriptions":{"attributes":["border","column","direction","size","title","extra"],"subtags":["el-descriptions-item"],"description":"Display multiple fields in list form.\n\n[Docs](https://element-plus.org/en-US/component/descriptions.html#descriptions)"},"el-descriptions-item":{"attributes":["label","span","width","min-width","align","label-align","class-name","label-class-name"],"description":"[Docs](https://element-plus.org/en-US/component/descriptions.html#descriptions-item)"},"el-dialog":{"attributes":["model-value","title","width","fullscreen","top","modal","append-to-body","lock-scroll","custom-class","open-delay","close-delay","close-on-click-modal","close-on-press-escape","show-close","before-close","center","destroy-on-close","open","opened","close","closed"],"description":"Informs users while preserving the current page state.\n\n[Docs](https://element-plus.org/en-US/component/dialog.html#dialog)"},"el-divider":{"attributes":["direction","content-position"],"description":"The dividing line that separates the content.\n\n[Docs](https://element-plus.org/en-US/component/divider.html#divider)"},"el-drawer":{"attributes":["model-value","append-to-body","lock-scroll","before-close","close-on-click-modal","close-on-press-escape","open-delay","close-delay","custom-class","destroy-on-close","modal","direction","show-close","size","title","with-header","modal-class","z-index","open","opened","close","closed"],"description":"Sometimes, `Dialog` does not always satisfy our requirements, let's say you have a massive form, or you need space to display something like `terms & conditions`, `Drawer` has almost identical API with `Dialog`, but it introduces different user experience.\n\n[Docs](https://element-plus.org/en-US/component/drawer.html#drawer)"},"el-dropdown":{"attributes":["type","size","max-height","split-button","disabled","placement","trigger","hide-on-click","show-timeout","hide-timeout","tabindex","click","command","visible-change"],"subtags":["el-dropdown-menu"],"description":"Toggleable menu for displaying lists of links and actions.\n\n[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown)"},"el-dropdown-menu":{"subtags":["el-dropdown-item"],"description":"[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown-menu)"},"el-dropdown-item":{"attributes":["command","disabled","divided","icon"],"description":"[Docs](https://element-plus.org/en-US/component/dropdown.html#dropdown-item)"},"el-empty":{"attributes":["image","image-size","description"],"description":"Placeholder hints for empty states.\n\n[Docs](https://element-plus.org/en-US/component/empty.html#empty)"},"el-form":{"attributes":["model","rules","inline","label-position","label-width","label-suffix","hide-required-asterisk","show-message","inline-message","status-icon","validate-on-rule-change","size","disabled","validate"],"subtags":["el-form-item"],"description":"Form consists of `input`, `radio`, `select`, `checkbox` and so on. With form, you can collect, verify and submit data.\n\n[Docs](https://element-plus.org/en-US/component/form.html#form)"},"el-form-item":{"attributes":["prop","label","label-width","required","rules","error","show-message","inline-message","size"],"description":"[Docs](https://element-plus.org/en-US/component/form.html#form-item)"},"el-icon":{"attributes":["color","size"],"description":"Element Plus provides a set of common icons.\n\n[Docs](https://element-plus.org/en-US/component/icon.html#icon)"},"el-image":{"attributes":["alt","fit","hide-on-click-modal","lazy","preview-src-list","referrer-policy","src","scroll-container","z-index","load","error"],"description":"Besides the native features of img, support lazy load, custom placeholder and load failure, etc.\n\n[Docs](https://element-plus.org/en-US/component/image.html#image)"},"el-image-viewer":{"attributes":["url-list","z-index","initial-index","infinite","hide-on-click-modal","append-to-body"],"description":"[Docs](https://element-plus.org/en-US/component/image.html#imageviewer)"},"el-input-number":{"attributes":["model-value","min","max","step","step-strictly","precision","size","disabled","controls","controls-position","name","label","placeholder","change","blur","focus"],"description":"Input numerical values with a customizable range.\n\n[Docs](https://element-plus.org/en-US/component/input-number.html#input-number)"},"el-input":{"attributes":["type","model-value","maxlength","minlength","show-word-limit","placeholder","clearable","show-password","disabled","size","prefix-icon","suffix-icon","rows","autosize","autocomplete","name","readonly","max","min","step","resize","autofocus","form","label","tabindex","validate-event","input-style","blur","focus","change","input","clear"],"description":"Input data using mouse or keyboard.\n\n[Docs](https://element-plus.org/en-US/component/input.html#input)"},"el-autocomplete":{"attributes":["placeholder","clearable","disabled","value-key","icon","model-value","debounce","placement","fetch-suggestions","popper-class","trigger-on-focus","name","select-when-unmatched","label","prefix-icon","suffix-icon","hide-loading","popper-append-to-body","highlight-first-item","select","change"],"description":"You can get some recommended tips based on the current input.\n\n[Docs](https://element-plus.org/en-US/component/input.html#autocomplete)"},"el-row":{"attributes":["gutter","justify","align","tag"],"subtags":["el-col"],"description":"[Docs](https://element-plus.org/en-US/component/layout.html#row)"},"el-col":{"attributes":["span","offset","push","pull","xs","sm","md","lg","xl","tag"],"description":"[Docs](https://element-plus.org/en-US/component/layout.html#col)"},"el-link":{"attributes":["type","underline","disabled","href","icon"],"description":"Text hyperlink\n\n[Docs](https://element-plus.org/en-US/component/link.html#link)"},"el-menu":{"attributes":["mode","collapse","ellipsis","background-color","text-color","active-text-color","default-active","default-openeds","unique-opened","menu-trigger","router","collapse-transition","select","open","close"],"subtags":["el-sub-menu","el-menu-item","el-menu-item-group"],"description":"Menu that provides navigation for your website.\n\n[Docs](https://element-plus.org/en-US/component/menu.html#menu)"},"el-sub-menu":{"attributes":["index","popper-class","show-timeout","hide-timeout","disabled","popper-append-to-body"],"subtags":["el-sub-menu","el-menu-item","el-menu-item-group"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#submenu)"},"el-menu-item":{"attributes":["index","route","disabled","click"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#menu-item)"},"el-menu-item-group":{"attributes":["title"],"subtags":["el-menu-item"],"description":"[Docs](https://element-plus.org/en-US/component/menu.html#menu-item-group)"},"el-page-header":{"attributes":["icon","title","content","back"],"description":"If path of the page is simple, it is recommended to use PageHeader instead of the Breadcrumb.\n\n[Docs](https://element-plus.org/en-US/component/page-header.html#page-header)"},"el-pagination":{"attributes":["small","background","page-size","default-page-size","total","page-count","pager-count","current-page","default-current-page","layout","page-sizes","popper-class","prev-text","next-text","disabled","hide-on-single-page","size-change","current-change","prev-click","next-click"],"description":"If you have too much data to display in one page, use pagination.\n\n[Docs](https://element-plus.org/en-US/component/pagination.html#pagination)"},"el-popconfirm":{"attributes":["title","confirm-button-text","cancel-button-text","confirm-button-type","cancel-button-type","icon","icon-color","hide-icon","confirm","cancel"],"description":"A simple confirmation dialog of an element click action.\n\n[Docs](https://element-plus.org/en-US/component/popconfirm.html#popconfirm)"},"el-popover":{"attributes":["trigger","title","content","width","placement","disabled","visible","offset","transition","show-arrow","popper-options","popper-class","show-after","hide-after","auto-close","tabindex","show","after-enter","hide","after-leave"],"description":"[Docs](https://element-plus.org/en-US/component/popover.html#popover)"},"el-progress":{"attributes":["percentage","type","stroke-width","text-inside","status","indeterminate","duration","color","width","show-text","stroke-linecap","format"],"description":"Progress is used to show the progress of current operation, and inform the user the current status.\n\n[Docs](https://element-plus.org/en-US/component/progress.html#progress)"},"el-radio":{"attributes":["model-value","label","disabled","border","size","name","change"],"description":"Single selection among multiple options.\n\n[Docs](https://element-plus.org/en-US/component/radio.html#radio)"},"el-radio-group":{"attributes":["model-value","size","disabled","text-color","fill","change"],"subtags":["el-radio","el-radio-button"],"description":"[Docs](https://element-plus.org/en-US/component/radio.html#radio-group)"},"el-radio-button":{"attributes":["label","disabled","name"],"description":"[Docs](https://element-plus.org/en-US/component/radio.html#radio-button)"},"el-rate":{"attributes":["model-value","max","disabled","allow-half","low-threshold","high-threshold","colors","void-color","disabled-void-color","icon-classes","void-icon-class","disabled-void-icon-class","show-text","show-score","text-color","texts","score-template","change"],"description":"Used for rating\n\n[Docs](https://element-plus.org/en-US/component/rate.html#rate)"},"el-result":{"attributes":["title","sub-title","icon"],"description":"Used to give feedback on the result of user's operation or access exception.\n\n[Docs](https://element-plus.org/en-US/component/result.html#result)"},"el-scrollbar":{"attributes":["height","max-height","native","wrap-style","wrap-class","view-style","view-class","noresize","tag","always","min-size","scroll"],"description":"Used to replace the browser's native scrollbar.\n\n[Docs](https://element-plus.org/en-US/component/scrollbar.html#scrollbar)"},"el-select-v2":{"attributes":["change","visible-change","remove-tag","clear","blur","focus"],"description":"[Docs](https://element-plus.org/en-US/component/select-v2.html#selectv2)"},"el-select":{"attributes":["model-value","multiple","disabled","value-key","size","clearable","collapse-tags","multiple-limit","name","autocomplete","placeholder","filterable","allow-create","filter-method","remote","remote-method","loading","loading-text","no-match-text","no-data-text","popper-class","reserve-keyword","default-first-option","popper-append-to-body","automatic-dropdown","clear-icon","change","visible-change","remove-tag","clear","blur","focus"],"subtags":["el-option-group","el-option"],"description":"When there are plenty of options, use a drop-down menu to display and select desired ones.\n\n[Docs](https://element-plus.org/en-US/component/select.html#select)"},"el-option-group":{"attributes":["label","disabled"],"subtags":["el-option"],"description":"[Docs](https://element-plus.org/en-US/component/select.html#option-group)"},"el-option":{"attributes":["value","label","disabled"],"description":"[Docs](https://element-plus.org/en-US/component/select.html#option)"},"el-skeleton":{"attributes":["animated","count","loading","rows","throttle"],"description":"When loading data, and you need a rich experience for visual and interactions for your end users, you can choose `skeleton`.\n\n[Docs](https://element-plus.org/en-US/component/skeleton.html#skeleton)"},"el-skeleton-item":{"attributes":["variant"],"description":"[Docs](https://element-plus.org/en-US/component/skeleton.html#skeleton-item)"},"el-slider":{"attributes":["model-value","min","max","disabled","step","show-input","show-input-controls","input-size","show-stops","show-tooltip","format-tooltip","range","vertical","height","label","debounce","tooltip-class","marks","change","input"],"description":"Drag the slider within a fixed range.\n\n[Docs](https://element-plus.org/en-US/component/slider.html#slider)"},"el-space":{"attributes":["alignment","class","direction","prefix-cls","style","spacer","size","wrap","fill","fill-ratio"],"description":"Even though we have [Divider]\n\n[Docs](https://element-plus.org/en-US/component/space.html#space)"},"el-steps":{"attributes":["space","direction","active","process-status","finish-status","align-center","simple"],"subtags":["el-step"],"description":"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.\n\n[Docs](https://element-plus.org/en-US/component/steps.html#steps)"},"el-step":{"attributes":["title","description","icon","status"],"description":"[Docs](https://element-plus.org/en-US/component/steps.html#step)"},"el-switch":{"attributes":["model-value","disabled","loading","width","active-icon-class","inactive-icon-class","active-text","inactive-text","active-value","inactive-value","active-color","inactive-color","border-color","name","validate-event","before-change","change"],"description":"Switch is used for switching between two opposing states.\n\n[Docs](https://element-plus.org/en-US/component/switch.html#switch)"},"el-table":{"attributes":["data","height","max-height","stripe","border","size","fit","show-header","highlight-current-row","current-row-key","row-class-name","row-style","cell-class-name","cell-style","header-row-class-name","header-row-style","header-cell-class-name","header-cell-style","row-key","empty-text","default-expand-all","expand-row-keys","default-sort","tooltip-effect","show-summary","sum-text","summary-method","span-method","select-on-indeterminate","indent","lazy","load","tree-props","select","select-all","selection-change","cell-mouse-enter","cell-mouse-leave","cell-click","cell-dblclick","cell-contextmenu","row-click","row-contextmenu","row-dblclick","header-click","header-contextmenu","sort-change","filter-change","current-change","header-dragend","expand-change"],"subtags":["el-table-column"],"description":"Display multiple data with similar format. You can sort, filter, compare your data in a table.\n\n[Docs](https://element-plus.org/en-US/component/table.html#table)"},"el-table-column":{"attributes":["type","index","label","column-key","prop","width","min-width","fixed","render-header","sortable","sort-method","sort-by","sort-orders","resizable","formatter","show-overflow-tooltip","align","header-align","class-name","label-class-name","selectable","reserve-selection","filters","filter-placement","filter-multiple","filter-method","filtered-value"],"description":"[Docs](https://element-plus.org/en-US/component/table.html#table-column)"},"el-tabs":{"attributes":["model-value","type","closable","addable","editable","tab-position","stretch","before-leave","tab-click","tab-remove","tab-add","edit"],"subtags":["el-tab-pane"],"description":"Divide data collections which are related yet belong to different types.\n\n[Docs](https://element-plus.org/en-US/component/tabs.html#tabs)"},"el-tab-pane":{"attributes":["label","disabled","name","closable","lazy"],"description":"[Docs](https://element-plus.org/en-US/component/tabs.html#tab-pane)"},"el-check-tag":{"attributes":["checked","change"],"description":"[Docs](https://element-plus.org/en-US/component/tag.html#checktag)"},"el-tag":{"attributes":["type","closable","disable-transitions","hit","color","size","effect","click","close"],"description":"Used for marking and selection.\n\n[Docs](https://element-plus.org/en-US/component/tag.html#tag)"},"el-time-picker":{"attributes":["model-value","readonly","disabled","editable","clearable","size","placeholder","start-placeholder","end-placeholder","is-range","arrow-control","align","popper-class","range-separator","format","default-value","name","prefix-icon","clear-icon","disabled-hours","disabled-minutes","disabled-seconds","change","blur","focus"],"description":"Use Time Picker for time input.\n\n[Docs](https://element-plus.org/en-US/component/time-picker.html#timepicker)"},"el-time-select":{"attributes":["model-value","disabled","editable","clearable","size","placeholder","name","prefix-icon","clear-icon","start","end","step","min-time","max-time","change","blur","focus"],"description":"Use Time Select for time input.\n\n[Docs](https://element-plus.org/en-US/component/time-select.html#timeselect)"},"el-timeline":{"subtags":["el-timeline-item"],"description":"Visually display timeline.\n\n[Docs](https://element-plus.org/en-US/component/timeline.html#timeline)"},"el-timeline-item":{"attributes":["timestamp","hide-timestamp","center","placement","type","color","size","icon","hollow"],"description":"[Docs](https://element-plus.org/en-US/component/timeline.html#timeline-item)"},"el-tooltip":{"attributes":["append-to-body","effect","content","placement","model-value","disabled","offset","transition","visible-arrow","popper-options","show-after","hide-after","auto-close","manual","popper-class","enterable","tabindex"],"description":"Display prompt information for mouse hover.\n\n[Docs](https://element-plus.org/en-US/component/tooltip.html#tooltip)"},"el-transfer":{"attributes":["model-value","data","filterable","filter-placeholder","filter-method","target-order","titles","button-texts","render-content","format","props","left-default-checked","right-default-checked","change","left-check-change","right-check-change"],"description":"[Docs](https://element-plus.org/en-US/component/transfer.html#transfer)"},"el-<el-badge-value=\"beta\">tree-v2-virtualized-tree</el-badge>":{"attributes":["data","empty-text","props","highlight-current","expand-on-click-node","check-on-click-node","default-expanded-keys","show-checkbox","check-strictly","default-checked-keys","current-node-key","filter-method","indent","icon","node-click","node-contextmenu","check-change","check","current-change","node-expand","node-collapse"],"description":"Tree view with blazing fast scrolling performance for any amount of data\n\n[Docs](https://element-plus.org/en-US/component/tree-v2.html#<elbadge-value=\"beta\">tree-v2-virtualized-tree</elbadge>)"},"el-tree":{"attributes":["data","empty-text","node-key","props","render-after-expand","load","render-content","highlight-current","default-expand-all","expand-on-click-node","check-on-click-node","auto-expand-parent","default-expanded-keys","show-checkbox","check-strictly","default-checked-keys","current-node-key","filter-node-method","accordion","indent","icon-class","lazy","draggable","allow-drag","allow-drop","node-click","node-contextmenu","check-change","check","current-change","node-expand","node-collapse","node-drag-start","node-drag-enter","node-drag-leave","node-drag-over","node-drag-end","node-drop"],"description":"Display a set of data with hierarchies.\n\n[Docs](https://element-plus.org/en-US/component/tree.html#tree)"},"el-upload":{"attributes":["action","headers","multiple","data","name","with-credentials","show-file-list","drag","accept","on-preview","on-remove","on-success","on-error","on-progress","on-change","before-upload","before-remove","thumbnail-mode","file-list","list-type","auto-upload","http-request","disabled","limit","on-exceed"],"description":"Upload files by clicking or drag-and-drop\n\n[Docs](https://element-plus.org/en-US/component/upload.html#upload)"}}
|