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
@@ -16,18 +16,19 @@
16
16
  },
17
17
  $attrs.class,
18
18
  ]"
19
- :style="$attrs.style"
19
+ :style="containerStyle"
20
20
  :widget="widget"
21
21
  @mouseenter="onMouseEnter"
22
22
  @mouseleave="onMouseLeave"
23
23
  >
24
+ <!-- input -->
24
25
  <template v-if="type !== 'textarea'">
25
- <!-- 前置元素 -->
26
+ <!-- prepend slot -->
26
27
  <div v-if="$slots.prepend" class="el-input-group__prepend">
27
- <slot name="prepend"></slot>
28
+ <slot name="prepend" />
28
29
  </div>
30
+
29
31
  <input
30
- v-if="type !== 'textarea'"
31
32
  ref="input"
32
33
  class="el-input__inner"
33
34
  v-bind="attrs"
@@ -48,72 +49,78 @@
48
49
  @change="handleChange"
49
50
  @keydown="handleKeydown"
50
51
  />
51
- <!-- 前置内容 -->
52
+
53
+ <!-- prefix slot -->
52
54
  <span v-if="$slots.prefix || prefixIcon" class="el-input__prefix">
53
- <slot name="prefix"></slot>
55
+ <slot name="prefix" />
54
56
  <i v-if="prefixIcon" :class="['el-input__icon', prefixIcon]"></i>
55
57
  </span>
56
- <!-- 后置内容 -->
57
- <span v-if="getSuffixVisible()" class="el-input__suffix">
58
+
59
+ <!-- suffix slot -->
60
+ <span v-if="suffixVisible" class="el-input__suffix">
58
61
  <span class="el-input__suffix-inner">
59
62
  <template v-if="!showClear || !showPwdVisible || !isWordLimitVisible">
60
- <slot name="suffix"></slot>
63
+ <slot name="suffix" />
61
64
  <i v-if="suffixIcon" :class="['el-input__icon', suffixIcon]"></i>
62
65
  </template>
66
+
63
67
  <i
64
68
  v-if="showClear"
65
69
  class="el-input__icon el-icon-circle-close el-input__clear"
66
70
  @mousedown.prevent
67
71
  @click="clear"
68
- ></i>
72
+ />
73
+
69
74
  <i
70
75
  v-if="showPwdVisible"
71
76
  class="el-input__icon el-icon-view el-input__clear"
72
77
  @click="handlePasswordVisible"
73
- ></i>
78
+ />
79
+
74
80
  <span v-if="isWordLimitVisible" class="el-input__count">
75
81
  <span class="el-input__count-inner">
76
- {{ textLength }}/{{ maxlength }}
82
+ {{ textLength }} / {{ maxlength }}
77
83
  </span>
78
84
  </span>
79
85
  </span>
80
86
  <i
81
87
  v-if="validateState"
82
88
  :class="['el-input__icon', 'el-input__validateIcon', validateIcon]"
83
- ></i>
89
+ />
84
90
  </span>
85
- <!-- 后置元素 -->
91
+
92
+ <!-- append slot -->
86
93
  <div v-if="$slots.append" class="el-input-group__append">
87
- <slot name="append"></slot>
94
+ <slot name="append" />
88
95
  </div>
89
96
  </template>
90
- <textarea
91
- v-else
92
- ref="textarea"
93
- class="el-textarea__inner"
94
- v-bind="attrs"
95
- :tabindex="tabindex"
96
- :disabled="inputDisabled"
97
- :readonly="readonly"
98
- :autocomplete="autocomplete"
99
- :style="computedTextareaStyle"
100
- :aria-label="label"
101
- :placeholder="placeholder"
102
- @compositionstart="handleCompositionStart"
103
- @compositionupdate="handleCompositionUpdate"
104
- @compositionend="handleCompositionEnd"
105
- @input="handleInput"
106
- @focus="handleFocus"
107
- @blur="handleBlur"
108
- @change="handleChange"
109
- @keydown="handleKeydown"
110
- >
111
- </textarea>
112
- <span
113
- v-if="isWordLimitVisible && type === 'textarea'"
114
- class="el-input__count"
115
- >{{ textLength }}/{{ maxlength }}</span
116
- >
97
+
98
+ <!-- textarea -->
99
+ <template v-else>
100
+ <textarea
101
+ ref="textarea"
102
+ class="el-textarea__inner"
103
+ v-bind="attrs"
104
+ :tabindex="tabindex"
105
+ :disabled="inputDisabled"
106
+ :readonly="readonly"
107
+ :autocomplete="autocomplete"
108
+ :style="computedTextareaStyle"
109
+ :aria-label="label"
110
+ :placeholder="placeholder"
111
+ @compositionstart="handleCompositionStart"
112
+ @compositionupdate="handleCompositionUpdate"
113
+ @compositionend="handleCompositionEnd"
114
+ @input="handleInput"
115
+ @focus="handleFocus"
116
+ @blur="handleBlur"
117
+ @change="handleChange"
118
+ @keydown="handleKeydown"
119
+ />
120
+ <span v-if="isWordLimitVisible" class="el-input__count">
121
+ {{ textLength }} / {{ maxlength }}
122
+ </span>
123
+ </template>
117
124
  </div>
