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
@@ -1,13 +1,8 @@
1
- import ImageViewer from './src/index.vue'
1
+ import { withInstall } from '@element-plus/utils/with-install'
2
2
 
3
- import type { App } from 'vue'
4
- import type { SFCWithInstall } from '@element-plus/utils/types'
3
+ import ImageViewer from './src/image-viewer.vue'
5
4
 
6
- ImageViewer.install = (app: App): void => {
7
- app.component(ImageViewer.name, ImageViewer)
8
- }
5
+ export const ElImageViewer = withInstall(ImageViewer)
6
+ export default ElImageViewer
9
7
 
10
- const _ImageViewer = ImageViewer as SFCWithInstall<typeof ImageViewer>
11
-
12
- export default _ImageViewer
13
- export const ElImageViewer = _ImageViewer
8
+ export * from './src/image-viewer'
@@ -0,0 +1,32 @@
1
+ import { buildProps, definePropType, mutable } from '@element-plus/utils/props'
2
+ import type { ExtractPropTypes } from 'vue'
3
+
4
+ export const imageViewerProps = buildProps({
5
+ urlList: {
6
+ type: definePropType<string[]>(Array),
7
+ default: () => mutable([] as const),
8
+ },
9
+ zIndex: {
10
+ type: Number,
11
+ default: 2000,
12
+ },
13
+ initialIndex: {
14
+ type: Number,
15
+ default: 0,
16
+ },
17
+ infinite: {
18
+ type: Boolean,
19
+ default: true,
20
+ },
21
+ hideOnClickModal: {
22
+ type: Boolean,
23
+ default: false,
24
+ },
25
+ } as const)
26
+ export type ImageViewerProps = ExtractPropTypes<typeof imageViewerProps>
27
+
28
+ export const imageViewerEmits = {
29
+ close: () => true,
30
+ switch: (index: number) => typeof index === 'number',
31
+ }
32
+ export type ImageViewerEmits = typeof imageViewerEmits
@@ -9,11 +9,13 @@
9
9
  <div
10
10
  class="el-image-viewer__mask"
11
11
  @click.self="hideOnClickModal && hide()"
12
- ></div>
12
+ />
13
+
13
14
  <!-- CLOSE -->
14
15
  <span class="el-image-viewer__btn el-image-viewer__close" @click="hide">
15
- <i class="el-icon-close"></i>
16
+ <i class="el-icon-close" />
16
17
  </span>
18
+
17
19
  <!-- ARROW -->
18
20
  <template v-if="!isSingle">
19
21
  <span
@@ -21,32 +23,32 @@
21
23
  :class="{ 'is-disabled': !infinite && isFirst }"
22
24
  @click="prev"
23
25
  >
24
- <i class="el-icon-arrow-left"></i>
26
+ <i class="el-icon-arrow-left" />
25
27
  </span>
26
28
  <span
27
29
  class="el-image-viewer__btn el-image-viewer__next"
28
30
  :class="{ 'is-disabled': !infinite && isLast }"
29
31
  @click="next"
30
32
  >
31
- <i class="el-icon-arrow-right"></i>
33
+ <i class="el-icon-arrow-right" />
32
34
  </span>
33
35
  </template>
34
36
  <!-- ACTIONS -->
35
37
  <div class="el-image-viewer__btn el-image-viewer__actions">
36
38
  <div class="el-image-viewer__actions__inner">
37
- <i class="el-icon-zoom-out" @click="handleActions('zoomOut')"></i>
38
- <i class="el-icon-zoom-in" @click="handleActions('zoomIn')"></i>
39
- <i class="el-image-viewer__actions__divider"></i>
40
- <i :class="mode.icon" @click="toggleMode"></i>
41
- <i class="el-image-viewer__actions__divider"></i>
39
+ <i class="el-icon-zoom-out" @click="handleActions('zoomOut')" />
40
+ <i class="el-icon-zoom-in" @click="handleActions('zoomIn')" />
41
+ <i class="el-image-viewer__actions__divider" />
42
+ <i :class="mode.icon" @click="toggleMode" />
43
+ <i class="el-image-viewer__actions__divider" />
42
44
  <i
43
45
  class="el-icon-refresh-left"
44
46
  @click="handleActions('anticlocelise')"
45
- ></i>
47
+ />
46
48
  <i
47
49
  class="el-icon-refresh-right"
48
50
  @click="handleActions('clocelise')"
49
- ></i>
51
+ />
50
52
  </div>
51
53
  </div>
52
54
  <!-- CANVAS -->
@@ -70,13 +72,22 @@
70
72
  </template>
71
73
 
