element-sim 1.1.8 → 1.1.10

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 (579) hide show
  1. package/CHANGELOG.en-US.md +2085 -2085
  2. package/CHANGELOG.es.md +2092 -2092
  3. package/CHANGELOG.fr-FR.md +2085 -2085
  4. package/CHANGELOG.zh-CN.md +32 -22
  5. package/LICENSE +21 -21
  6. package/README.md +148 -148
  7. package/lib/cascader-panel.js +2 -2
  8. package/lib/cascader.js +2 -2
  9. package/lib/date-picker.js +5 -5
  10. package/lib/element-sim.common.js +62 -51
  11. package/lib/index.js +1 -1
  12. package/lib/input.js +14 -3
  13. package/lib/locale/format.js +10 -10
  14. package/lib/menu.js +25 -25
  15. package/lib/mixins/migrating.js +20 -20
  16. package/lib/result.js +8 -8
  17. package/lib/theme-chalk/base.css +1 -1
  18. package/lib/theme-chalk/dialog.css +1 -1
  19. package/lib/theme-chalk/drawer.css +1 -1
  20. package/lib/theme-chalk/icon.css +1 -1
  21. package/lib/theme-chalk/index.css +1 -1
  22. package/lib/time-picker.js +5 -5
  23. package/lib/time-select.js +5 -5
  24. package/lib/utils/after-leave.js +7 -7
  25. package/lib/utils/aria-dialog.js +16 -16
  26. package/lib/utils/aria-utils.js +25 -25
  27. package/lib/utils/clickoutside.js +7 -7
  28. package/lib/utils/date.js +37 -37
  29. package/lib/utils/lodash.js +9292 -9292
  30. package/lib/utils/popper.js +321 -321
  31. package/lib/utils/types.js +3 -3
  32. package/lib/utils/vue-popper.js +7 -7
  33. package/package.json +151 -151
  34. package/packages/alert/index.js +8 -8
  35. package/packages/alert/src/main.vue +94 -94
  36. package/packages/aside/index.js +8 -8
  37. package/packages/aside/src/main.vue +20 -20
  38. package/packages/autocomplete/index.js +8 -8
  39. package/packages/autocomplete/src/autocomplete-suggestions.vue +76 -76
  40. package/packages/autocomplete/src/autocomplete.vue +285 -285
  41. package/packages/avatar/index.js +8 -8
  42. package/packages/avatar/src/main.vue +107 -107
  43. package/packages/backtop/index.js +8 -8
  44. package/packages/backtop/src/main.vue +110 -110
  45. package/packages/badge/index.js +8 -8
  46. package/packages/badge/src/main.vue +53 -53
  47. package/packages/breadcrumb/index.js +8 -8
  48. package/packages/breadcrumb/src/breadcrumb-item.vue +41 -41
  49. package/packages/breadcrumb/src/breadcrumb.vue +34 -34
  50. package/packages/breadcrumb-item/index.js +8 -8
  51. package/packages/button/index.js +8 -8
  52. package/packages/button/src/button-group.vue +10 -10
  53. package/packages/button/src/button.vue +78 -78
  54. package/packages/button-group/index.js +8 -8
  55. package/packages/calendar/index.js +8 -8
  56. package/packages/calendar/src/date-table.vue +200 -200
  57. package/packages/calendar/src/main.vue +280 -280
  58. package/packages/card/index.js +8 -8
  59. package/packages/card/src/main.vue +23 -23
  60. package/packages/carousel/index.js +8 -8
  61. package/packages/carousel/src/item.vue +138 -138
  62. package/packages/carousel/src/main.vue +315 -315
  63. package/packages/carousel-item/index.js +8 -8
  64. package/packages/cascader/index.js +8 -8
  65. package/packages/cascader/src/cascader.vue +663 -663
  66. package/packages/cascader-panel/index.js +8 -8
  67. package/packages/cascader-panel/src/cascader-menu.vue +138 -138
  68. package/packages/cascader-panel/src/cascader-node.vue +246 -246
  69. package/packages/cascader-panel/src/cascader-panel.vue +391 -391
  70. package/packages/cascader-panel/src/node.js +166 -166
  71. package/packages/cascader-panel/src/store.js +58 -58
  72. package/packages/checkbox/index.js +8 -8
  73. package/packages/checkbox/src/checkbox-button.vue +199 -199
  74. package/packages/checkbox/src/checkbox-group.vue +48 -48
  75. package/packages/checkbox/src/checkbox.vue +222 -222
  76. package/packages/checkbox-button/index.js +8 -8
  77. package/packages/checkbox-group/index.js +8 -8
  78. package/packages/col/index.js +9 -9
  79. package/packages/col/src/col.js +71 -71
  80. package/packages/collapse/index.js +9 -9
  81. package/packages/collapse/src/collapse-item.vue +114 -114
  82. package/packages/collapse/src/collapse.vue +73 -73
  83. package/packages/collapse-item/index.js +8 -8
  84. package/packages/color-picker/index.js +8 -8
  85. package/packages/color-picker/src/color.js +317 -317
  86. package/packages/color-picker/src/components/alpha-slider.vue +132 -132
  87. package/packages/color-picker/src/components/hue-slider.vue +123 -123
  88. package/packages/color-picker/src/components/picker-dropdown.vue +121 -121
  89. package/packages/color-picker/src/components/predefine.vue +60 -60
  90. package/packages/color-picker/src/components/sv-panel.vue +100 -100
  91. package/packages/color-picker/src/draggable.js +36 -36
  92. package/packages/color-picker/src/main.vue +188 -188
  93. package/packages/container/index.js +8 -8
  94. package/packages/container/src/main.vue +33 -33
  95. package/packages/date-picker/index.js +8 -8
  96. package/packages/date-picker/src/basic/date-table.vue +441 -441
  97. package/packages/date-picker/src/basic/month-table.vue +269 -269
  98. package/packages/date-picker/src/basic/time-spinner.vue +304 -304
  99. package/packages/date-picker/src/basic/year-table.vue +111 -111
  100. package/packages/date-picker/src/panel/date-range.vue +680 -680
  101. package/packages/date-picker/src/panel/date.vue +609 -609
  102. package/packages/date-picker/src/panel/month-range.vue +289 -289
  103. package/packages/date-picker/src/panel/time-range.vue +248 -248
  104. package/packages/date-picker/src/panel/time-select.vue +178 -178
  105. package/packages/date-picker/src/panel/time.vue +186 -186
  106. package/packages/date-picker/src/picker/date-picker.js +43 -43
  107. package/packages/date-picker/src/picker/time-picker.js +39 -39
  108. package/packages/date-picker/src/picker/time-select.js +21 -21
  109. package/packages/date-picker/src/picker.vue +956 -956
  110. package/packages/descriptions/index.js +8 -8
  111. package/packages/descriptions/src/descriptions-item.js +30 -30
  112. package/packages/descriptions/src/descriptions-row.js +116 -116
  113. package/packages/descriptions/src/index.js +180 -180
  114. package/packages/descriptions-item/index.js +8 -8
  115. package/packages/dialog/index.js +8 -8
  116. package/packages/dialog/src/component.vue +212 -212
  117. package/packages/divider/index.js +8 -8
  118. package/packages/divider/src/main.vue +37 -37
  119. package/packages/drawer/index.js +8 -8
  120. package/packages/drawer/src/main.vue +208 -208
  121. package/packages/dropdown/index.js +8 -8
  122. package/packages/dropdown/src/dropdown-item.vue +37 -37
  123. package/packages/dropdown/src/dropdown-menu.vue +63 -63
  124. package/packages/dropdown/src/dropdown.vue +293 -293
  125. package/packages/dropdown-item/index.js +8 -8
  126. package/packages/dropdown-menu/index.js +8 -8
  127. package/packages/empty/index.js +7 -7
  128. package/packages/empty/src/img-empty.vue +132 -132
  129. package/packages/empty/src/index.vue +50 -50
  130. package/packages/footer/index.js +8 -8
  131. package/packages/footer/src/main.vue +20 -20
  132. package/packages/form/index.js +8 -8
  133. package/packages/form/src/form-item.vue +324 -324
  134. package/packages/form/src/form.vue +182 -182
  135. package/packages/form/src/label-wrap.vue +78 -78
  136. package/packages/form-item/index.js +8 -8
  137. package/packages/header/index.js +8 -8
  138. package/packages/header/src/main.vue +20 -20
  139. package/packages/icon/index.js +8 -8
  140. package/packages/icon/src/icon.vue +13 -13
  141. package/packages/image/index.js +8 -8
  142. package/packages/image/src/image-viewer.vue +330 -330
  143. package/packages/image/src/main.vue +249 -249
  144. package/packages/infinite-scroll/index.js +8 -8
  145. package/packages/infinite-scroll/src/main.js +150 -150
  146. package/packages/input/index.js +8 -8
  147. package/packages/input/src/calcTextareaHeight.js +104 -104
  148. package/packages/input/src/input.vue +444 -440
  149. package/packages/input-number/index.js +8 -8
  150. package/packages/input-number/src/input-number.vue +283 -283
  151. package/packages/link/index.js +8 -8
  152. package/packages/link/src/main.vue +53 -53
  153. package/packages/loading/index.js +11 -11
  154. package/packages/loading/src/directive.js +133 -133
  155. package/packages/loading/src/index.js +106 -106
  156. package/packages/loading/src/loading.vue +41 -41
  157. package/packages/main/index.js +8 -8
  158. package/packages/main/src/main.vue +12 -12
  159. package/packages/menu/index.js +8 -8
  160. package/packages/menu/src/menu-item-group.vue +45 -45
  161. package/packages/menu/src/menu-item.vue +112 -112
  162. package/packages/menu/src/menu-mixin.js +44 -44
  163. package/packages/menu/src/menu.vue +325 -325
  164. package/packages/menu/src/submenu.vue +349 -349
  165. package/packages/menu-item/index.js +8 -8
  166. package/packages/menu-item-group/index.js +8 -8
  167. package/packages/message/index.js +2 -2
  168. package/packages/message/src/main.js +91 -91
  169. package/packages/message/src/main.vue +117 -117
  170. package/packages/message-box/index.js +2 -2
  171. package/packages/message-box/src/main.js +216 -216
  172. package/packages/message-box/src/main.vue +332 -332
  173. package/packages/notification/index.js +2 -2
  174. package/packages/notification/src/main.js +94 -94
  175. package/packages/notification/src/main.vue +152 -152
  176. package/packages/option/index.js +8 -8
  177. package/packages/option-group/index.js +8 -8
  178. package/packages/page-header/index.js +8 -8
  179. package/packages/page-header/src/main.vue +30 -30
  180. package/packages/pagination/index.js +8 -8
  181. package/packages/pagination/src/pager.vue +163 -163
  182. package/packages/pagination/src/pagination.js +386 -386
  183. package/packages/popconfirm/index.js +8 -8
  184. package/packages/popconfirm/src/main.vue +104 -104
  185. package/packages/popover/index.js +14 -14
  186. package/packages/popover/src/directive.js +20 -20
  187. package/packages/popover/src/main.vue +237 -237
  188. package/packages/progress/index.js +8 -8
  189. package/packages/progress/src/progress.vue +235 -235
  190. package/packages/radio/index.js +8 -8
  191. package/packages/radio/src/radio-button.vue +115 -115
  192. package/packages/radio/src/radio-group.vue +113 -113
  193. package/packages/radio/src/radio.vue +134 -134
  194. package/packages/radio-button/index.js +8 -8
  195. package/packages/radio-group/index.js +8 -8
  196. package/packages/rate/index.js +8 -8
  197. package/packages/rate/src/main.vue +348 -348
  198. package/packages/result/index.js +8 -8
  199. package/packages/result/src/icon-error.vue +13 -13
  200. package/packages/result/src/icon-info.vue +13 -13
  201. package/packages/result/src/icon-success.vue +13 -13
  202. package/packages/result/src/icon-warning.vue +13 -13
  203. package/packages/result/src/index.vue +65 -65
  204. package/packages/row/index.js +9 -9
  205. package/packages/row/src/row.js +44 -44
  206. package/packages/scrollbar/index.js +8 -8
  207. package/packages/scrollbar/src/bar.js +92 -92
  208. package/packages/scrollbar/src/main.js +130 -130
  209. package/packages/scrollbar/src/util.js +34 -34
  210. package/packages/select/index.js +8 -8
  211. package/packages/select/src/navigation-mixin.js +54 -54
  212. package/packages/select/src/option-group.vue +60 -60
  213. package/packages/select/src/option.vue +168 -168
  214. package/packages/select/src/select-dropdown.vue +74 -74
  215. package/packages/select/src/select.vue +900 -900
  216. package/packages/skeleton/index.js +8 -8
  217. package/packages/skeleton/src/img-placeholder.vue +16 -16
  218. package/packages/skeleton/src/index.vue +76 -76
  219. package/packages/skeleton/src/item.vue +21 -21
  220. package/packages/skeleton-item/index.js +8 -8
  221. package/packages/slider/index.js +8 -8
  222. package/packages/slider/src/button.vue +238 -238
  223. package/packages/slider/src/main.vue +427 -427
  224. package/packages/slider/src/marker.js +18 -18
  225. package/packages/spinner/index.js +8 -8
  226. package/packages/spinner/src/spinner.vue +27 -27
  227. package/packages/statistic/index.js +8 -8
  228. package/packages/statistic/src/main.vue +204 -204
  229. package/packages/step/index.js +8 -8
  230. package/packages/steps/README.md +69 -69
  231. package/packages/steps/index.js +8 -8
  232. package/packages/steps/src/step.vue +184 -184
  233. package/packages/steps/src/steps.vue +68 -68
  234. package/packages/submenu/index.js +8 -8
  235. package/packages/switch/index.js +9 -9
  236. package/packages/switch/src/component.vue +174 -174
  237. package/packages/tab-pane/index.js +8 -8
  238. package/packages/table/index.js +8 -8
  239. package/packages/table/src/config.js +124 -124
  240. package/packages/table/src/dropdown.js +28 -28
  241. package/packages/table/src/filter-panel.vue +194 -194
  242. package/packages/table/src/layout-observer.js +68 -68
  243. package/packages/table/src/store/current.js +76 -76
  244. package/packages/table/src/store/expand.js +65 -65
  245. package/packages/table/src/store/helper.js +41 -41
  246. package/packages/table/src/store/index.js +147 -147
  247. package/packages/table/src/store/tree.js +209 -209
  248. package/packages/table/src/store/watcher.js +381 -381
  249. package/packages/table/src/table-body.js +469 -469
  250. package/packages/table/src/table-column.js +319 -319
  251. package/packages/table/src/table-footer.js +153 -153
  252. package/packages/table/src/table-header.js +511 -511
  253. package/packages/table/src/table-layout.js +249 -249
  254. package/packages/table/src/table-row.js +101 -101
  255. package/packages/table/src/table.vue +712 -712
  256. package/packages/table/src/util.js +273 -273
  257. package/packages/table-column/index.js +8 -8
  258. package/packages/tabs/index.js +8 -8
  259. package/packages/tabs/src/tab-bar.vue +57 -57
  260. package/packages/tabs/src/tab-nav.vue +294 -294
  261. package/packages/tabs/src/tab-pane.vue +56 -56
  262. package/packages/tabs/src/tabs.vue +191 -191
  263. package/packages/tag/index.js +8 -8
  264. package/packages/tag/src/tag.vue +58 -58
  265. package/packages/theme-chalk/README.md +33 -33
  266. package/packages/theme-chalk/lib/base.css +1 -1
  267. package/packages/theme-chalk/lib/dialog.css +1 -1
  268. package/packages/theme-chalk/lib/drawer.css +1 -1
  269. package/packages/theme-chalk/lib/icon.css +1 -1
  270. package/packages/theme-chalk/lib/index.css +1 -1
  271. package/packages/theme-chalk/package.json +35 -35
  272. package/packages/theme-chalk/src/.DS_Store +0 -0
  273. package/packages/theme-chalk/src/alert.scss +147 -147
  274. package/packages/theme-chalk/src/aside.scss +7 -7
  275. package/packages/theme-chalk/src/autocomplete.scss +80 -80
  276. package/packages/theme-chalk/src/avatar.scss +51 -51
  277. package/packages/theme-chalk/src/backtop.scss +22 -22
  278. package/packages/theme-chalk/src/badge.scss +57 -57
  279. package/packages/theme-chalk/src/base.scss +2 -2
  280. package/packages/theme-chalk/src/breadcrumb.scss +55 -55
  281. package/packages/theme-chalk/src/button.scss +262 -262
  282. package/packages/theme-chalk/src/calendar.scss +79 -79
  283. package/packages/theme-chalk/src/card.scss +32 -32
  284. package/packages/theme-chalk/src/carousel-item.scss +49 -49
  285. package/packages/theme-chalk/src/carousel.scss +161 -161
  286. package/packages/theme-chalk/src/cascader-panel.scss +120 -120
  287. package/packages/theme-chalk/src/cascader.scss +182 -182
  288. package/packages/theme-chalk/src/checkbox.scss +359 -359
  289. package/packages/theme-chalk/src/col.scss +155 -155
  290. package/packages/theme-chalk/src/collapse.scss +63 -63
  291. package/packages/theme-chalk/src/color-picker.scss +384 -384
  292. package/packages/theme-chalk/src/common/popup.scss +42 -42
  293. package/packages/theme-chalk/src/common/transition.scss +98 -98
  294. package/packages/theme-chalk/src/common/var.scss +1030 -1030
  295. package/packages/theme-chalk/src/container.scss +14 -14
  296. package/packages/theme-chalk/src/date-picker/date-picker.scss +97 -97
  297. package/packages/theme-chalk/src/date-picker/date-range-picker.scss +101 -101
  298. package/packages/theme-chalk/src/date-picker/date-table.scss +151 -151
  299. package/packages/theme-chalk/src/date-picker/month-table.scss +82 -82
  300. package/packages/theme-chalk/src/date-picker/picker-panel.scss +117 -117
  301. package/packages/theme-chalk/src/date-picker/picker.scss +197 -197
  302. package/packages/theme-chalk/src/date-picker/time-picker.scss +85 -85
  303. package/packages/theme-chalk/src/date-picker/time-range-picker.scss +31 -31
  304. package/packages/theme-chalk/src/date-picker/time-spinner.scss +110 -110
  305. package/packages/theme-chalk/src/date-picker/year-table.scss +51 -51
  306. package/packages/theme-chalk/src/date-picker.scss +11 -11
  307. package/packages/theme-chalk/src/descriptions-item.scss +42 -42
  308. package/packages/theme-chalk/src/descriptions.scss +111 -111
  309. package/packages/theme-chalk/src/dialog.scss +125 -123
  310. package/packages/theme-chalk/src/display.scss +12 -12
  311. package/packages/theme-chalk/src/divider.scss +46 -46
  312. package/packages/theme-chalk/src/drawer.scss +220 -219
  313. package/packages/theme-chalk/src/dropdown.scss +182 -182
  314. package/packages/theme-chalk/src/empty.scss +45 -45
  315. package/packages/theme-chalk/src/footer.scss +8 -8
  316. package/packages/theme-chalk/src/form.scss +167 -167
  317. package/packages/theme-chalk/src/header.scss +8 -8
  318. package/packages/theme-chalk/src/icon.scss +1393 -1167
  319. package/packages/theme-chalk/src/image.scss +179 -179
  320. package/packages/theme-chalk/src/input-number.scss +180 -180
  321. package/packages/theme-chalk/src/input.scss +360 -360
  322. package/packages/theme-chalk/src/link.scss +81 -81
  323. package/packages/theme-chalk/src/loading.scss +96 -96
  324. package/packages/theme-chalk/src/main.scss +12 -12
  325. package/packages/theme-chalk/src/menu.scss +289 -289
  326. package/packages/theme-chalk/src/message-box.scss +226 -226
  327. package/packages/theme-chalk/src/message.scss +120 -120
  328. package/packages/theme-chalk/src/mixins/_button.scss +81 -81
  329. package/packages/theme-chalk/src/mixins/config.scss +4 -4
  330. package/packages/theme-chalk/src/mixins/function.scss +44 -44
  331. package/packages/theme-chalk/src/mixins/mixins.scss +190 -190
  332. package/packages/theme-chalk/src/mixins/utils.scss +38 -38
  333. package/packages/theme-chalk/src/notification.scss +99 -99
  334. package/packages/theme-chalk/src/option-group.scss +42 -42
  335. package/packages/theme-chalk/src/option.scss +36 -36
  336. package/packages/theme-chalk/src/page-header.scss +41 -41
  337. package/packages/theme-chalk/src/pagination.scss +295 -295
  338. package/packages/theme-chalk/src/popconfirm.scss +16 -16
  339. package/packages/theme-chalk/src/popover.scss +40 -40
  340. package/packages/theme-chalk/src/popper.scss +100 -100
  341. package/packages/theme-chalk/src/progress.scss +141 -141
  342. package/packages/theme-chalk/src/radio-button.scss +113 -113
  343. package/packages/theme-chalk/src/radio-group.scss +9 -9
  344. package/packages/theme-chalk/src/radio.scss +199 -199
  345. package/packages/theme-chalk/src/rate.scss +49 -49
  346. package/packages/theme-chalk/src/reset.scss +79 -79
  347. package/packages/theme-chalk/src/result.scss +61 -61
  348. package/packages/theme-chalk/src/row.scss +43 -43
  349. package/packages/theme-chalk/src/scrollbar.scss +72 -72
  350. package/packages/theme-chalk/src/select-dropdown.scss +62 -62
  351. package/packages/theme-chalk/src/select.scss +152 -152
  352. package/packages/theme-chalk/src/skeleton-item.scss +84 -84
  353. package/packages/theme-chalk/src/skeleton.scss +40 -40
  354. package/packages/theme-chalk/src/slider.scss +250 -250
  355. package/packages/theme-chalk/src/spinner.scss +44 -44
  356. package/packages/theme-chalk/src/statistic.scss +38 -38
  357. package/packages/theme-chalk/src/step.scss +317 -317
  358. package/packages/theme-chalk/src/steps.scss +20 -20
  359. package/packages/theme-chalk/src/switch.scss +116 -116
  360. package/packages/theme-chalk/src/table-column.scss +96 -96
  361. package/packages/theme-chalk/src/table.scss +564 -564
  362. package/packages/theme-chalk/src/tabs.scss +602 -602
  363. package/packages/theme-chalk/src/tag.scss +163 -163
  364. package/packages/theme-chalk/src/time-picker.scss +8 -8
  365. package/packages/theme-chalk/src/time-select.scss +37 -37
  366. package/packages/theme-chalk/src/timeline-item.scss +86 -86
  367. package/packages/theme-chalk/src/timeline.scss +14 -14
  368. package/packages/theme-chalk/src/tooltip.scss +141 -141
  369. package/packages/theme-chalk/src/transfer.scss +227 -227
  370. package/packages/theme-chalk/src/tree.scss +123 -123
  371. package/packages/theme-chalk/src/upload.scss +603 -603
  372. package/packages/time-picker/index.js +8 -8
  373. package/packages/time-select/index.js +8 -8
  374. package/packages/timeline/index.js +8 -8
  375. package/packages/timeline/src/item.vue +73 -73
  376. package/packages/timeline/src/main.vue +33 -33
  377. package/packages/timeline-item/index.js +8 -8
  378. package/packages/tooltip/index.js +8 -8
  379. package/packages/tooltip/src/main.js +242 -242
  380. package/packages/transfer/index.js +8 -8
  381. package/packages/transfer/src/main.vue +231 -231
  382. package/packages/transfer/src/transfer-panel.vue +251 -251
  383. package/packages/tree/index.js +8 -8
  384. package/packages/tree/src/model/node.js +484 -484
  385. package/packages/tree/src/model/tree-store.js +340 -340
  386. package/packages/tree/src/model/util.js +27 -27
  387. package/packages/tree/src/tree-node.vue +279 -279
  388. package/packages/tree/src/tree.vue +496 -496
  389. package/packages/upload/index.js +8 -8
  390. package/packages/upload/src/ajax.js +85 -85
  391. package/packages/upload/src/index.vue +338 -338
  392. package/packages/upload/src/upload-dragger.vue +70 -70
  393. package/packages/upload/src/upload-list.vue +105 -105
  394. package/packages/upload/src/upload.vue +211 -211
  395. package/src/directives/mousewheel.js +18 -18
  396. package/src/directives/repeat-click.js +26 -26
  397. package/src/index.js +259 -259
  398. package/src/locale/format.js +46 -46
  399. package/src/locale/index.js +48 -48
  400. package/src/locale/lang/af-ZA.js +123 -123
  401. package/src/locale/lang/ar.js +122 -122
  402. package/src/locale/lang/az.js +126 -126
  403. package/src/locale/lang/bg.js +123 -123
  404. package/src/locale/lang/bn.js +126 -126
  405. package/src/locale/lang/ca.js +122 -122
  406. package/src/locale/lang/cs-CZ.js +125 -125
  407. package/src/locale/lang/da.js +122 -122
  408. package/src/locale/lang/de.js +124 -124
  409. package/src/locale/lang/ee.js +123 -123
  410. package/src/locale/lang/el.js +123 -123
  411. package/src/locale/lang/en.js +123 -123
  412. package/src/locale/lang/eo.js +123 -123
  413. package/src/locale/lang/es.js +122 -122
  414. package/src/locale/lang/eu.js +123 -123
  415. package/src/locale/lang/fa.js +123 -123
  416. package/src/locale/lang/fi.js +123 -123
  417. package/src/locale/lang/fr.js +122 -122
  418. package/src/locale/lang/he.js +123 -123
  419. package/src/locale/lang/hr.js +123 -123
  420. package/src/locale/lang/hu.js +122 -122
  421. package/src/locale/lang/hy-AM.js +123 -123
  422. package/src/locale/lang/id.js +123 -123
  423. package/src/locale/lang/is.js +124 -124
  424. package/src/locale/lang/it.js +122 -122
  425. package/src/locale/lang/ja.js +123 -123
  426. package/src/locale/lang/kg.js +123 -123
  427. package/src/locale/lang/km.js +123 -123
  428. package/src/locale/lang/ko.js +123 -123
  429. package/src/locale/lang/ku.js +123 -123
  430. package/src/locale/lang/kz.js +123 -123
  431. package/src/locale/lang/lo-LA.js +126 -126
  432. package/src/locale/lang/lt.js +123 -123
  433. package/src/locale/lang/lv.js +123 -123
  434. package/src/locale/lang/mn.js +123 -123
  435. package/src/locale/lang/ms.js +122 -122
  436. package/src/locale/lang/nb-NO.js +122 -122
  437. package/src/locale/lang/nl.js +123 -123
  438. package/src/locale/lang/pl.js +123 -123
  439. package/src/locale/lang/pt-br.js +123 -123
  440. package/src/locale/lang/pt.js +123 -123
  441. package/src/locale/lang/ro.js +123 -123
  442. package/src/locale/lang/ru-RU.js +123 -123
  443. package/src/locale/lang/si.js +123 -123
  444. package/src/locale/lang/sk.js +125 -125
  445. package/src/locale/lang/sl.js +123 -123
  446. package/src/locale/lang/sr-Latn.js +123 -123
  447. package/src/locale/lang/sr.js +123 -123
  448. package/src/locale/lang/sv-SE.js +123 -123
  449. package/src/locale/lang/sw.js +123 -123
  450. package/src/locale/lang/ta.js +122 -122
  451. package/src/locale/lang/th.js +123 -123
  452. package/src/locale/lang/tk.js +123 -123
  453. package/src/locale/lang/tr-TR.js +123 -123
  454. package/src/locale/lang/ua.js +123 -123
  455. package/src/locale/lang/ug-CN.js +123 -123
  456. package/src/locale/lang/uz-UZ.js +123 -123
  457. package/src/locale/lang/vi.js +123 -123
  458. package/src/locale/lang/zh-CN.js +123 -123
  459. package/src/locale/lang/zh-TW.js +123 -123
  460. package/src/mixins/emitter.js +33 -33
  461. package/src/mixins/focus.js +9 -9
  462. package/src/mixins/locale.js +9 -9
  463. package/src/mixins/migrating.js +54 -54
  464. package/src/transitions/collapse-transition.js +77 -77
  465. package/src/utils/after-leave.js +27 -27
  466. package/src/utils/aria-dialog.js +90 -90
  467. package/src/utils/aria-utils.js +122 -122
  468. package/src/utils/clickoutside.js +76 -76
  469. package/src/utils/date-util.js +282 -282
  470. package/src/utils/date.js +368 -368
  471. package/src/utils/dom.js +227 -227
  472. package/src/utils/lodash.js +18075 -18075
  473. package/src/utils/menu/aria-menubar.js +14 -14
  474. package/src/utils/menu/aria-menuitem.js +49 -49
  475. package/src/utils/menu/aria-submenu.js +59 -59
  476. package/src/utils/merge.js +15 -15
  477. package/src/utils/popper.js +1276 -1276
  478. package/src/utils/popup/index.js +218 -218
  479. package/src/utils/popup/popup-manager.js +194 -194
  480. package/src/utils/resize-event.js +36 -36
  481. package/src/utils/scroll-into-view.js +27 -27
  482. package/src/utils/scrollbar-width.js +29 -29
  483. package/src/utils/shared.js +7 -7
  484. package/src/utils/types.js +40 -40
  485. package/src/utils/util.js +245 -245
  486. package/src/utils/vdom.js +5 -5
  487. package/src/utils/vue-popper.js +198 -198
  488. package/types/alert.d.ts +31 -31
  489. package/types/aside.d.ts +7 -7
  490. package/types/autocomplete.d.ts +78 -78
  491. package/types/avatar.d.ts +20 -20
  492. package/types/backtop.d.ts +16 -16
  493. package/types/badge.d.ts +16 -16
  494. package/types/breadcrumb-item.d.ts +10 -10
  495. package/types/breadcrumb.d.ts +10 -10
  496. package/types/button-group.d.ts +4 -4
  497. package/types/button.d.ts +37 -37
  498. package/types/calendar.d.ts +15 -15
  499. package/types/card.d.ts +26 -26
  500. package/types/carousel-item.d.ts +10 -10
  501. package/types/carousel.d.ts +57 -57
  502. package/types/cascader-panel.d.ts +72 -72
  503. package/types/cascader.d.ts +65 -65
  504. package/types/checkbox-button.d.ts +22 -22
  505. package/types/checkbox-group.d.ts +22 -22
  506. package/types/checkbox.d.ts +34 -34
  507. package/types/col.d.ts +46 -46
  508. package/types/collapse-item.d.ts +26 -26
  509. package/types/collapse.d.ts +10 -10
  510. package/types/color-picker.d.ts +21 -21
  511. package/types/component.d.ts +13 -13
  512. package/types/container.d.ts +7 -7
  513. package/types/date-picker.d.ts +124 -124
  514. package/types/descriptions-item.d.ts +37 -37
  515. package/types/descriptions.d.ts +52 -52
  516. package/types/dialog.d.ts +62 -62
  517. package/types/divider.d.ts +12 -12
  518. package/types/drawer.d.ts +63 -63
  519. package/types/dropdown-item.d.ts +16 -16
  520. package/types/dropdown-menu.d.ts +4 -4
  521. package/types/dropdown.d.ts +38 -38
  522. package/types/element-ui.d.ts +381 -381
  523. package/types/empty.d.ts +31 -31
  524. package/types/footer.d.ts +7 -7
  525. package/types/form-item.d.ts +37 -37
  526. package/types/form.d.ts +82 -82
  527. package/types/header.d.ts +7 -7
  528. package/types/icon.d.ts +7 -7
  529. package/types/image.d.ts +43 -43
  530. package/types/index.d.ts +4 -4
  531. package/types/infinite-scroll.d.ts +5 -5
  532. package/types/input-number.d.ts +47 -47
  533. package/types/input.d.ts +107 -107
  534. package/types/link.d.ts +25 -25
  535. package/types/loading.d.ts +62 -62
  536. package/types/main.d.ts +4 -4
  537. package/types/menu-item-group.d.ts +7 -7
  538. package/types/menu-item.d.ts +10 -10
  539. package/types/menu.d.ts +46 -46
  540. package/types/message-box.d.ts +176 -176
  541. package/types/message.d.ts +90 -90
  542. package/types/notification.d.ts +84 -84
  543. package/types/option-group.d.ts +10 -10
  544. package/types/option.d.ts +13 -13
  545. package/types/page-header.d.ts +10 -10
  546. package/types/pagination.d.ts +43 -43
  547. package/types/popconfirm.d.ts +29 -29
  548. package/types/popover.d.ts +71 -71
  549. package/types/progress.d.ts +37 -37
  550. package/types/radio-button.d.ts +16 -16
  551. package/types/radio-group.d.ts +18 -18
  552. package/types/radio.d.ts +19 -19
  553. package/types/rate.d.ts +64 -64
  554. package/types/result.d.ts +33 -33
  555. package/types/row.d.ts +25 -25
  556. package/types/select.d.ts +90 -90
  557. package/types/skeleton-item.d.ts +7 -7
  558. package/types/skeleton.d.ts +33 -33
  559. package/types/slider.d.ts +68 -68
  560. package/types/spinner.d.ts +16 -16
  561. package/types/statistic.d.ts +37 -37
  562. package/types/step.d.ts +34 -34
  563. package/types/steps.d.ts +28 -28
  564. package/types/submenu.d.ts +22 -22
  565. package/types/switch.d.ts +43 -43
  566. package/types/tab-pane.d.ts +19 -19
  567. package/types/table-column.d.ts +117 -117
  568. package/types/table.d.ts +177 -177
  569. package/types/tabs.d.ts +31 -31
  570. package/types/tag.d.ts +28 -28
  571. package/types/time-picker.d.ts +63 -63
  572. package/types/time-select.d.ts +56 -56
  573. package/types/timeline-item.d.ts +20 -20
  574. package/types/timeline.d.ts +6 -6
  575. package/types/tooltip.d.ts +52 -52
  576. package/types/transfer.d.ts +73 -73
  577. package/types/tree.d.ts +266 -266
  578. package/types/upload.d.ts +124 -124
  579. package/web-types.json +4195 -4195
