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.
Files changed (259) hide show
  1. package/attributes.json +1 -1
  2. package/dist/index.css +1 -1
  3. package/dist/index.full.js +632 -1287
  4. package/dist/index.full.min.js +9 -10
  5. package/dist/index.full.min.js.map +1 -1
  6. package/dist/index.full.min.mjs +7 -8
  7. package/dist/index.full.min.mjs.map +1 -1
  8. package/dist/index.full.mjs +630 -1289
  9. package/es/component.d.ts +24 -2
  10. package/es/components/affix/index.js +1 -1
  11. package/es/components/autocomplete/index.d.ts +4 -4
  12. package/es/components/autocomplete/src/index.vue.d.ts +2 -2
  13. package/es/components/carousel/index.d.ts +2 -2
  14. package/es/components/carousel/src/main.vue.d.ts +2 -2
  15. package/es/components/cascader/index.d.ts +2 -2
  16. package/es/components/cascader/src/index.vue.d.ts +1 -1
  17. package/es/components/checkbox/index.d.ts +6 -6
  18. package/es/components/checkbox/src/checkbox-button.vue.d.ts +1 -1
  19. package/es/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  20. package/es/components/checkbox/src/checkbox.vue.d.ts +2 -2
  21. package/es/components/color-picker/index.d.ts +2 -2
  22. package/es/components/color-picker/src/components/alpha-slider.vue.d.ts +1 -1
  23. package/es/components/color-picker/src/components/hue-slider.vue.d.ts +1 -1
  24. package/es/components/color-picker/src/index.vue.d.ts +1 -1
  25. package/es/components/descriptions/index.d.ts +8 -8
  26. package/es/components/descriptions/src/description-item.d.ts +2 -2
  27. package/es/components/descriptions/src/descriptions-cell.d.ts +1 -1
  28. package/es/components/descriptions/src/index.vue.d.ts +4 -4
  29. package/es/components/drawer/index.d.ts +6 -6
  30. package/es/components/drawer/src/index.vue.d.ts +3 -3
  31. package/es/components/dropdown/index.d.ts +2 -2
  32. package/es/components/dropdown/src/dropdown.vue.d.ts +2 -2
  33. package/es/components/form/index.js +2 -2
  34. package/es/components/icon/index.d.ts +1 -1
  35. package/es/components/icon/src/icon.vue.d.ts +1 -1
  36. package/es/components/image/index.d.ts +3 -3
  37. package/es/components/image/index.js +2 -3
  38. package/es/components/image/src/image.d.ts +1 -1
  39. package/es/components/image/src/image.vue.d.ts +3 -3
  40. package/es/components/image-viewer/index.d.ts +28 -104
  41. package/es/components/image-viewer/index.js +60 -61
  42. package/es/components/image-viewer/src/image-viewer.d.ts +14 -0
  43. package/es/components/image-viewer/src/image-viewer.vue.d.ts +55 -0
  44. package/es/components/input/index.d.ts +116 -360
  45. package/es/components/input/index.js +216 -209
  46. package/es/components/input/src/calc-textarea-height.d.ts +6 -0
  47. package/es/components/input/src/input.d.ts +46 -0
  48. package/es/components/input/src/input.vue.d.ts +162 -0
  49. package/es/components/input-number/index.d.ts +2 -2
  50. package/es/components/input-number/src/index.vue.d.ts +1 -1
  51. package/es/components/menu/index.d.ts +7 -3
  52. package/es/components/menu/index.js +8 -3
  53. package/es/components/menu/src/menu.d.ts +8 -3
  54. package/es/components/pagination/index.d.ts +2 -2
  55. package/es/components/pagination/src/pagination.d.ts +2 -2
  56. package/es/components/progress/index.js +0 -1
  57. package/es/components/radio/index.d.ts +2 -2
  58. package/es/components/radio/src/radio.vue.d.ts +2 -2
  59. package/es/components/rate/index.js +1 -1
  60. package/es/components/row/index.d.ts +4 -4
  61. package/es/components/row/src/row.d.ts +2 -2
  62. package/es/components/scrollbar/index.d.ts +4 -4
  63. package/es/components/scrollbar/src/index.vue.d.ts +2 -2
  64. package/es/components/select/index.d.ts +3 -3
  65. package/es/components/select/src/select.vue.d.ts +3 -3
  66. package/es/components/select-v2/index.d.ts +6 -6
  67. package/es/components/select-v2/index.js +2 -0
  68. package/es/components/select-v2/src/select.vue.d.ts +3 -3
  69. package/es/components/slider/index.d.ts +4 -4
  70. package/es/components/slider/src/button.vue.d.ts +2 -2
  71. package/es/components/slider/src/index.vue.d.ts +2 -2
  72. package/es/components/space/index.d.ts +2 -2
  73. package/es/components/space/src/space.d.ts +2 -2
  74. package/es/components/steps/index.d.ts +2 -2
  75. package/es/components/steps/src/index.vue.d.ts +2 -2
  76. package/es/components/table/index.d.ts +4 -4
  77. package/es/components/table/index.js +17 -9
  78. package/es/components/table/src/table.vue.d.ts +4 -4
  79. package/es/components/tag/index.d.ts +1 -1
  80. package/es/components/tag/src/tag.vue.d.ts +1 -1
  81. package/es/components/timeline/index.d.ts +4 -4
  82. package/es/components/timeline/src/item.vue.d.ts +2 -2
  83. package/es/components/tree/index.js +1 -1
  84. package/es/components/tree-v2/index.d.ts +1 -1
  85. package/es/components/tree-v2/index.js +2 -24
  86. package/es/components/tree-v2/src/tree.vue.d.ts +1 -1
  87. package/es/components/upload/index.d.ts +4 -4
  88. package/es/components/upload/src/index.vue.d.ts +2 -2
  89. package/es/components/upload/src/upload.vue.d.ts +2 -2
  90. package/es/components/virtual-list/src/builders/build-grid.d.ts +3 -3
  91. package/es/components/virtual-list/src/builders/build-list.d.ts +4 -4
  92. package/es/components/virtual-list/src/components/dynamic-size-grid.d.ts +3 -3
  93. package/es/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
  94. package/es/components/virtual-list/src/components/fixed-size-grid.d.ts +3 -3
  95. package/es/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
  96. package/es/components/virtual-list/src/components/scrollbar.d.ts +1 -1
  97. package/es/utils/dom.d.ts +5 -5
  98. package/es/utils/dom.js +29 -36
  99. package/es/utils/props.d.ts +2 -2
  100. package/es/utils/props.js +15 -7
  101. package/es/utils/util.d.ts +2 -2
  102. package/es/utils/util.js +3 -3
  103. package/es/version.d.ts +1 -1
  104. package/es/version.js +1 -1
  105. package/lib/component.d.ts +24 -2
  106. package/lib/components/affix/index.js +1 -1
  107. package/lib/components/autocomplete/index.d.ts +4 -4
  108. package/lib/components/autocomplete/src/index.vue.d.ts +2 -2
  109. package/lib/components/carousel/index.d.ts +2 -2
  110. package/lib/components/carousel/src/main.vue.d.ts +2 -2
  111. package/lib/components/cascader/index.d.ts +2 -2
  112. package/lib/components/cascader/src/index.vue.d.ts +1 -1
  113. package/lib/components/checkbox/index.d.ts +6 -6
  114. package/lib/components/checkbox/src/checkbox-button.vue.d.ts +1 -1
  115. package/lib/components/checkbox/src/checkbox-group.vue.d.ts +1 -1
  116. package/lib/components/checkbox/src/checkbox.vue.d.ts +2 -2
  117. package/lib/components/color-picker/index.d.ts +2 -2
  118. package/lib/components/color-picker/src/components/alpha-slider.vue.d.ts +1 -1
  119. package/lib/components/color-picker/src/components/hue-slider.vue.d.ts +1 -1
  120. package/lib/components/color-picker/src/index.vue.d.ts +1 -1
  121. package/lib/components/descriptions/index.d.ts +8 -8
  122. package/lib/components/descriptions/src/description-item.d.ts +2 -2
  123. package/lib/components/descriptions/src/descriptions-cell.d.ts +1 -1
  124. package/lib/components/descriptions/src/index.vue.d.ts +4 -4
  125. package/lib/components/drawer/index.d.ts +6 -6
  126. package/lib/components/drawer/src/index.vue.d.ts +3 -3
  127. package/lib/components/dropdown/index.d.ts +2 -2
  128. package/lib/components/dropdown/src/dropdown.vue.d.ts +2 -2
  129. package/lib/components/form/index.js +2 -2
  130. package/lib/components/icon/index.d.ts +1 -1
  131. package/lib/components/icon/src/icon.vue.d.ts +1 -1
  132. package/lib/components/image/index.d.ts +3 -3
  133. package/lib/components/image/index.js +2 -3
  134. package/lib/components/image/src/image.d.ts +1 -1
  135. package/lib/components/image/src/image.vue.d.ts +3 -3
  136. package/lib/components/image-viewer/index.d.ts +28 -104
  137. package/lib/components/image-viewer/index.js +61 -60
  138. package/lib/components/image-viewer/src/image-viewer.d.ts +14 -0
  139. package/lib/components/image-viewer/src/image-viewer.vue.d.ts +55 -0
  140. package/lib/components/input/index.d.ts +116 -360
  141. package/lib/components/input/index.js +215 -206
  142. package/lib/components/input/src/calc-textarea-height.d.ts +6 -0
  143. package/lib/components/input/src/input.d.ts +46 -0
  144. package/lib/components/input/src/input.vue.d.ts +162 -0
  145. package/lib/components/input-number/index.d.ts +2 -2
  146. package/lib/components/input-number/src/index.vue.d.ts +1 -1
  147. package/lib/components/menu/index.d.ts +7 -3
  148. package/lib/components/menu/index.js +8 -3
  149. package/lib/components/menu/src/menu.d.ts +8 -3
  150. package/lib/components/pagination/index.d.ts +2 -2
  151. package/lib/components/pagination/src/pagination.d.ts +2 -2
  152. package/lib/components/progress/index.js +0 -1
  153. package/lib/components/radio/index.d.ts +2 -2
  154. package/lib/components/radio/src/radio.vue.d.ts +2 -2
  155. package/lib/components/rate/index.js +1 -1
  156. package/lib/components/row/index.d.ts +4 -4
  157. package/lib/components/row/src/row.d.ts +2 -2
  158. package/lib/components/scrollbar/index.d.ts +4 -4
  159. package/lib/components/scrollbar/src/index.vue.d.ts +2 -2
  160. package/lib/components/select/index.d.ts +3 -3
  161. package/lib/components/select/src/select.vue.d.ts +3 -3
  162. package/lib/components/select-v2/index.d.ts +6 -6
  163. package/lib/components/select-v2/index.js +2 -0
  164. package/lib/components/select-v2/src/select.vue.d.ts +3 -3
  165. package/lib/components/slider/index.d.ts +4 -4
  166. package/lib/components/slider/src/button.vue.d.ts +2 -2
  167. package/lib/components/slider/src/index.vue.d.ts +2 -2
  168. package/lib/components/space/index.d.ts +2 -2
  169. package/lib/components/space/src/space.d.ts +2 -2
  170. package/lib/components/steps/index.d.ts +2 -2
  171. package/lib/components/steps/src/index.vue.d.ts +2 -2
  172. package/lib/components/table/index.d.ts +4 -4
  173. package/lib/components/table/index.js +17 -9
  174. package/lib/components/table/src/table.vue.d.ts +4 -4
  175. package/lib/components/tag/index.d.ts +1 -1
  176. package/lib/components/tag/src/tag.vue.d.ts +1 -1
  177. package/lib/components/timeline/index.d.ts +4 -4
  178. package/lib/components/timeline/src/item.vue.d.ts +2 -2
  179. package/lib/components/tree/index.js +1 -1
  180. package/lib/components/tree-v2/index.d.ts +1 -1
  181. package/lib/components/tree-v2/index.js +2 -24
  182. package/lib/components/tree-v2/src/tree.vue.d.ts +1 -1
  183. package/lib/components/upload/index.d.ts +4 -4
  184. package/lib/components/upload/src/index.vue.d.ts +2 -2
  185. package/lib/components/upload/src/upload.vue.d.ts +2 -2
  186. package/lib/components/virtual-list/src/builders/build-grid.d.ts +3 -3
  187. package/lib/components/virtual-list/src/builders/build-list.d.ts +4 -4
  188. package/lib/components/virtual-list/src/components/dynamic-size-grid.d.ts +3 -3
  189. package/lib/components/virtual-list/src/components/dynamic-size-list.d.ts +4 -4
  190. package/lib/components/virtual-list/src/components/fixed-size-grid.d.ts +3 -3
  191. package/lib/components/virtual-list/src/components/fixed-size-list.d.ts +4 -4
  192. package/lib/components/virtual-list/src/components/scrollbar.d.ts +1 -1
  193. package/lib/utils/dom.d.ts +5 -5
  194. package/lib/utils/dom.js +29 -36
  195. package/lib/utils/props.d.ts +2 -2
  196. package/lib/utils/props.js +15 -7
  197. package/lib/utils/util.d.ts +2 -2
  198. package/lib/utils/util.js +2 -2
  199. package/lib/version.d.ts +1 -1
  200. package/lib/version.js +1 -1
  201. package/package.json +3 -2
  202. package/packages/components/affix/src/affix.vue +1 -1
  203. package/packages/components/color-picker/src/index.vue +1 -1
  204. package/packages/components/form/__tests__/form.spec.ts +1 -1
  205. package/packages/components/form/src/form-item.vue +2 -2
  206. package/packages/components/image/src/image.ts +3 -3
  207. package/packages/components/image/src/image.vue +1 -1
  208. package/packages/components/image-viewer/__tests__/image-viewer.spec.ts +1 -1
  209. package/packages/components/image-viewer/index.ts +5 -10
  210. package/packages/components/image-viewer/src/image-viewer.ts +32 -0
  211. package/packages/components/image-viewer/src/{index.vue → image-viewer.vue} +73 -82
  212. package/packages/components/input/__tests__/input.spec.ts +7 -7
  213. package/packages/components/input/index.ts +5 -10
  214. package/packages/components/input/src/{calcTextareaHeight.ts → calc-textarea-height.ts} +9 -7
  215. package/packages/components/input/src/input.ts +100 -0
  216. package/packages/components/input/src/{index.vue → input.vue} +135 -239
  217. package/packages/components/menu/src/menu.ts +10 -3
  218. package/packages/components/progress/src/index.vue +0 -1
  219. package/packages/components/rate/src/index.vue +1 -1
  220. package/packages/components/select-v2/src/useSelect.ts +2 -0
  221. package/packages/components/space/__tests__/space.spec.ts +1 -1
  222. package/packages/components/switch/__tests__/switch.spec.ts +1 -1
  223. package/packages/components/table/src/store/tree.ts +18 -3
  224. package/packages/components/table/src/table-body/render-helper.ts +1 -1
  225. package/packages/components/table/src/table-column/index.ts +4 -1
  226. package/packages/components/table/src/table-layout.ts +2 -2
  227. package/packages/components/table/src/util.ts +1 -1
  228. package/packages/components/tree/src/model/node.ts +1 -1
  229. package/packages/element-plus/package.json +3 -2
  230. package/packages/element-plus/version.ts +1 -1
  231. package/packages/theme-chalk/package.json +1 -2
  232. package/packages/theme-chalk/src/message-box.scss +1 -0
  233. package/packages/utils/dist/es/dom.d.ts +5 -5
  234. package/packages/utils/dist/es/dom.js +29 -36
  235. package/packages/utils/dist/es/props.d.ts +2 -2
  236. package/packages/utils/dist/es/props.js +15 -7
  237. package/packages/utils/dist/es/util.d.ts +2 -2
  238. package/packages/utils/dist/es/util.js +3 -3
  239. package/packages/utils/dist/lib/dom.d.ts +5 -5
  240. package/packages/utils/dist/lib/dom.js +29 -36
  241. package/packages/utils/dist/lib/props.d.ts +2 -2
  242. package/packages/utils/dist/lib/props.js +15 -7
  243. package/packages/utils/dist/lib/util.d.ts +2 -2
  244. package/packages/utils/dist/lib/util.js +2 -2
  245. package/packages/utils/dom.ts +34 -41
  246. package/packages/utils/props.ts +27 -11
  247. package/packages/utils/tests/dom.spec.ts +183 -0
  248. package/packages/utils/util.ts +8 -9
  249. package/tags.json +1 -1
  250. package/theme-chalk/el-message-box.css +1 -1
  251. package/theme-chalk/index.css +1 -1
  252. package/theme-chalk/src/message-box.scss +1 -0
  253. package/web-types.json +1 -1
  254. package/es/components/image-viewer/src/index.vue.d.ts +0 -67
  255. package/es/components/input/src/calcTextareaHeight.d.ts +0 -6
  256. package/es/components/input/src/index.vue.d.ts +0 -197
  257. package/lib/components/image-viewer/src/index.vue.d.ts +0 -67
  258. package/lib/components/input/src/calcTextareaHeight.d.ts +0 -6
  259. package/lib/components/input/src/index.vue.d.ts +0 -197