72
74
  <script lang="ts">
73
- import { defineComponent, computed, ref, onMounted, watch, nextTick } from 'vue'
75
+ import {
76
+ defineComponent,
77
+ computed,
78
+ ref,
79
+ onMounted,
80
+ watch,
81
+ nextTick,
82
+ effectScope,
83
+ } from 'vue'
84
+ import { useEventListener } from '@vueuse/core'
74
85
  import { useLocaleInject } from '@element-plus/hooks'
75
86
  import { EVENT_CODE } from '@element-plus/utils/aria'
76
- import { on, off } from '@element-plus/utils/dom'
77
87
  import { rafThrottle, isFirefox } from '@element-plus/utils/util'
88
+ import { imageViewerProps, imageViewerEmits } from './image-viewer'
78
89
 
79
- import type { PropType, CSSProperties } from 'vue'
90
+ import type { CSSProperties } from 'vue'
80
91
 
81
92
  const Mode = {
82
93
  CONTAIN: {
@@ -90,8 +101,6 @@ const Mode = {
90
101
  }
91
102
 
92
103
  const mousewheelEventName = isFirefox() ? 'DOMMouseScroll' : 'mousewheel'
93
- const CLOSE_EVENT = 'close'
94
- const SWITCH_EVENT = 'switch'
95
104
  export type ImageViewerAction =
96
105
  | 'zoomIn'
97
106
  | 'zoomOut'
@@ -100,42 +109,19 @@ export type ImageViewerAction =
100
109
 
101
110
  export default defineComponent({
102
111
  name: 'ElImageViewer',
103
- props: {
104
- urlList: {
105
- type: Array as PropType<string[]>,
106
- default: () => [],
107
- },
108
- zIndex: {
109
- type: Number,
110
- default: 2000,
111
- },
112
- initialIndex: {
113
- type: Number,
114
- default: 0,
115
- },
116
- infinite: {
117
- type: Boolean,
118
- default: true,
119
- },
120
- hideOnClickModal: {
121
- type: Boolean,
122
- default: false,
123
- },
124
- },
125
112
 
126
- emits: [CLOSE_EVENT, SWITCH_EVENT],
113
+ props: imageViewerProps,
114
+ emits: imageViewerEmits,
127
115
 
128
116
  setup(props, { emit }) {
129
117
  const { t } = useLocaleInject()
118
+ const wrapper = ref<HTMLDivElement>()
119
+ const img = ref<HTMLImageElement>()
130
120
 
131
- let _keyDownHandler = null
132
- let _mouseWheelHandler = null
133
- let _dragHandler = null
121
+ const scopeEventListener = effectScope()
134
122
 
135
123
  const loading = ref(true)
136
124
  const index = ref(props.initialIndex)
137
- const wrapper = ref(null)
138
- const img = ref(null)
139
125
  const mode = ref(Mode.CONTAIN)
140
126
  const transform = ref({
141
127
  scale: 1,
@@ -164,12 +150,12 @@ export default defineComponent({
164
150
 
165
151
  const imgStyle = computed(() => {
166
152
  const { scale, deg, offsetX, offsetY, enableTransition } = transform.value
167
- const style = {
153
+ const style: CSSProperties = {
168
154
  transform: `scale(${scale}) rotate(${deg}deg)`,
169
155
  transition: enableTransition ? 'transform .3s' : '',
170
156
  marginLeft: `${offsetX}px`,
171
157
  marginTop: `${offsetY}px`,
172
- } as CSSProperties
158
+ }
173
159
  if (mode.value.name === Mode.CONTAIN.name) {
174
160
  style.maxWidth = style.maxHeight = '100%'
175
161
  }
@@ -177,12 +163,12 @@ export default defineComponent({
177
163
  })
178
164
 
179
165
  function hide() {
180
- deviceSupportUninstall()
181
- emit(CLOSE_EVENT)
166
+ unregisterEventListener()
167
+ emit('close')
182
168
  }
183
169
 
184
- function deviceSupportInstall() {
185
- _keyDownHandler = rafThrottle((e: KeyboardEvent) => {
170
+ function registerEventListener() {
171
+ const keydownHandler = rafThrottle((e: KeyboardEvent) => {
186
172
  switch (e.code) {
187
173
  // ESC
188
174
  case EVENT_CODE.esc:
@@ -210,43 +196,44 @@ export default defineComponent({
210
196
  break
211
197
  }
212
198
  })
213
-
214
- _mouseWheelHandler = rafThrottle((e) => {
215
- const delta = e.wheelDelta ? e.wheelDelta : -e.detail
216
- if (delta > 0) {
217
- handleActions('zoomIn', {
218
- zoomRate: 0.015,
219
- enableTransition: false,
220
- })
221
- } else {
222
- handleActions('zoomOut', {
223
- zoomRate: 0.015,
224
- enableTransition: false,
225
- })
199
+ const mousewheelHandler = rafThrottle(
200
+ (e: WheelEvent | any /* TODO: wheelDelta is deprecated */) => {
201
+ const delta = e.wheelDelta ? e.wheelDelta : -e.detail
202
+ if (delta > 0) {
203
+ handleActions('zoomIn', {
204
+ zoomRate: 0.015,
205
+ enableTransition: false,
206
+ })
207
+ } else {
208
+ handleActions('zoomOut', {
209
+ zoomRate: 0.015,
210
+ enableTransition: false,
211
+ })
212
+ }
226
213
  }
214
+ )
215
+
216
+ scopeEventListener.run(() => {
217
+ useEventListener(document, 'keydown', keydownHandler)
218
+ useEventListener(document, mousewheelEventName, mousewheelHandler)
227
219
  })
228
- on(document, 'keydown', _keyDownHandler)
229
- on(document, mousewheelEventName, _mouseWheelHandler)
230
220
  }
231
221
 
232
- function deviceSupportUninstall() {
233
- off(document, 'keydown', _keyDownHandler)
234
- off(document, mousewheelEventName, _mouseWheelHandler)
235
- _keyDownHandler = null
236
- _mouseWheelHandler = null
222
+ function unregisterEventListener() {
223
+ scopeEventListener.stop()
237
224
  }
238
225
 
239
226
  function handleImgLoad() {
240
227
  loading.value = false
241
228
  }
242
229
 
243
- function handleImgError(e) {
230
+ function handleImgError(e: Event) {
244
231
  loading.value = false
245
- e.target.alt = t('el.image.error')
232
+ ;(e.target as HTMLImageElement).alt = t('el.image.error')
246
233
  }
247
234
 
248
235
  function handleMouseDown(e: MouseEvent) {
249
- if (loading.value || e.button !== 0) return
236
+ if (loading.value || e.button !== 0 || !wrapper.value) return
250
237
 
251
238
  const { offsetX, offsetY } = transform.value
252
239
  const startX = e.pageX
@@ -257,17 +244,21 @@ export default defineComponent({
257
244
  const divTop = wrapper.value.clientTop
258
245
  const divBottom = wrapper.value.clientTop + wrapper.value.clientHeight
259
246
 
260
- _dragHandler = rafThrottle((ev) => {
247
+ const dragHandler = rafThrottle((ev: MouseEvent) => {
261
248
  transform.value = {
262
249
  ...transform.value,
263
250
  offsetX: offsetX + ev.pageX - startX,
264
251
  offsetY: offsetY + ev.pageY - startY,
265
252
  }
266
253
  })
267
- on(document, 'mousemove', _dragHandler)
268
- on(document, 'mouseup', (e: MouseEvent) => {
269
- const mouseX = e.pageX
270
- const mouseY = e.pageY
254
+ const removeMousemove = useEventListener(
255
+ document,
256
+ 'mousemove',
257
+ dragHandler
258
+ )
259
+ useEventListener(document, 'mouseup', (evt) => {
260
+ const mouseX = evt.pageX
261
+ const mouseY = evt.pageY
271
262
  if (
272
263
  mouseX < divLeft ||
273
264
  mouseX > divRight ||
@@ -276,7 +267,7 @@ export default defineComponent({
276
267
  ) {
277
268
  reset()
278
269
  }
279
- off(document, 'mousemove', _dragHandler)
270
+ removeMousemove()
280
271
  })
281
272
 
282
273
  e.preventDefault()
@@ -350,7 +341,7 @@ export default defineComponent({
350
341
  watch(currentImg, () => {
351
342
  nextTick(() => {
352
343
  const $img = img.value
353
- if (!$img.complete) {
344
+ if (!$img?.complete) {
354
345
  loading.value = true
355
346
  }
356
347
  })
@@ -358,11 +349,11 @@ export default defineComponent({
358
349
 
359
350
  watch(index, (val) => {
360
351
  reset()
361
- emit(SWITCH_EVENT, val)
352
+ emit('switch', val)
362
353
  })
363
354
 
364
355
  onMounted(() => {
365
- deviceSupportInstall()
356
+ registerEventListener()
366
357
  // add tabindex then wrapper can be focusable via Javascript
367
358
  // focus wrapper so arrow key can't cause inner scroll behavior underneath
368
359
  wrapper.value?.focus?.()
@@ -1,7 +1,7 @@
1
1
  import { nextTick, ref } from 'vue'
2
2
  import { mount } from '@vue/test-utils'
3
3
  import { sleep, defineGetter } from '@element-plus/test-utils'
4
- import Input from '../src/index.vue'
4
+ import Input from '../src/input.vue'
5
5
 
6
6
  const _mount = (options) =>
7
7
  mount({
@@ -84,17 +84,17 @@ describe('Input.vue', () => {
84
84
 
85
85
  const elCount = wrapper.find('.el-input__count-inner')
86
86
  expect(elCount.exists()).toBe(true)
87
- expect(elCount.text()).toBe('3/4')
87
+ expect(elCount.text()).toBe('3 / 4')
88
88
 
89
89
  vm.inputVal = '1👌3😄'
90
90
  await sleep()
91
91
  expect(nativeInput.value).toBe('1👌3😄')
92
- expect(elCount.text()).toBe('4/4')
92
+ expect(elCount.text()).toBe('4 / 4')
93
93
 
94
94
  vm.inputVal = '哈哈1👌3😄'
95
95
  await sleep()
96
96
  expect(nativeInput.value).toBe('哈哈1👌3😄')
97
- expect(elCount.text()).toBe('6/4')
97
+ expect(elCount.text()).toBe('6 / 4')
98
98
  expect(vm.$el.classList.contains('is-exceed')).toBe(true)
99
99
  })
100
100
 
@@ -113,12 +113,12 @@ describe('Input.vue', () => {
113
113
 
114
114
  const elCount = wrapper.find('.el-input__count')
115
115
  expect(elCount.exists()).toBe(true)
116
- expect(elCount.text()).toBe('3/4')
116
+ expect(elCount.text()).toBe('3 / 4')
117
117
 
118
118
  vm.inputVal = '哈哈1👌3😄'
119
119
  await sleep()
120
120
  expect(nativeInput.value).toBe('哈哈1👌3😄')
121
- expect(elCount.text()).toBe('6/4')
121
+ expect(elCount.text()).toBe('6 / 4')
122
122
  expect(vm.$el.classList.contains('is-exceed')).toBe(true)
123
123
  })
124
124
  })
@@ -343,7 +343,7 @@ describe('Input.vue', () => {
343
343
  ref.autosize.minRows = 5
344
344
  ref.resizeTextarea()
345
345
  // Atfer this textarea min-height (style) will change
346
- const nowMinHeight = ref.computedTextareaStyle.minHeight
346
+ const nowMinHeight = ref.computedTextareaStyle[1].minHeight
347
347
  expect(originMinHeight).not.toEqual(nowMinHeight)
348
348
  })
349
349
  })
@@ -1,13 +1,8 @@
1
- import Input from './src/index.vue'
1
+ import { withInstall } from '@element-plus/utils/with-install'
2
2
 
3
- import type { App } from 'vue'
4
- import type { SFCWithInstall } from '@element-plus/utils/types'
3
+ import Input from './src/input.vue'
5
4
 
6
- Input.install = (app: App): void => {
7
- app.component(Input.name, Input)
8
- }
5
+ export const ElInput = withInstall(Input)
6
+ export default ElInput
9
7
 
10
- const _Input = Input as SFCWithInstall<typeof Input>
11
-
12
- export default _Input
13
- export const ElInput = _Input
8
+ export * from './src/input'
@@ -1,4 +1,6 @@
1
- let hiddenTextarea: HTMLTextAreaElement
1
+ import { isNumber } from '@element-plus/utils/util'
2
+
3
+ let hiddenTextarea: HTMLTextAreaElement | undefined = undefined
2
4
 
3
5
  const HIDDEN_STYLE = `
4
6
  height:0 !important;
@@ -60,10 +62,10 @@ function calculateNodeStyling(targetElement: Element): NodeStyle {
60
62
  return { contextStyle, paddingSize, borderSize, boxSizing }
61
63
  }
62
64
 
63
- export default function calcTextareaHeight(
64
- targetElement: HTMLInputElement,
65
+ export function calcTextareaHeight(
66
+ targetElement: HTMLTextAreaElement,
65
67
  minRows = 1,
66
- maxRows = null
68
+ maxRows?: number
67
69
  ): TextAreaHeight {
68
70
  if (!hiddenTextarea) {
69
71
  hiddenTextarea = document.createElement('textarea')
@@ -88,7 +90,7 @@ export default function calcTextareaHeight(
88
90
  hiddenTextarea.value = ''
89
91
  const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize
90
92
 
91
- if (minRows !== null) {
93
+ if (isNumber(minRows)) {
92
94
  let minHeight = singleRowHeight * minRows
93
95
  if (boxSizing === 'border-box') {
94
96
  minHeight = minHeight + paddingSize + borderSize
@@ -96,7 +98,7 @@ export default function calcTextareaHeight(
96
98
  height = Math.max(minHeight, height)
97
99
  result.minHeight = `${minHeight}px`
98
100
  }
99
- if (maxRows !== null) {
101
+ if (isNumber(maxRows)) {
100
102
  let maxHeight = singleRowHeight * maxRows
101
103
  if (boxSizing === 'border-box') {
102
104
  maxHeight = maxHeight + paddingSize + borderSize
@@ -105,7 +107,7 @@ export default function calcTextareaHeight(
105
107
  }
106
108
  result.height = `${height}px`
107
109
  hiddenTextarea.parentNode?.removeChild(hiddenTextarea)
108
- hiddenTextarea = null
110
+ hiddenTextarea = undefined
109
111
 
110
112
  return result
111
113
  }
@@ -0,0 +1,100 @@
1
+ import { isString } from '@vue/shared'
2
+ import { useFormItemProps } from '@element-plus/hooks'
3
+ import { buildProps, definePropType, mutable } from '@element-plus/utils/props'
4
+ import { UPDATE_MODEL_EVENT } from '@element-plus/utils/constants'
5
+ import type { StyleValue } from '@element-plus/utils/types'
6
+ import type { ExtractPropTypes } from 'vue'
7
+
8
+ type AutoSize = { minRows?: number; maxRows?: number } | boolean
9
+
10
+ export const inputProps = buildProps({
11
+ ...useFormItemProps,
12
+ modelValue: {
13
+ type: definePropType<string | number | null | undefined>(undefined),
14
+ default: '',
15
+ },
16
+ type: {
17
+ type: String,
18
+ default: 'text',
19
+ },
20
+ resize: {
21
+ type: String,
22
+ values: ['none', 'both', 'horizontal', 'vertical'],
23
+ },
24
+ autosize: {
25
+ type: definePropType<AutoSize>([Boolean, Object]),
26
+ default: false,
27
+ },
28
+ autocomplete: {
29
+ type: String,
30
+ default: 'off',
31
+ },
32
+ placeholder: {
33
+ type: String,
34
+ },
35
+ form: {
36
+ type: String,
37
+ default: '',
38
+ },
39
+ readonly: {
40
+ type: Boolean,
41
+ default: false,
42
+ },
43
+ clearable: {
44
+ type: Boolean,
45
+ default: false,
46
+ },
47
+ showPassword: {
48
+ type: Boolean,
49
+ default: false,
50
+ },
51
+ showWordLimit: {
52
+ type: Boolean,
53
+ default: false,
54
+ },
55
+ suffixIcon: {
56
+ type: String,
57
+ default: '',
58
+ },
59
+ prefixIcon: {
60
+ type: String,
61
+ default: '',
62
+ },
63
+ label: {
64
+ type: String,
65
+ },
66
+ tabindex: {
67
+ type: [Number, String],
68
+ },
69
+ validateEvent: {
70
+ type: Boolean,
71
+ default: true,
72
+ },
73
+ inputStyle: {
74
+ type: definePropType<StyleValue>([Object, Array, String]),
75
+ default: () => mutable({} as const),
76
+ },
77
+ maxlength: {
78
+ type: [Number, String],
79
+ },
80
+ widget: {
81
+ type: String
82
+ }
83
+ } as const)
84
+ export type InputProps = ExtractPropTypes<typeof inputProps>
85
+
86
+ export const inputEmits = {
87
+ [UPDATE_MODEL_EVENT]: (value: string) => isString(value),
88
+ input: (value: string) => isString(value),
89
+ change: (value: string) => isString(value),
90
+ focus: (evt: FocusEvent) => evt instanceof FocusEvent,
91
+ blur: (evt: FocusEvent) => evt instanceof FocusEvent,
92
+ clear: () => true,
93
+ mouseleave: (evt: MouseEvent) => evt instanceof MouseEvent,
94
+ mouseenter: (evt: MouseEvent) => evt instanceof MouseEvent,
95
+ keydown: (evt: KeyboardEvent) => evt instanceof KeyboardEvent,
96
+ compositionstart: (evt: CompositionEvent) => evt instanceof CompositionEvent,
97
+ compositionupdate: (evt: CompositionEvent) => evt instanceof CompositionEvent,
98
+ compositionend: (evt: CompositionEvent) => evt instanceof CompositionEvent,
99
+ }
100
+ export type InputEmits = typeof inputEmits