118
125
  </template>
119
126
 
@@ -131,146 +138,44 @@ import {
131
138
  onUpdated,
132
139
  } from 'vue'
133
140
  import { elFormKey, elFormItemKey } from '@element-plus/tokens'
134
- import { useAttrs } from '@element-plus/hooks'
141
+ import { useAttrs, useFormItem } from '@element-plus/hooks'
135
142
  import {
136
143
  UPDATE_MODEL_EVENT,
137
144
  VALIDATE_STATE_MAP,
138
145
  } from '@element-plus/utils/constants'
139
- import { isObject, useGlobalConfig } from '@element-plus/utils/util'
146
+ import { isObject } from '@element-plus/utils/util'
140
147
  import isServer from '@element-plus/utils/isServer'
141
148
  import { isKorean } from '@element-plus/utils/isDef'
142
- import { isValidComponentSize } from '@element-plus/utils/validators'
143
- import calcTextareaHeight from './calcTextareaHeight'
149
+ import { calcTextareaHeight } from './calc-textarea-height'
150
+ import { inputProps, inputEmits } from './input'
144
151
 
145
- import type { PropType } from 'vue'
146
- import type { ElFormContext, ElFormItemContext } from '@element-plus/tokens'
147
- import type { ComponentSize } from '@element-plus/utils/types'
152
+ import type { StyleValue } from '@element-plus/utils/types'
148
153
 
149
- type AutosizeProp =
150
- | {
151
- minRows?: number
152
- maxRows?: number
153
- }
154
- | boolean
154
+ type TargetElement = HTMLInputElement | HTMLTextAreaElement
155
155
 
156
156
  const PENDANT_MAP = {
157
157
  suffix: 'append',
158
158
  prefix: 'prepend',
159
- }
159
+ } as const
160
160
 