@@ -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 trim = function (s: string) {
9
- return (s || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '')
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: unknown[]) {
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
- return ` ${el.className} `.indexOf(` ${cls} `) > -1
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 curClass = el.className
67
- const classes = (cls || '').split(' ')
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
- for (let i = 0, j = classes.length; i < j; i++) {
70
- const clsName = classes[i]
71
- if (!clsName) continue
72
-
73
- if (el.classList) {
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.split(' ')
88
- let curClass = ` ${el.className} `
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
- if (el.classList) {
95
- el.classList.remove(clsName)
96
- } else if (hasClass(el, clsName)) {
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 null
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.getComputedStyle(element, '')
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
@@ -1,6 +1,6 @@
1
+ import { warn } from 'vue'
1
2
  import { isObject } from '@vue/shared'
2
- import mapValues from 'lodash/mapValues'
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
- >(option: BuildPropOption<T, D, R, V, C>): BuildPropReturn<T, D, R, V, C> {
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
- debugWarn(
125
- `Vue warn`,
126
- `Invalid prop: Expected one of (${allowedValues.join(
127
- ', '
128
- )}), got value ${val}`
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: (type as any)?.[wrapperKey] || 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
- options: O
178
+ props: O
168
179
  ) =>
169
- mapValues(options, (option) => buildProp(option)) as unknown as {
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
+ })
@@ -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 { AnyFunction, TimeoutHandle, Nullable } from './types'
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
- throw new Error('please transfer a valid prop path to form item!')
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 AnyFunction<any>>(
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
- fn.apply(this, args)
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)"}}