@@ -1,469 +1,469 @@
1
- import { arrayFindIndex } from 'element-sim/src/utils/util';
2
- import { getCell, getColumnByCell, getRowIdentity, objectEquals } from './util';
3
- import { getStyle, hasClass, removeClass, addClass } from 'element-sim/src/utils/dom';
4
- import ElCheckbox from 'element-sim/packages/checkbox';
5
- import ElTooltip from 'element-sim/packages/tooltip';
6
- import debounce from 'throttle-debounce/debounce';
7
- import LayoutObserver from './layout-observer';
8
- import { mapStates } from './store/helper';
9
- import TableRow from './table-row.js';
10
-
11
- export default {
12
- name: 'ElTableBody',
13
-
14
- mixins: [LayoutObserver],
15
-
16
- components: {
17
- ElCheckbox,
18
- ElTooltip,
19
- TableRow
20
- },
21
-
22
- props: {
23
- store: {
24
- required: true
25
- },
26
- stripe: Boolean,
27
- context: {},
28
- rowClassName: [String, Function],
29
- rowStyle: [Object, Function],
30
- fixed: String,
31
- highlight: Boolean
32
- },
33
-
34
- render(h) {
35
- const data = this.data || [];
36
- return (
37
- <table
38
- class="el-table__body"
39
- cellspacing="0"
40
- cellpadding="0"
41
- border="0">
42
- <colgroup>
43
- {
44
- this.columns.map(column => <col name={column.id} key={column.id} />)
45
- }
46
- </colgroup>
47
- <tbody>
48
- {
49
- data.reduce((acc, row) => {
50
- return acc.concat(this.wrappedRowRender(row, acc.length));
51
- }, [])
52
- }
53
- <el-tooltip effect={this.table.tooltipEffect} placement="top" ref="tooltip" content={this.tooltipContent}></el-tooltip>
54
- </tbody>
55
- </table>
56
- );
57
- },
58
-
59
- computed: {
60
- table() {
61
- return this.$parent;
62
- },
63
-
64
- ...mapStates({
65
- data: 'data',
66
- columns: 'columns',
67
- treeIndent: 'indent',
68
- leftFixedLeafCount: 'fixedLeafColumnsLength',
69
- rightFixedLeafCount: 'rightFixedLeafColumnsLength',
70
- columnsCount: states => states.columns.length,
71
- leftFixedCount: states => states.fixedColumns.length,
72
- rightFixedCount: states => states.rightFixedColumns.length,
73
- hasExpandColumn: states => states.columns.some(({ type }) => type === 'expand')
74
- }),
75
-
76
- columnsHidden() {
77
- return this.columns.map((column, index) => this.isColumnHidden(index));
78
- },
79
-
80
- firstDefaultColumnIndex() {
81
- return arrayFindIndex(this.columns, ({ type }) => type === 'default');
82
- }
83
- },
84
-
85
- watch: {
86
- // don't trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/
87
- // update DOM manually. see https://github.com/ElemeFE/element/pull/13954/files#diff-9b450c00d0a9dec0ffad5a3176972e40
88
- 'store.states.hoverRow'(newVal, oldVal) {
89
- if (!this.store.states.isComplex || this.$isServer) return;
90
- let raf = window.requestAnimationFrame;
91
- if (!raf) {
92
- raf = (fn) => setTimeout(fn, 16);
93
- }
94
- raf(() => {
95
- const rows = this.$el.querySelectorAll('.el-table__row');
96
- const oldRow = rows[oldVal];
97
- const newRow = rows[newVal];
98
- if (oldRow) {
99
- removeClass(oldRow, 'hover-row');
100
- }
101
- if (newRow) {
102
- addClass(newRow, 'hover-row');
103
- }
104
- });
105
- }
106
- },
107
-
108
- data() {
109
- return {
110
- tooltipContent: ''
111
- };
112
- },
113
-
114
- created() {
115
- this.activateTooltip = debounce(50, tooltip => tooltip.handleShowPopper());
116
- },
117
-
118
- methods: {
119
- getKeyOfRow(row, index) {
120
- const rowKey = this.table.rowKey;
121
- if (rowKey) {
122
- return getRowIdentity(row, rowKey);
123
- }
124
- return index;
125
- },
126
-
127
- isColumnHidden(index) {
128
- if (this.fixed === true || this.fixed === 'left') {
129
- return index >= this.leftFixedLeafCount;
130
- } else if (this.fixed === 'right') {
131
- return index < this.columnsCount - this.rightFixedLeafCount;
132
- } else {
133
- return (index < this.leftFixedLeafCount) || (index >= this.columnsCount - this.rightFixedLeafCount);
134
- }
135
- },
136
-
137
- getSpan(row, column, rowIndex, columnIndex) {
138
- let rowspan = 1;
139
- let colspan = 1;
140
- const fn = this.table.spanMethod;
141
- if (typeof fn === 'function') {
142
- const result = fn({
143
- row,
144
- column,
145
- rowIndex,
146
- columnIndex
147
- });
148
- if (Array.isArray(result)) {
149
- rowspan = result[0];
150
- colspan = result[1];
151
- } else if (typeof result === 'object') {
152
- rowspan = result.rowspan;
153
- colspan = result.colspan;
154
- }
155
- }
156
- return { rowspan, colspan };
157
- },
158
-
159
- getRowStyle(row, rowIndex) {
160
- const rowStyle = this.table.rowStyle;
161
- if (typeof rowStyle === 'function') {
162
- return rowStyle.call(null, {
163
- row,
164
- rowIndex
165
- });
166
- }
167
- return rowStyle || null;
168
- },
169
-
170
- getRowClass(row, rowIndex) {
171
- let selection = this.store.states.selection;
172
- const classes = ['el-table__row'];
173
- if (this.table.highlightCurrentRow && row === this.store.states.currentRow) {
174
- classes.push('current-row');
175
- }
176
-
177
- if (this.table.highlightSelectionRow) {
178
- for (let i = 0; i < selection.length; i++) {
179
- if (objectEquals(row, selection[i])) {
180
- classes.push('selection-row');
181
- }
182
- };
183
- }
184
-
185
- if (this.stripe && rowIndex % 2 === 1) {
186
- classes.push('el-table__row--striped');
187
- }
188
- const rowClassName = this.table.rowClassName;
189
- if (typeof rowClassName === 'string') {
190
- classes.push(rowClassName);
191
- } else if (typeof rowClassName === 'function') {
192
- classes.push(rowClassName.call(null, {
193
- row,
194
- rowIndex
195
- }));
196
- }
197
-
198
- if (this.store.states.expandRows.indexOf(row) > -1) {
199
- classes.push('expanded');
200
- }
201
-
202
- return classes;
203
- },
204
-
205
- getCellStyle(rowIndex, columnIndex, row, column) {
206
- const cellStyle = this.table.cellStyle;
207
- if (typeof cellStyle === 'function') {
208
- return cellStyle.call(null, {
209
- rowIndex,
210
- columnIndex,
211
- row,
212
- column
213
- });
214
- }
215
- return cellStyle;
216
- },
217
-
218
- getCellClass(rowIndex, columnIndex, row, column) {
219
- const classes = [column.id, column.align, column.className];
220
-
221
- if (this.isColumnHidden(columnIndex)) {
222
- classes.push('is-hidden');
223
- }
224
-
225
- const cellClassName = this.table.cellClassName;
226
- if (typeof cellClassName === 'string') {
227
- classes.push(cellClassName);
228
- } else if (typeof cellClassName === 'function') {
229
- classes.push(cellClassName.call(null, {
230
- rowIndex,
231
- columnIndex,
232
- row,
233
- column
234
- }));
235
- }
236
-
237
- classes.push('el-table__cell');
238
-
239
- return classes.join(' ');
240
- },
241
-
242
- getColspanRealWidth(columns, colspan, index) {
243
- if (colspan < 1) {
244
- return columns[index].realWidth;
245
- }
246
- const widthArr = columns.map(({ realWidth }) => realWidth).slice(index, index + colspan);
247
- return widthArr.reduce((acc, width) => acc + width, -1);
248
- },
249
-
250
- handleCellMouseEnter(event, row) {
251
- const table = this.table;
252
- const cell = getCell(event);
253
-
254
- if (cell) {
255
- const column = getColumnByCell(table, cell);
256
- const hoverState = table.hoverState = { cell, column, row };
257
- table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);
258
- }
259
-
260
- // 判断是否text-overflow, 如果是就显示tooltip
261
- const cellChild = event.target.querySelector('.cell');
262
- if (!(hasClass(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {
263
- return;
264
- }
265
- // use range width instead of scrollWidth to determine whether the text is overflowing
266
- // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3
267
- const range = document.createRange();
268
- range.setStart(cellChild, 0);
269
- range.setEnd(cellChild, cellChild.childNodes.length);
270
- const rangeWidth = range.getBoundingClientRect().width;
271
- const padding = (parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0) +
272
- (parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0);
273
- if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) && this.$refs.tooltip) {
274
- const tooltip = this.$refs.tooltip;
275
- // TODO 会引起整个 Table 的重新渲染,需要优化
276
- this.tooltipContent = cell.innerText || cell.textContent;
277
- tooltip.referenceElm = cell;
278
- tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');
279
- tooltip.doDestroy();
280
- tooltip.setExpectedState(true);
281
- this.activateTooltip(tooltip);
282
- }
283
- },
284
-
285
- handleCellMouseLeave(event) {
286
- const tooltip = this.$refs.tooltip;
287
- if (tooltip) {
288
- tooltip.setExpectedState(false);
289
- tooltip.handleClosePopper();
290
- }
291
- const cell = getCell(event);
292
- if (!cell) return;
293
-
294
- const oldHoverState = this.table.hoverState || {};
295
- this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);
296
- },
297
-
298
- handleMouseEnter: debounce(30, function(index) {
299
- this.store.commit('setHoverRow', index);
300
- }),
301
-
302
- handleMouseLeave: debounce(30, function() {
303
- this.store.commit('setHoverRow', null);
304
- }),
305
-
306
- handleContextMenu(event, row) {
307
- this.handleEvent(event, row, 'contextmenu');
308
- },
309
-
310
- handleDoubleClick(event, row) {
311
- this.handleEvent(event, row, 'dblclick');
312
- },
313
-
314
- handleClick(event, row) {
315
- this.store.commit('setCurrentRow', row);
316
- this.handleEvent(event, row, 'click');
317
- },
318
-
319
- handleEvent(event, row, name) {
320
- const table = this.table;
321
- const cell = getCell(event);
322
- let column;
323
- if (cell) {
324
- column = getColumnByCell(table, cell);
325
- if (column) {
326
- table.$emit(`cell-${name}`, row, column, cell, event);
327
- }
328
- }
329
- table.$emit(`row-${name}`, row, column, event);
330
- },
331
-
332
- rowRender(row, $index, treeRowData) {
333
- const { treeIndent, columns, firstDefaultColumnIndex } = this;
334
- const rowClasses = this.getRowClass(row, $index);
335
- let display = true;
336
- if (treeRowData) {
337
- rowClasses.push('el-table__row--level-' + treeRowData.level);
338
- display = treeRowData.display;
339
- }
340
- // 指令 v-show 会覆盖 row-style 中 display
341
- // 使用 :style 代替 v-show https://github.com/ElemeFE/element/issues/16995
342
- let displayStyle = display ? null : {
343
- display: 'none'
344
- };
345
- return (
346
- <TableRow
347
- style={[displayStyle, this.getRowStyle(row, $index)]}
348
- class={rowClasses}
349
- key={this.getKeyOfRow(row, $index)}
350
- nativeOn-dblclick={($event) => this.handleDoubleClick($event, row)}
351
- nativeOn-click={($event) => this.handleClick($event, row)}
352
- nativeOn-contextmenu={($event) => this.handleContextMenu($event, row)}
353
- nativeOn-mouseenter={_ => this.handleMouseEnter($index)}
354
- nativeOn-mouseleave={this.handleMouseLeave}
355
- columns={columns}
356
- row={row}
357
- index={$index}
358
- store={this.store}
359
- context={this.context || this.table.$vnode.context}
360
- firstDefaultColumnIndex={firstDefaultColumnIndex}
361
- treeRowData={treeRowData}
362
- treeIndent={treeIndent}
363
- columnsHidden={this.columnsHidden}
364
- getSpan={this.getSpan}
365
- getColspanRealWidth={this.getColspanRealWidth}
366
- getCellStyle={this.getCellStyle}
367
- getCellClass={this.getCellClass}
368
- handleCellMouseEnter={this.handleCellMouseEnter}
369
- handleCellMouseLeave={this.handleCellMouseLeave}
370
- isSelected={this.store.isSelected(row)}
371
- isExpanded={this.store.states.expandRows.indexOf(row) > -1}
372
- fixed={this.fixed}
373
- >
374
- </TableRow>
375
- );
376
- },
377
-
378
- wrappedRowRender(row, $index) {
379
- const store = this.store;
380
- const { isRowExpanded, assertRowKey } = store;
381
- const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;
382
- if (this.hasExpandColumn && isRowExpanded(row)) {
383
- const renderExpanded = this.table.renderExpanded;
384
- const tr = this.rowRender(row, $index);
385
- if (!renderExpanded) {
386
- console.error('[Element Error]renderExpanded is required.');
387
- return tr;
388
- }
389
- // 使用二维数组,避免修改 $index
390
- return [[
391
- tr,
392
- <tr key={'expanded-row__' + tr.key}>
393
- <td colspan={ this.columnsCount } class="el-table__cell el-table__expanded-cell">
394
- { renderExpanded(this.$createElement, { row, $index, store: this.store }) }
395
- </td>
396
- </tr>]];
397
- } else if (Object.keys(treeData).length) {
398
- assertRowKey();
399
- // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算
400
- // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作
401
- const key = getRowIdentity(row, rowKey);
402
- let cur = treeData[key];
403
- let treeRowData = null;
404
- if (cur) {
405
- treeRowData = {
406
- expanded: cur.expanded,
407
- level: cur.level,
408
- display: true
409
- };
410
- if (typeof cur.lazy === 'boolean') {
411
- if (typeof cur.loaded === 'boolean' && cur.loaded) {
412
- treeRowData.noLazyChildren = !(cur.children && cur.children.length);
413
- }
414
- treeRowData.loading = cur.loading;
415
- }
416
- }
417
- const tmp = [this.rowRender(row, $index, treeRowData)];
418
- // 渲染嵌套数据
419
- if (cur) {
420
- // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index
421
- let i = 0;
422
- const traverse = (children, parent) => {
423
- if (!(children && children.length && parent)) return;
424
- children.forEach(node => {
425
- // 父节点的 display 状态影响子节点的显示状态
426
- const innerTreeRowData = {
427
- display: parent.display && parent.expanded,
428
- level: parent.level + 1
429
- };
430
- const childKey = getRowIdentity(node, rowKey);
431
- if (childKey === undefined || childKey === null) {
432
- throw new Error('for nested data item, row-key is required.');
433
- }
434
- cur = { ...treeData[childKey] };
435
- // 对于当前节点,分成有无子节点两种情况。
436
- // 如果包含子节点的,设置 expanded 属性。
437
- // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。
438
- if (cur) {
439
- innerTreeRowData.expanded = cur.expanded;
440
- // 懒加载的某些节点,level 未知
441
- cur.level = cur.level || innerTreeRowData.level;
442
- cur.display = !!(cur.expanded && innerTreeRowData.display);
443
- if (typeof cur.lazy === 'boolean') {
444
- if (typeof cur.loaded === 'boolean' && cur.loaded) {
445
- innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);
446
- }
447
- innerTreeRowData.loading = cur.loading;
448
- }
449
- }
450
- i++;
451
- tmp.push(this.rowRender(node, $index + i, innerTreeRowData));
452
- if (cur) {
453
- const nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];
454
- traverse(nodes, cur);
455
- }
456
- });
457
- };
458
- // 对于 root 节点,display 一定为 true
459
- cur.display = true;
460
- const nodes = lazyTreeNodeMap[key] || row[childrenColumnName];
461
- traverse(nodes, cur);
462
- }
463
- return tmp;
464
- } else {
465
- return this.rowRender(row, $index);
466
- }
467
- }
468
- }
469
- };
1
+ import { arrayFindIndex } from 'element-sim/src/utils/util';
2
+ import { getCell, getColumnByCell, getRowIdentity, objectEquals } from './util';
3
+ import { getStyle, hasClass, removeClass, addClass } from 'element-sim/src/utils/dom';
4
+ import ElCheckbox from 'element-sim/packages/checkbox';
5
+ import ElTooltip from 'element-sim/packages/tooltip';
6
+ import debounce from 'throttle-debounce/debounce';
7
+ import LayoutObserver from './layout-observer';
8
+ import { mapStates } from './store/helper';
9
+ import TableRow from './table-row.js';
10
+
11
+ export default {
12
+ name: 'ElTableBody',
13
+
14
+ mixins: [LayoutObserver],
15
+
16
+ components: {
17
+ ElCheckbox,
18
+ ElTooltip,
19
+ TableRow
20
+ },
21
+
22
+ props: {
23
+ store: {
24
+ required: true
25
+ },
26
+ stripe: Boolean,
27
+ context: {},
28
+ rowClassName: [String, Function],
29
+ rowStyle: [Object, Function],
30
+ fixed: String,
31
+ highlight: Boolean
32
+ },
33
+
34
+ render(h) {
35
+ const data = this.data || [];
36
+ return (
37
+ <table
38
+ class="el-table__body"
39
+ cellspacing="0"
40
+ cellpadding="0"
41
+ border="0">
42
+ <colgroup>
43
+ {
44
+ this.columns.map(column => <col name={column.id} key={column.id} />)
45
+ }
46
+ </colgroup>
47
+ <tbody>
48
+ {
49
+ data.reduce((acc, row) => {
50
+ return acc.concat(this.wrappedRowRender(row, acc.length));
51
+ }, [])
52
+ }
53
+ <el-tooltip effect={this.table.tooltipEffect} placement="top" ref="tooltip" content={this.tooltipContent}></el-tooltip>
54
+ </tbody>
55
+ </table>
56
+ );
57
+ },
58
+
59
+ computed: {
60
+ table() {
61
+ return this.$parent;
62
+ },
63
+
64
+ ...mapStates({
65
+ data: 'data',
66
+ columns: 'columns',
67
+ treeIndent: 'indent',
68
+ leftFixedLeafCount: 'fixedLeafColumnsLength',
69
+ rightFixedLeafCount: 'rightFixedLeafColumnsLength',
70
+ columnsCount: states => states.columns.length,
71
+ leftFixedCount: states => states.fixedColumns.length,
72
+ rightFixedCount: states => states.rightFixedColumns.length,
73
+ hasExpandColumn: states => states.columns.some(({ type }) => type === 'expand')
74
+ }),
75
+
76
+ columnsHidden() {
77
+ return this.columns.map((column, index) => this.isColumnHidden(index));
78
+ },
79
+
80
+ firstDefaultColumnIndex() {
81
+ return arrayFindIndex(this.columns, ({ type }) => type === 'default');
82
+ }
83
+ },
84
+
85
+ watch: {
86
+ // don't trigger getter of currentRow in getCellClass. see https://jsfiddle.net/oe2b4hqt/
87
+ // update DOM manually. see https://github.com/ElemeFE/element/pull/13954/files#diff-9b450c00d0a9dec0ffad5a3176972e40
88
+ 'store.states.hoverRow'(newVal, oldVal) {
89
+ if (!this.store.states.isComplex || this.$isServer) return;
90
+ let raf = window.requestAnimationFrame;
91
+ if (!raf) {
92
+ raf = (fn) => setTimeout(fn, 16);
93
+ }
94
+ raf(() => {
95
+ const rows = this.$el.querySelectorAll('.el-table__row');
96
+ const oldRow = rows[oldVal];
97
+ const newRow = rows[newVal];
98
+ if (oldRow) {
99
+ removeClass(oldRow, 'hover-row');
100
+ }
101
+ if (newRow) {
102
+ addClass(newRow, 'hover-row');
103
+ }
104
+ });
105
+ }
106
+ },
107
+
108
+ data() {
109
+ return {
110
+ tooltipContent: ''
111
+ };
112
+ },
113
+
114
+ created() {
115
+ this.activateTooltip = debounce(50, tooltip => tooltip.handleShowPopper());
116
+ },
117
+
118
+ methods: {
119
+ getKeyOfRow(row, index) {
120
+ const rowKey = this.table.rowKey;
121
+ if (rowKey) {
122
+ return getRowIdentity(row, rowKey);
123
+ }
124
+ return index;
125
+ },
126
+
127
+ isColumnHidden(index) {
128
+ if (this.fixed === true || this.fixed === 'left') {
129
+ return index >= this.leftFixedLeafCount;
130
+ } else if (this.fixed === 'right') {
131
+ return index < this.columnsCount - this.rightFixedLeafCount;
132
+ } else {
133
+ return (index < this.leftFixedLeafCount) || (index >= this.columnsCount - this.rightFixedLeafCount);
134
+ }
135
+ },
136
+
137
+ getSpan(row, column, rowIndex, columnIndex) {
138
+ let rowspan = 1;
139
+ let colspan = 1;
140
+ const fn = this.table.spanMethod;
141
+ if (typeof fn === 'function') {
142
+ const result = fn({
143
+ row,
144
+ column,
145
+ rowIndex,
146
+ columnIndex
147
+ });
148
+ if (Array.isArray(result)) {
149
+ rowspan = result[0];
150
+ colspan = result[1];
151
+ } else if (typeof result === 'object') {
152
+ rowspan = result.rowspan;
153
+ colspan = result.colspan;
154
+ }
155
+ }
156
+ return { rowspan, colspan };
157
+ },
158
+
159
+ getRowStyle(row, rowIndex) {
160
+ const rowStyle = this.table.rowStyle;
161
+ if (typeof rowStyle === 'function') {
162
+ return rowStyle.call(null, {
163
+ row,
164
+ rowIndex
165
+ });
166
+ }
167
+ return rowStyle || null;
168
+ },
169
+
170
+ getRowClass(row, rowIndex) {
171
+ let selection = this.store.states.selection;
172
+ const classes = ['el-table__row'];
173
+ if (this.table.highlightCurrentRow && row === this.store.states.currentRow) {
174
+ classes.push('current-row');
175
+ }
176
+
177
+ if (this.table.highlightSelectionRow) {
178
+ for (let i = 0; i < selection.length; i++) {
179
+ if (objectEquals(row, selection[i])) {
180
+ classes.push('selection-row');
181
+ }
182
+ };
183
+ }
184
+
185
+ if (this.stripe && rowIndex % 2 === 1) {
186
+ classes.push('el-table__row--striped');
187
+ }
188
+ const rowClassName = this.table.rowClassName;
189
+ if (typeof rowClassName === 'string') {
190
+ classes.push(rowClassName);
191
+ } else if (typeof rowClassName === 'function') {
192
+ classes.push(rowClassName.call(null, {
193
+ row,
194
+ rowIndex
195
+ }));
196
+ }
197
+
198
+ if (this.store.states.expandRows.indexOf(row) > -1) {
199
+ classes.push('expanded');
200
+ }
201
+
202
+ return classes;
203
+ },
204
+
205
+ getCellStyle(rowIndex, columnIndex, row, column) {
206
+ const cellStyle = this.table.cellStyle;
207
+ if (typeof cellStyle === 'function') {
208
+ return cellStyle.call(null, {
209
+ rowIndex,
210
+ columnIndex,
211
+ row,
212
+ column
213
+ });
214
+ }
215
+ return cellStyle;
216
+ },
217
+
218
+ getCellClass(rowIndex, columnIndex, row, column) {
219
+ const classes = [column.id, column.align, column.className];
220
+
221
+ if (this.isColumnHidden(columnIndex)) {
222
+ classes.push('is-hidden');
223
+ }
224
+
225
+ const cellClassName = this.table.cellClassName;
226
+ if (typeof cellClassName === 'string') {
227
+ classes.push(cellClassName);
228
+ } else if (typeof cellClassName === 'function') {
229
+ classes.push(cellClassName.call(null, {
230
+ rowIndex,
231
+ columnIndex,
232
+ row,
233
+ column
234
+ }));
235
+ }
236
+
237
+ classes.push('el-table__cell');
238
+
239
+ return classes.join(' ');
240
+ },
241
+
242
+ getColspanRealWidth(columns, colspan, index) {
243
+ if (colspan < 1) {
244
+ return columns[index].realWidth;
245
+ }
246
+ const widthArr = columns.map(({ realWidth }) => realWidth).slice(index, index + colspan);
247
+ return widthArr.reduce((acc, width) => acc + width, -1);
248
+ },
249
+
250
+ handleCellMouseEnter(event, row) {
251
+ const table = this.table;
252
+ const cell = getCell(event);
253
+
254
+ if (cell) {
255
+ const column = getColumnByCell(table, cell);
256
+ const hoverState = table.hoverState = { cell, column, row };
257
+ table.$emit('cell-mouse-enter', hoverState.row, hoverState.column, hoverState.cell, event);
258
+ }
259
+
260
+ // 判断是否text-overflow, 如果是就显示tooltip
261
+ const cellChild = event.target.querySelector('.cell');
262
+ if (!(hasClass(cellChild, 'el-tooltip') && cellChild.childNodes.length)) {
263
+ return;
264
+ }
265
+ // use range width instead of scrollWidth to determine whether the text is overflowing
266
+ // to address a potential FireFox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1074543#c3
267
+ const range = document.createRange();
268
+ range.setStart(cellChild, 0);
269
+ range.setEnd(cellChild, cellChild.childNodes.length);
270
+ const rangeWidth = range.getBoundingClientRect().width;
271
+ const padding = (parseInt(getStyle(cellChild, 'paddingLeft'), 10) || 0) +
272
+ (parseInt(getStyle(cellChild, 'paddingRight'), 10) || 0);
273
+ if ((rangeWidth + padding > cellChild.offsetWidth || cellChild.scrollWidth > cellChild.offsetWidth) && this.$refs.tooltip) {
274
+ const tooltip = this.$refs.tooltip;
275
+ // TODO 会引起整个 Table 的重新渲染,需要优化
276
+ this.tooltipContent = cell.innerText || cell.textContent;
277
+ tooltip.referenceElm = cell;
278
+ tooltip.$refs.popper && (tooltip.$refs.popper.style.display = 'none');
279
+ tooltip.doDestroy();
280
+ tooltip.setExpectedState(true);
281
+ this.activateTooltip(tooltip);
282
+ }
283
+ },
284
+
285
+ handleCellMouseLeave(event) {
286
+ const tooltip = this.$refs.tooltip;
287
+ if (tooltip) {
288
+ tooltip.setExpectedState(false);
289
+ tooltip.handleClosePopper();
290
+ }
291
+ const cell = getCell(event);
292
+ if (!cell) return;
293
+
294
+ const oldHoverState = this.table.hoverState || {};
295
+ this.table.$emit('cell-mouse-leave', oldHoverState.row, oldHoverState.column, oldHoverState.cell, event);
296
+ },
297
+
298
+ handleMouseEnter: debounce(30, function(index) {
299
+ this.store.commit('setHoverRow', index);
300
+ }),
301
+
302
+ handleMouseLeave: debounce(30, function() {
303
+ this.store.commit('setHoverRow', null);
304
+ }),
305
+
306
+ handleContextMenu(event, row) {
307
+ this.handleEvent(event, row, 'contextmenu');
308
+ },
309
+
310
+ handleDoubleClick(event, row) {
311
+ this.handleEvent(event, row, 'dblclick');
312
+ },
313
+
314
+ handleClick(event, row) {
315
+ this.store.commit('setCurrentRow', row);
316
+ this.handleEvent(event, row, 'click');
317
+ },
318
+
319
+ handleEvent(event, row, name) {
320
+ const table = this.table;
321
+ const cell = getCell(event);
322
+ let column;
323
+ if (cell) {
324
+ column = getColumnByCell(table, cell);
325
+ if (column) {
326
+ table.$emit(`cell-${name}`, row, column, cell, event);
327
+ }
328
+ }
329
+ table.$emit(`row-${name}`, row, column, event);
330
+ },
331
+
332
+ rowRender(row, $index, treeRowData) {
333
+ const { treeIndent, columns, firstDefaultColumnIndex } = this;
334
+ const rowClasses = this.getRowClass(row, $index);
335
+ let display = true;
336
+ if (treeRowData) {
337
+ rowClasses.push('el-table__row--level-' + treeRowData.level);
338
+ display = treeRowData.display;
339
+ }
340
+ // 指令 v-show 会覆盖 row-style 中 display
341
+ // 使用 :style 代替 v-show https://github.com/ElemeFE/element/issues/16995
342
+ let displayStyle = display ? null : {
343
+ display: 'none'
344
+ };
345
+ return (
346
+ <TableRow
347
+ style={[displayStyle, this.getRowStyle(row, $index)]}
348
+ class={rowClasses}
349
+ key={this.getKeyOfRow(row, $index)}
350
+ nativeOn-dblclick={($event) => this.handleDoubleClick($event, row)}
351
+ nativeOn-click={($event) => this.handleClick($event, row)}
352
+ nativeOn-contextmenu={($event) => this.handleContextMenu($event, row)}
353
+ nativeOn-mouseenter={_ => this.handleMouseEnter($index)}
354
+ nativeOn-mouseleave={this.handleMouseLeave}
355
+ columns={columns}
356
+ row={row}
357
+ index={$index}
358
+ store={this.store}
359
+ context={this.context || this.table.$vnode.context}
360
+ firstDefaultColumnIndex={firstDefaultColumnIndex}
361
+ treeRowData={treeRowData}
362
+ treeIndent={treeIndent}
363
+ columnsHidden={this.columnsHidden}
364
+ getSpan={this.getSpan}
365
+ getColspanRealWidth={this.getColspanRealWidth}
366
+ getCellStyle={this.getCellStyle}
367
+ getCellClass={this.getCellClass}
368
+ handleCellMouseEnter={this.handleCellMouseEnter}
369
+ handleCellMouseLeave={this.handleCellMouseLeave}
370
+ isSelected={this.store.isSelected(row)}
371
+ isExpanded={this.store.states.expandRows.indexOf(row) > -1}
372
+ fixed={this.fixed}
373
+ >
374
+ </TableRow>
375
+ );
376
+ },
377
+
378
+ wrappedRowRender(row, $index) {
379
+ const store = this.store;
380
+ const { isRowExpanded, assertRowKey } = store;
381
+ const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states;
382
+ if (this.hasExpandColumn && isRowExpanded(row)) {
383
+ const renderExpanded = this.table.renderExpanded;
384
+ const tr = this.rowRender(row, $index);
385
+ if (!renderExpanded) {
386
+ console.error('[Element Error]renderExpanded is required.');
387
+ return tr;
388
+ }
389
+ // 使用二维数组,避免修改 $index
390
+ return [[
391
+ tr,
392
+ <tr key={'expanded-row__' + tr.key}>
393
+ <td colspan={ this.columnsCount } class="el-table__cell el-table__expanded-cell">
394
+ { renderExpanded(this.$createElement, { row, $index, store: this.store }) }
395
+ </td>
396
+ </tr>]];
397
+ } else if (Object.keys(treeData).length) {
398
+ assertRowKey();
399
+ // TreeTable 时,rowKey 必须由用户设定,不使用 getKeyOfRow 计算
400
+ // 在调用 rowRender 函数时,仍然会计算 rowKey,不太好的操作
401
+ const key = getRowIdentity(row, rowKey);
402
+ let cur = treeData[key];
403
+ let treeRowData = null;
404
+ if (cur) {
405
+ treeRowData = {
406
+ expanded: cur.expanded,
407
+ level: cur.level,
408
+ display: true
409
+ };
410
+ if (typeof cur.lazy === 'boolean') {
411
+ if (typeof cur.loaded === 'boolean' && cur.loaded) {
412
+ treeRowData.noLazyChildren = !(cur.children && cur.children.length);
413
+ }
414
+ treeRowData.loading = cur.loading;
415
+ }
416
+ }
417
+ const tmp = [this.rowRender(row, $index, treeRowData)];
418
+ // 渲染嵌套数据
419
+ if (cur) {
420
+ // currentRow 记录的是 index,所以还需主动增加 TreeTable 的 index
421
+ let i = 0;
422
+ const traverse = (children, parent) => {
423
+ if (!(children && children.length && parent)) return;
424
+ children.forEach(node => {
425
+ // 父节点的 display 状态影响子节点的显示状态
426
+ const innerTreeRowData = {
427
+ display: parent.display && parent.expanded,
428
+ level: parent.level + 1
429
+ };
430
+ const childKey = getRowIdentity(node, rowKey);
431
+ if (childKey === undefined || childKey === null) {
432
+ throw new Error('for nested data item, row-key is required.');
433
+ }
434
+ cur = { ...treeData[childKey] };
435
+ // 对于当前节点,分成有无子节点两种情况。
436
+ // 如果包含子节点的,设置 expanded 属性。
437
+ // 对于它子节点的 display 属性由它本身的 expanded 与 display 共同决定。
438
+ if (cur) {
439
+ innerTreeRowData.expanded = cur.expanded;
440
+ // 懒加载的某些节点,level 未知
441
+ cur.level = cur.level || innerTreeRowData.level;
442
+ cur.display = !!(cur.expanded && innerTreeRowData.display);
443
+ if (typeof cur.lazy === 'boolean') {
444
+ if (typeof cur.loaded === 'boolean' && cur.loaded) {
445
+ innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length);
446
+ }
447
+ innerTreeRowData.loading = cur.loading;
448
+ }
449
+ }
450
+ i++;
451
+ tmp.push(this.rowRender(node, $index + i, innerTreeRowData));
452
+ if (cur) {
453
+ const nodes = lazyTreeNodeMap[childKey] || node[childrenColumnName];
454
+ traverse(nodes, cur);
455
+ }
456
+ });
457
+ };
458
+ // 对于 root 节点,display 一定为 true
459
+ cur.display = true;
460
+ const nodes = lazyTreeNodeMap[key] || row[childrenColumnName];
461
+ traverse(nodes, cur);
462
+ }
463
+ return tmp;
464
+ } else {
465
+ return this.rowRender(row, $index);
466
+ }
467
+ }
468
+ }
469
+ };