161
161
  export default defineComponent({
162
162
  name: 'ElInput',
163
-
164
163
  inheritAttrs: false,
165
164
 
166
- props: {
167
- modelValue: {
168
- type: [String, Number],
169
- default: '',
170
- },
171
- type: {
172
- type: String,
173
- default: 'text',
174
- },
175
- size: {
176
- type: String as PropType<ComponentSize>,
177
- validator: isValidComponentSize,
178
- },
179
- resize: {
180
- type: String as PropType<'none' | 'both' | 'horizontal' | 'vertical'>,
181
- validator: (val: string) =>
182
- ['none', 'both', 'horizontal', 'vertical'].includes(val),
183
- },
184
- autosize: {
185
- type: [Boolean, Object] as PropType<AutosizeProp>,
186
- default: false as AutosizeProp,
187
- },
188
- autocomplete: {
189
- type: String,
190
- default: 'off',
191
- },
192
- placeholder: {
193
- type: String,
194
- },
195
- form: {
196
- type: String,
197
- default: '',
198
- },
199
- disabled: {
200
- type: Boolean,
201
- default: false,
202
- },
203
- readonly: {
204
- type: Boolean,
205
- default: false,
206
- },
207
- clearable: {
208
- type: Boolean,
209
- default: false,
210
- },
211
- showPassword: {
212
- type: Boolean,
213
- default: false,
214
- },
215
- showWordLimit: {
216
- type: Boolean,
217
- default: false,
218
- },
219
- suffixIcon: {
220
- type: String,
221
- default: '',
222
- },
223
- prefixIcon: {
224
- type: String,
225
- default: '',
226
- },
227
- label: {
228
- type: String,
229
- },
230
- tabindex: {
231
- type: [Number, String],
232
- },
233
- validateEvent: {
234
- type: Boolean,
235
- default: true,
236
- },
237
- inputStyle: {
238
- type: Object,
239
- default: () => ({}),
240
- },
241
- maxlength: {
242
- type: [Number, String],
243
- },
244
- widget: {
245
- type: String,
246
- },
247
- },
165
+ props: inputProps,
166
+ emits: inputEmits,
248
167
 
249
- emits: [
250
- UPDATE_MODEL_EVENT,
251
- 'input',
252
- 'change',
253
- 'focus',
254
- 'blur',
255
- 'clear',
256
- 'mouseleave',
257
- 'mouseenter',
258
- 'keydown',
259
- 'compositionstart',
260
- 'compositionupdate',
261
- 'compositionend',
262
- ],
263
-
264
- setup(props, ctx) {
265
- const instance = getCurrentInstance()
168
+ setup(props, { slots, emit, attrs: rawAttrs }) {
169
+ const instance = getCurrentInstance()!
266
170
  const attrs = useAttrs()
267
- const $ELEMENT = useGlobalConfig()
268
171
 
269
- const elForm = inject(elFormKey, {} as ElFormContext)
270
- const elFormItem = inject(elFormItemKey, {} as ElFormItemContext)
172
+ const elForm = inject(elFormKey, undefined)
173
+ const elFormItem = inject(elFormItemKey, undefined)
174
+
175
+ const { size: inputSize, disabled: inputDisabled } = useFormItem({})
271
176
 
272
- const input = ref(null)
273
- const textarea = ref(null)
177
+ const input = ref<HTMLInputElement>()
178
+ const textarea = ref<HTMLTextAreaElement>()
274
179
  const focused = ref(false)
275
180
  const hovering = ref(false)
276
181
  const isComposing = ref(false)
@@ -278,59 +183,50 @@ export default defineComponent({
278
183
  const _textareaCalcStyle = shallowRef(props.inputStyle)
279
184
 
280
185
  const inputOrTextarea = computed(() => input.value || textarea.value)
281
- const inputSize = computed(
282
- () => props.size || elFormItem.size || $ELEMENT.size
283
- )
284
- const needStatusIcon = computed(() => elForm.statusIcon)
285
- const validateState = computed(() => elFormItem.validateState || '')
186
+ const needStatusIcon = computed(() => elForm?.statusIcon ?? false)
187
+ const validateState = computed(() => elFormItem?.validateState || '')
286
188
  const validateIcon = computed(() => VALIDATE_STATE_MAP[validateState.value])
287
- const computedTextareaStyle = computed(() => ({
288
- ...props.inputStyle,
289
- ..._textareaCalcStyle.value,
290
- resize: props.resize,
291
- }))
292
- const inputDisabled = computed(() => props.disabled || elForm.disabled)
189
+ const containerStyle = computed(() => rawAttrs.style as StyleValue)
190
+ const computedTextareaStyle = computed<StyleValue>(() => [
191
+ props.inputStyle,
192
+ _textareaCalcStyle.value,
193
+ { resize: props.resize },
194
+ ])
293
195
  const nativeInputValue = computed(() =>
294
196
  props.modelValue === null || props.modelValue === undefined
295
197
  ? ''
296
198
  : String(props.modelValue)
297
199
  )
298
- const showClear = computed(() => {
299
- return (
200
+ const showClear = computed(
201
+ () =>
300
202
  props.clearable &&
301
203
  !inputDisabled.value &&
302
204
  !props.readonly &&
303
- nativeInputValue.value &&
205
+ !!nativeInputValue.value &&
304
206
  (focused.value || hovering.value)
305
- )
306
- })
307
- const showPwdVisible = computed(() => {
308
- return (
207
+ )
208
+ const showPwdVisible = computed(
209
+ () =>
309
210
  props.showPassword &&
310
211
  !inputDisabled.value &&
311
212
  !props.readonly &&
312
213
  (!!nativeInputValue.value || focused.value)
313
- )
314
- })
315
- const isWordLimitVisible = computed(() => {
316
- return (
214
+ )
215
+ const isWordLimitVisible = computed(
216
+ () =>
317
217
  props.showWordLimit &&
318
- props.maxlength &&
218
+ !!props.maxlength &&
319
219
  (props.type === 'text' || props.type === 'textarea') &&
320
220
  !inputDisabled.value &&
321
221
  !props.readonly &&
322
222
  !props.showPassword
323
- )
324
- })
325
- const textLength = computed(() => {
326
- return Array.from(nativeInputValue.value).length
327
- })
328
- const inputExceed = computed(() => {
329
- // show exceed style if length of initial value greater then maxlength
330
- return (
331
- isWordLimitVisible.value && textLength.value > Number(props.maxlength)
332
- )
333
- })
223
+ )
224
+ const textLength = computed(() => Array.from(nativeInputValue.value).length)
225
+ const inputExceed = computed(
226
+ () =>
227
+ // show exceed style if length of initial value greater then maxlength
228
+ !!isWordLimitVisible.value && textLength.value > Number(props.maxlength)
229
+ )
334
230
 
335
231
  const resizeTextarea = () => {
336
232
  const { type, autosize } = props
@@ -341,11 +237,11 @@ export default defineComponent({
341
237
  const minRows = isObject(autosize) ? autosize.minRows : undefined
342
238
  const maxRows = isObject(autosize) ? autosize.maxRows : undefined
343
239
  _textareaCalcStyle.value = {
344
- ...calcTextareaHeight(textarea.value, minRows, maxRows),
240
+ ...calcTextareaHeight(textarea.value!, minRows, maxRows),
345
241
  }
346
242
  } else {
347
243
  _textareaCalcStyle.value = {
348
- minHeight: calcTextareaHeight(textarea.value).minHeight,
244
+ minHeight: calcTextareaHeight(textarea.value!).minHeight,
349
245
  }
350
246
  }
351
247
  }
@@ -356,8 +252,9 @@ export default defineComponent({
356
252
  input.value = nativeInputValue.value
357
253
  }
358
254
 
359
- const calcIconOffset = (place) => {
255
+ const calcIconOffset = (place: 'prefix' | 'suffix') => {
360
256
  const { el } = instance.vnode
257
+ if (!el) return
361
258
  const elList: HTMLSpanElement[] = Array.from(
362
259
  el.querySelectorAll(`.el-input__${place}`)
363
260
  )
@@ -367,7 +264,7 @@ export default defineComponent({
367
264
 
368
265
  const pendant = PENDANT_MAP[place]
369
266
 
370
- if (ctx.slots[pendant]) {
267
+ if (slots[pendant]) {
371
268
  target.style.transform = `translateX(${place === 'suffix' ? '-' : ''}${
372
269
  el.querySelector(`.el-input-group__${pendant}`).offsetWidth
373
270
  }px)`
@@ -381,8 +278,8 @@ export default defineComponent({
381
278
  calcIconOffset('suffix')
382
279
  }
383
280
 
384
- const handleInput = (event) => {
385
- let { value } = event.target
281
+ const handleInput = (event: Event) => {
282
+ let { value } = event.target as TargetElement
386
283
 
387
284
  // should not emit input during composition
388
285
  // see: https://github.com/ElemeFE/element/issues/10516
@@ -401,60 +298,60 @@ export default defineComponent({
401
298
  value = Array.from(value).slice(0, Number(sliceIndex)).join('')
402
299
  }
403
300
 
404
- ctx.emit(UPDATE_MODEL_EVENT, value)
405
- ctx.emit('input', value)
301
+ emit(UPDATE_MODEL_EVENT, value)
302
+ emit('input', value)
406
303
 
407
304
  // ensure native input value is controlled
408
305
  // see: https://github.com/ElemeFE/element/issues/12850
409
306
  nextTick(setNativeInputValue)
410
307
  }
411
308
 
412
- const handleChange = (event) => {
413
- ctx.emit('change', event.target.value)
309
+ const handleChange = (event: Event) => {
310
+ emit('change', (event.target as TargetElement).value)
414
311
  }
415
312
 
416
313
  const focus = () => {
417
314
  // see: https://github.com/ElemeFE/element/issues/18573
418
315
  nextTick(() => {
419
- inputOrTextarea.value.focus()
316
+ inputOrTextarea.value?.focus()
420
317
  })
421
318
  }
422
319
 
423
320
  const blur = () => {
424
- inputOrTextarea.value.blur()
321
+ inputOrTextarea.value?.blur()
425
322
  }
426
323
 
427
- const handleFocus = (event) => {
324
+ const handleFocus = (event: FocusEvent) => {
428
325
  focused.value = true
429
- ctx.emit('focus', event)
326
+ emit('focus', event)
430
327
  }
431
328
 
432
- const handleBlur = (event) => {
329
+ const handleBlur = (event: FocusEvent) => {
433
330
  focused.value = false
434
- ctx.emit('blur', event)
331
+ emit('blur', event)
435
332
  if (props.validateEvent) {
436
- elFormItem.validate?.('blur')
333
+ elFormItem?.validate?.('blur')
437
334
  }
438
335
  }
439
336
 
440
337
  const select = () => {
441
- inputOrTextarea.value.select()
338
+ inputOrTextarea.value?.select()
442
339
  }
443
340
 
444
341
  const handleCompositionStart = (event: CompositionEvent) => {
445
- ctx.emit('compositionstart', event)
342
+ emit('compositionstart', event)
446
343
  isComposing.value = true
447
344
  }
448
345
 
449
346
  const handleCompositionUpdate = (event: CompositionEvent) => {
450
- ctx.emit('compositionupdate', event)
347
+ emit('compositionupdate', event)
451
348
  const text = (event.target as HTMLInputElement)?.value
452
349
  const lastCharacter = text[text.length - 1] || ''
453
350
  isComposing.value = !isKorean(lastCharacter)
454
351
  }
455
352
 
456
353
  const handleCompositionEnd = (event: CompositionEvent) => {
457
- ctx.emit('compositionend', event)
354
+ emit('compositionend', event)
458
355
  if (isComposing.value) {
459
356
  isComposing.value = false
460
357
  handleInput(event)
@@ -462,10 +359,10 @@ export default defineComponent({
462
359
  }
463
360
 
464
361
  const clear = () => {
465
- ctx.emit(UPDATE_MODEL_EVENT, '')
466
- ctx.emit('change', '')
467
- ctx.emit('clear')
468
- ctx.emit('input', '')
362
+ emit(UPDATE_MODEL_EVENT, '')
363
+ emit('change', '')
364
+ emit('clear')
365
+ emit('input', '')
469
366
  }
470
367
 
471
368
  const handlePasswordVisible = () => {
@@ -473,23 +370,22 @@ export default defineComponent({
473
370
  focus()
474
371
  }
475
372
 
476
- const getSuffixVisible = () => {
477
- return (
478
- ctx.slots.suffix ||
479
- props.suffixIcon ||
373
+ const suffixVisible = computed(
374
+ () =>
375
+ !!slots.suffix ||
376
+ !!props.suffixIcon ||
480
377
  showClear.value ||
481
378
  props.showPassword ||
482
379
  isWordLimitVisible.value ||
483
- (validateState.value && needStatusIcon.value)
484
- )
485
- }
380
+ (!!validateState.value && needStatusIcon.value)
381
+ )
486
382
 
487
383
  watch(
488
384
  () => props.modelValue,
489
385
  () => {
490
386
  nextTick(resizeTextarea)
491
387
  if (props.validateEvent) {
492
- elFormItem.validate?.('change')
388
+ elFormItem?.validate?.('change')
493
389
  }
494
390
  }
495
391
  )
@@ -497,9 +393,7 @@ export default defineComponent({
497
393
  // native input value is set explicitly
498
394
  // do not use v-model / :value in template
499
395
  // see: https://github.com/ElemeFE/element/issues/14521
500
- watch(nativeInputValue, () => {
501
- setNativeInputValue()
502
- })
396
+ watch(nativeInputValue, () => setNativeInputValue())
503
397
 
504
398
  // when change between <input> and <textarea>,
505
399
  // update DOM dependent value and styles
@@ -525,18 +419,18 @@ export default defineComponent({
525
419
  nextTick(updateIconOffset)
526
420
  })
527
421
 
528
- const onMouseLeave = (e) => {
422
+ const onMouseLeave = (evt: MouseEvent) => {
529
423
  hovering.value = false
530
- ctx.emit('mouseleave', e)
424
+ emit('mouseleave', evt)
531
425
  }
532
426
 
533
- const onMouseEnter = (e) => {
427
+ const onMouseEnter = (evt: MouseEvent) => {
534
428
  hovering.value = true
535
- ctx.emit('mouseenter', e)
429
+ emit('mouseenter', evt)
536
430
  }
537
431
 
538
- const handleKeydown = (e) => {
539
- ctx.emit('keydown', e)
432
+ const handleKeydown = (evt: KeyboardEvent) => {
433
+ emit('keydown', evt)
540
434
  }
541
435
 
542
436
  return {
@@ -546,8 +440,8 @@ export default defineComponent({
546
440
  inputSize,
547
441
  validateState,
548
442
  validateIcon,
443
+ containerStyle,
549
444
  computedTextareaStyle,
550
- resizeTextarea,
551
445
  inputDisabled,
552
446
  showClear,
553
447
  showPwdVisible,
@@ -557,6 +451,9 @@ export default defineComponent({
557
451
  inputExceed,
558
452
  passwordVisible,
559
453
  inputOrTextarea,
454
+ suffixVisible,
455
+
456
+ resizeTextarea,
560
457
  handleInput,
561
458
  handleChange,
562
459
  handleFocus,
@@ -569,7 +466,6 @@ export default defineComponent({
569
466
  select,
570
467
  focus,
571
468
  blur,
572
- getSuffixVisible,
573
469
  onMouseLeave,
574
470
  onMouseEnter,
575
471
  handleKeydown,
@@ -52,6 +52,10 @@ export const menuProps = buildProps({
52
52
  type: Boolean,
53
53
  default: true,
54
54
  },
55
+ ellipsis: {
56
+ type: Boolean,
57
+ default: true,
58
+ },
55
59
  } as const)
56
60
  export type MenuProps = ExtractPropTypes<typeof menuProps>
57
61
 
@@ -344,7 +348,7 @@ export default defineComponent({
344
348
  })
345
349
  const slotDefault = originalSlot.slice(0, sliceIndex)
346
350
  const slotMore = originalSlot.slice(sliceIndex)
347
- if (slotMore?.length) {
351
+ if (slotMore?.length && props.ellipsis) {
348
352
  slot = slotDefault
349
353
  vShowMore.push(
350
354
  h(
@@ -367,7 +371,10 @@ export default defineComponent({
367
371
 
368
372
  const ulStyle = useMenuCssVar(props)
369
373
 
370
- const vMenu = useVNodeResize(
374
+ const resizeMenu = (vNode: VNode) =>
375
+ props.ellipsis ? useVNodeResize(vNode) : vNode
376
+
377
+ const vMenu = resizeMenu(
371
378
  h(
372
379
  'ul',
373
380
  {
@@ -381,7 +388,7 @@ export default defineComponent({
381
388
  'el-menu--collapse': props.collapse,
382
389
  },
383
390
  },
384
- [...slot.map((vnode) => useVNodeResize(vnode)), ...vShowMore]
391
+ [...slot.map((vnode) => resizeMenu(vnode)), ...vShowMore]
385
392
  )
386
393
  )
387
394
 
@@ -111,7 +111,6 @@ export default defineComponent({
111
111
  percentage: {
112
112
  type: Number,
113
113
  default: 0,
114
- required: true,
115
114
  validator: (val: number): boolean => val >= 0 && val <= 100,
116
115
  },
117
116
  status: {
@@ -203,7 +203,7 @@ export default defineComponent({
203
203
  : props.iconClasses
204
204
  )
205
205
  const decimalIconClass = computed(() =>
206
- getValueFromMap(props.modelValue, classMap.value)
206
+ getValueFromMap(currentValue.value, classMap.value)
207
207
  )
208
208
  const voidClass = computed(() =>
209
209
  rateDisabled.value ? props.disabledVoidIconClass : props.voidIconClass
@@ -654,6 +654,8 @@ const useSelect = (props: ExtractPropTypes<typeof SelectProps>, emit) => {
654
654
  initHovering = true
655
655
  }
656
656
  })
657
+ } else {
658
+ states.cachedOptions = []
657
659
  }
658
660
  } else {
659
661
  if (props.modelValue) {