vxe-pc-ui 4.20.25 → 4.20.26

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 (626) hide show
  1. package/dist/all.esm.js +15059 -10308
  2. package/dist/style.css +1 -1
  3. package/dist/style.mini.css +1 -1
  4. package/es/alert/src/alert.js +61 -36
  5. package/es/anchor/src/anchor-link.js +39 -20
  6. package/es/anchor/src/anchor.js +74 -45
  7. package/es/avatar/src/avatar.js +47 -27
  8. package/es/backtop/src/backtop.js +65 -40
  9. package/es/badge/src/badge.js +32 -16
  10. package/es/breadcrumb/src/breadcrumb-item.js +52 -27
  11. package/es/breadcrumb/src/breadcrumb.js +11 -8
  12. package/es/button/src/button-group.js +24 -18
  13. package/es/button/src/button.js +284 -185
  14. package/es/calendar/src/calendar.js +571 -358
  15. package/es/card/src/card.js +123 -68
  16. package/es/carousel/src/carousel-item.js +14 -7
  17. package/es/carousel/src/carousel.js +174 -112
  18. package/es/cascader/src/cascader.js +526 -380
  19. package/es/checkbox/src/button.js +90 -55
  20. package/es/checkbox/src/checkbox.js +60 -40
  21. package/es/checkbox/src/group.js +34 -26
  22. package/es/collapse/src/collapse-pane.js +33 -16
  23. package/es/collapse/src/collapse.js +133 -79
  24. package/es/color-picker/src/color-picker.js +489 -350
  25. package/es/components.d.ts +3 -1
  26. package/es/components.js +3 -2
  27. package/es/context-menu/src/context-menu.js +190 -110
  28. package/es/countdown/src/countdown.js +91 -59
  29. package/es/date-panel/src/date-panel.js +760 -450
  30. package/es/date-picker/src/date-picker.js +331 -228
  31. package/es/date-range-picker/src/date-range-picker.js +366 -265
  32. package/es/divider/src/divider.js +26 -12
  33. package/es/drawer/src/drawer.js +254 -154
  34. package/es/dynamics/index.js +38 -25
  35. package/es/empty/src/empty.js +53 -29
  36. package/es/form/render/index.js +66 -41
  37. package/es/form/src/form-config-item.js +22 -16
  38. package/es/form/src/form-group.js +23 -14
  39. package/es/form/src/form-item.js +23 -17
  40. package/es/form/src/form.js +139 -95
  41. package/es/form/src/itemInfo.js +2 -1
  42. package/es/form/src/render.js +207 -127
  43. package/es/form/src/util.js +8 -4
  44. package/es/icon/src/icon.js +14 -10
  45. package/es/icon/style.css +1 -1
  46. package/es/icon/style.mini.css +1 -1
  47. package/es/icon-picker/src/icon-picker.js +250 -157
  48. package/es/image/src/group.js +26 -20
  49. package/es/image/src/image.js +33 -32
  50. package/es/image/src/preview.js +182 -122
  51. package/es/image/src/util.js +6 -3
  52. package/es/index.esm.js +9 -8
  53. package/es/index.js +9 -8
  54. package/es/input/src/input.js +820 -507
  55. package/es/layout-aside/src/layout-aside.js +54 -38
  56. package/es/layout-body/src/layout-body.js +39 -27
  57. package/es/layout-container/src/layout-container.js +16 -9
  58. package/es/layout-footer/src/layout-footer.js +16 -7
  59. package/es/layout-header/src/layout-header.js +15 -7
  60. package/es/link/src/link.js +65 -44
  61. package/es/list/src/list.js +453 -333
  62. package/es/loading/index.js +8 -5
  63. package/es/loading/src/loading.js +60 -33
  64. package/es/mention/src/mention.js +2 -1
  65. package/es/menu/src/menu.js +341 -210
  66. package/es/modal/index.js +60 -37
  67. package/es/modal/src/modal.js +303 -205
  68. package/es/notice-bar/src/notice-bar.js +64 -37
  69. package/es/number-input/src/number-input.js +249 -172
  70. package/es/pager/src/pager.js +346 -202
  71. package/es/password-input/src/password-input.js +145 -105
  72. package/es/print/src/page-break.js +2 -1
  73. package/es/print/src/print.js +184 -99
  74. package/es/pulldown/src/pulldown.js +113 -71
  75. package/es/radio/src/button.js +92 -57
  76. package/es/radio/src/group.js +33 -25
  77. package/es/radio/src/radio.js +61 -41
  78. package/es/rate/src/rate.js +48 -36
  79. package/es/result/src/result.js +67 -35
  80. package/es/row/src/col.js +30 -16
  81. package/es/row/src/row.js +21 -14
  82. package/es/scrollbar/src/scrollbar.js +177 -145
  83. package/es/segmented/src/segmented.js +93 -60
  84. package/es/select/src/optgroup.js +7 -3
  85. package/es/select/src/select.js +483 -340
  86. package/es/select/src/util.js +6 -3
  87. package/es/slider/src/slider.js +108 -80
  88. package/es/space/src/space.js +40 -23
  89. package/es/splitter/src/splitter-panel.js +50 -25
  90. package/es/splitter/src/splitter.js +219 -144
  91. package/es/steps/src/steps.js +10 -5
  92. package/es/style.css +1 -1
  93. package/es/style.mini.css +1 -1
  94. package/es/switch/src/switch.js +85 -57
  95. package/es/table-select/src/table-select.js +232 -153
  96. package/es/table-transfer/src/table-transfer.js +10 -5
  97. package/es/tabs/src/tab-pane.js +33 -16
  98. package/es/tabs/src/tabs.js +363 -230
  99. package/es/tag/src/tag.js +61 -43
  100. package/es/text/src/text.js +89 -65
  101. package/es/text-ellipsis/src/text-ellipsis.js +82 -51
  102. package/es/textarea/src/textarea.js +116 -86
  103. package/es/timeline/src/timeline-item.js +2 -1
  104. package/es/timeline/src/timeline.js +2 -1
  105. package/es/tip/src/tip.js +53 -29
  106. package/es/tooltip/src/tooltip.js +114 -74
  107. package/es/tour/src/tour.js +2 -1
  108. package/es/transfer/src/transfer.js +42 -25
  109. package/es/tree/src/tree.js +709 -492
  110. package/es/tree-select/src/tree-select.js +320 -225
  111. package/es/ui/index.d.ts +0 -1
  112. package/es/ui/index.js +46 -3
  113. package/es/ui/src/dom.js +9 -6
  114. package/es/ui/src/log.js +1 -1
  115. package/es/ui/src/utils.d.ts +1 -1
  116. package/es/upload/src/upload.js +614 -398
  117. package/es/vxe-icon/style.css +1 -1
  118. package/es/vxe-icon/style.mini.css +1 -1
  119. package/es/watermark/src/util.js +15 -12
  120. package/es/watermark/src/watermark.js +55 -25
  121. package/lib/alert/src/alert.js +62 -37
  122. package/lib/anchor/src/anchor-link.js +39 -20
  123. package/lib/anchor/src/anchor.js +75 -46
  124. package/lib/avatar/src/avatar.js +52 -32
  125. package/lib/backtop/src/backtop.js +81 -56
  126. package/lib/badge/src/badge.js +35 -19
  127. package/lib/breadcrumb/src/breadcrumb-item.js +52 -27
  128. package/lib/breadcrumb/src/breadcrumb.js +13 -10
  129. package/lib/button/src/button-group.js +27 -21
  130. package/lib/button/src/button.js +306 -207
  131. package/lib/calendar/src/calendar.js +575 -362
  132. package/lib/card/src/card.js +133 -78
  133. package/lib/carousel/src/carousel-item.js +15 -8
  134. package/lib/carousel/src/carousel.js +182 -120
  135. package/lib/cascader/src/cascader.js +555 -409
  136. package/lib/checkbox/src/button.js +93 -58
  137. package/lib/checkbox/src/checkbox.js +63 -43
  138. package/lib/checkbox/src/group.js +37 -29
  139. package/lib/collapse/src/collapse-pane.js +34 -17
  140. package/lib/collapse/src/collapse.js +139 -85
  141. package/lib/color-picker/src/color-picker.js +516 -377
  142. package/lib/components.js +3 -2
  143. package/lib/context-menu/src/context-menu.js +212 -132
  144. package/lib/countdown/src/countdown.js +95 -63
  145. package/lib/date-panel/src/date-panel.js +776 -466
  146. package/lib/date-picker/src/date-picker.js +377 -274
  147. package/lib/date-range-picker/src/date-range-picker.js +401 -300
  148. package/lib/divider/src/divider.js +31 -17
  149. package/lib/drawer/src/drawer.js +255 -155
  150. package/lib/dynamics/index.js +38 -25
  151. package/lib/empty/src/empty.js +55 -31
  152. package/lib/form/render/index.js +68 -43
  153. package/lib/form/src/form-config-item.js +24 -18
  154. package/lib/form/src/form-group.js +25 -16
  155. package/lib/form/src/form-item.js +25 -19
  156. package/lib/form/src/form.js +140 -96
  157. package/lib/form/src/itemInfo.js +4 -3
  158. package/lib/form/src/render.js +214 -134
  159. package/lib/form/src/util.js +9 -5
  160. package/lib/icon/src/icon.js +17 -13
  161. package/lib/icon/style/style.css +1 -1
  162. package/lib/icon/style/style.mini.css +1 -1
  163. package/lib/icon-picker/src/icon-picker.js +251 -158
  164. package/lib/image/src/group.js +26 -20
  165. package/lib/image/src/image.js +41 -40
  166. package/lib/image/src/preview.js +206 -146
  167. package/lib/image/src/util.js +6 -3
  168. package/lib/index.common.js +9 -8
  169. package/lib/index.js +9 -8
  170. package/lib/index.umd.js +15131 -10364
  171. package/lib/index.umd.min.js +3 -3
  172. package/lib/input/src/input.js +878 -565
  173. package/lib/layout-aside/src/layout-aside.js +61 -45
  174. package/lib/layout-body/src/layout-body.js +47 -35
  175. package/lib/layout-container/src/layout-container.js +18 -11
  176. package/lib/layout-footer/src/layout-footer.js +17 -8
  177. package/lib/layout-header/src/layout-header.js +16 -8
  178. package/lib/link/src/link.js +69 -48
  179. package/lib/list/src/list.js +456 -336
  180. package/lib/loading/index.js +8 -5
  181. package/lib/loading/src/loading.js +69 -42
  182. package/lib/mention/src/mention.js +4 -3
  183. package/lib/menu/src/menu.js +351 -220
  184. package/lib/modal/index.js +60 -37
  185. package/lib/modal/src/modal.js +306 -208
  186. package/lib/notice-bar/src/notice-bar.js +70 -43
  187. package/lib/number-input/src/number-input.js +290 -213
  188. package/lib/pager/src/pager.js +347 -203
  189. package/lib/password-input/src/password-input.js +155 -115
  190. package/lib/print/src/page-break.js +3 -2
  191. package/lib/print/src/print.js +193 -108
  192. package/lib/pulldown/src/pulldown.js +128 -86
  193. package/lib/radio/src/button.js +96 -61
  194. package/lib/radio/src/group.js +37 -29
  195. package/lib/radio/src/radio.js +65 -45
  196. package/lib/rate/src/rate.js +50 -38
  197. package/lib/result/src/result.js +68 -36
  198. package/lib/row/src/col.js +32 -18
  199. package/lib/row/src/row.js +25 -18
  200. package/lib/scrollbar/src/scrollbar.js +178 -146
  201. package/lib/segmented/src/segmented.js +97 -64
  202. package/lib/select/src/optgroup.js +7 -3
  203. package/lib/select/src/select.js +486 -343
  204. package/lib/select/src/util.js +6 -3
  205. package/lib/slider/src/slider.js +122 -94
  206. package/lib/space/src/space.js +54 -37
  207. package/lib/splitter/src/splitter-panel.js +51 -26
  208. package/lib/splitter/src/splitter.js +233 -158
  209. package/lib/steps/src/steps.js +11 -6
  210. package/lib/style.css +1 -1
  211. package/lib/style.mini.css +1 -1
  212. package/lib/switch/src/switch.js +87 -59
  213. package/lib/table-select/src/table-select.js +234 -155
  214. package/lib/table-transfer/src/table-transfer.js +12 -7
  215. package/lib/tabs/src/tab-pane.js +34 -17
  216. package/lib/tabs/src/tabs.js +365 -232
  217. package/lib/tag/src/tag.js +67 -49
  218. package/lib/text/src/text.js +100 -76
  219. package/lib/text-ellipsis/src/text-ellipsis.js +86 -55
  220. package/lib/textarea/src/textarea.js +127 -97
  221. package/lib/timeline/src/timeline-item.js +3 -2
  222. package/lib/timeline/src/timeline.js +4 -3
  223. package/lib/tip/src/tip.js +58 -34
  224. package/lib/tooltip/src/tooltip.js +116 -76
  225. package/lib/tour/src/tour.js +4 -3
  226. package/lib/transfer/src/transfer.js +44 -27
  227. package/lib/tree/src/tree.js +717 -500
  228. package/lib/tree-select/src/tree-select.js +351 -256
  229. package/lib/ui/index.js +46 -4
  230. package/lib/ui/src/dom.js +9 -6
  231. package/lib/ui/src/log.js +1 -1
  232. package/lib/upload/src/upload.js +708 -492
  233. package/lib/vxe-icon/style/style.css +1 -1
  234. package/lib/vxe-icon/style/style.mini.css +1 -1
  235. package/lib/watermark/src/util.js +15 -12
  236. package/lib/watermark/src/watermark.js +60 -30
  237. package/package.json +10 -4
  238. package/packages/alert/index.ts +16 -16
  239. package/packages/alert/src/alert.ts +148 -126
  240. package/packages/anchor/index.ts +16 -16
  241. package/packages/anchor/src/anchor-link.ts +139 -121
  242. package/packages/anchor/src/anchor.ts +266 -237
  243. package/packages/anchor/src/util.ts +23 -23
  244. package/packages/anchor-link/index.ts +16 -16
  245. package/packages/avatar/index.ts +16 -16
  246. package/packages/avatar/src/avatar.ts +166 -149
  247. package/packages/backtop/index.ts +16 -16
  248. package/packages/backtop/src/backtop.ts +337 -313
  249. package/packages/badge/index.ts +16 -16
  250. package/packages/badge/src/badge.ts +131 -118
  251. package/packages/breadcrumb/index.ts +16 -16
  252. package/packages/breadcrumb/src/breadcrumb-item.ts +129 -106
  253. package/packages/breadcrumb/src/breadcrumb.ts +94 -92
  254. package/packages/breadcrumb-item/index.ts +16 -16
  255. package/packages/button/index.ts +16 -16
  256. package/packages/button/src/button-group.ts +116 -110
  257. package/packages/button/src/button.ts +975 -855
  258. package/packages/button-group/index.ts +16 -16
  259. package/packages/calendar/index.ts +16 -16
  260. package/packages/calendar/src/calendar.ts +1566 -1352
  261. package/packages/card/index.ts +16 -16
  262. package/packages/card/src/card.ts +285 -236
  263. package/packages/carousel/index.ts +16 -16
  264. package/packages/carousel/src/carousel-item.ts +120 -102
  265. package/packages/carousel/src/carousel.ts +475 -414
  266. package/packages/carousel/src/util.ts +21 -21
  267. package/packages/carousel-item/index.ts +16 -16
  268. package/packages/cascader/index.ts +16 -16
  269. package/packages/cascader/src/cascader.ts +2074 -1896
  270. package/packages/cascader/src/util.ts +9 -9
  271. package/packages/checkbox/index.ts +16 -16
  272. package/packages/checkbox/src/button.ts +267 -221
  273. package/packages/checkbox/src/checkbox.ts +219 -199
  274. package/packages/checkbox/src/group.ts +292 -269
  275. package/packages/checkbox-button/index.ts +16 -16
  276. package/packages/checkbox-group/index.ts +16 -16
  277. package/packages/col/index.ts +16 -16
  278. package/packages/collapse/index.ts +16 -16
  279. package/packages/collapse/src/collapse-pane.ts +142 -114
  280. package/packages/collapse/src/collapse.ts +453 -384
  281. package/packages/collapse/src/util.ts +21 -21
  282. package/packages/collapse-pane/index.ts +16 -16
  283. package/packages/color-picker/index.ts +31 -31
  284. package/packages/color-picker/src/color-picker.ts +1310 -1147
  285. package/packages/color-picker/src/util.ts +436 -423
  286. package/packages/components.ts +350 -349
  287. package/packages/context-menu/index.ts +54 -54
  288. package/packages/context-menu/src/context-menu.ts +773 -681
  289. package/packages/countdown/index.ts +16 -16
  290. package/packages/countdown/src/countdown.ts +295 -262
  291. package/packages/date-panel/index.ts +16 -16
  292. package/packages/date-panel/src/date-panel.ts +2214 -1900
  293. package/packages/date-panel/src/util.ts +354 -326
  294. package/packages/date-picker/index.ts +16 -16
  295. package/packages/date-picker/src/date-picker.ts +1884 -1752
  296. package/packages/date-range-picker/index.ts +16 -16
  297. package/packages/date-range-picker/src/date-range-picker.ts +1728 -1604
  298. package/packages/divider/index.ts +16 -16
  299. package/packages/divider/src/divider.ts +105 -93
  300. package/packages/drawer/index.ts +78 -78
  301. package/packages/drawer/src/drawer.ts +920 -802
  302. package/packages/drawer/src/store.ts +3 -3
  303. package/packages/dynamics/index.ts +124 -117
  304. package/packages/empty/index.ts +16 -16
  305. package/packages/empty/src/empty.ts +124 -103
  306. package/packages/form/index.ts +16 -16
  307. package/packages/form/render/index.ts +646 -614
  308. package/packages/form/src/form-config-item.ts +85 -80
  309. package/packages/form/src/form-group.ts +96 -86
  310. package/packages/form/src/form-item.ts +181 -174
  311. package/packages/form/src/form.ts +1122 -1069
  312. package/packages/form/src/itemInfo.ts +84 -82
  313. package/packages/form/src/render.ts +470 -387
  314. package/packages/form/src/util.ts +98 -93
  315. package/packages/form-gather/index.ts +26 -26
  316. package/packages/form-group/index.ts +16 -16
  317. package/packages/form-item/index.ts +16 -16
  318. package/packages/icon/index.ts +16 -16
  319. package/packages/icon/src/icon.ts +78 -75
  320. package/packages/icon-picker/index.ts +16 -16
  321. package/packages/icon-picker/src/icon-picker.ts +922 -809
  322. package/packages/image/index.ts +16 -16
  323. package/packages/image/src/group.ts +159 -153
  324. package/packages/image/src/image.ts +298 -298
  325. package/packages/image/src/preview.ts +749 -672
  326. package/packages/image/src/util.ts +62 -59
  327. package/packages/image-group/index.ts +16 -16
  328. package/packages/image-preview/index.ts +19 -19
  329. package/packages/index.ts +20 -21
  330. package/packages/input/index.ts +16 -16
  331. package/packages/input/src/input.ts +3201 -2863
  332. package/packages/language/fr-FR.ts +15 -15
  333. package/packages/language/it-IT.ts +4 -4
  334. package/packages/language/uk-UA.ts +1 -1
  335. package/packages/language/uz-UZ.ts +13 -13
  336. package/packages/language/zh-CN.ts +907 -907
  337. package/packages/layout-aside/index.ts +16 -16
  338. package/packages/layout-aside/src/layout-aside.ts +172 -156
  339. package/packages/layout-body/index.ts +16 -16
  340. package/packages/layout-body/src/layout-body.ts +191 -181
  341. package/packages/layout-container/index.ts +16 -16
  342. package/packages/layout-container/src/layout-container.ts +108 -92
  343. package/packages/layout-footer/index.ts +16 -16
  344. package/packages/layout-footer/src/layout-footer.ts +81 -74
  345. package/packages/layout-header/index.ts +16 -16
  346. package/packages/layout-header/src/layout-header.ts +79 -73
  347. package/packages/link/index.ts +16 -16
  348. package/packages/link/src/link.ts +180 -161
  349. package/packages/list/index.ts +16 -16
  350. package/packages/list/src/list.ts +2690 -2564
  351. package/packages/list/src/store.ts +10 -10
  352. package/packages/list/src/util.ts +10 -11
  353. package/packages/loading/index.ts +39 -36
  354. package/packages/loading/src/loading.ts +179 -152
  355. package/packages/mention/index.ts +16 -16
  356. package/packages/mention/src/mention.ts +69 -71
  357. package/packages/menu/index.ts +16 -16
  358. package/packages/menu/src/menu.ts +1000 -857
  359. package/packages/modal/index.ts +164 -141
  360. package/packages/modal/src/modal.ts +1803 -1681
  361. package/packages/modal/src/store.ts +3 -3
  362. package/packages/notice-bar/index.ts +16 -16
  363. package/packages/notice-bar/src/notice-bar.ts +207 -181
  364. package/packages/number-input/index.ts +16 -16
  365. package/packages/number-input/src/number-input.ts +1322 -1242
  366. package/packages/number-input/src/util.ts +25 -25
  367. package/packages/optgroup/index.ts +16 -16
  368. package/packages/option/index.ts +16 -16
  369. package/packages/pager/index.ts +16 -16
  370. package/packages/pager/src/pager.ts +919 -775
  371. package/packages/password-input/index.ts +16 -16
  372. package/packages/password-input/src/password-input.ts +523 -482
  373. package/packages/print/index.ts +18 -18
  374. package/packages/print/src/page-break.ts +104 -92
  375. package/packages/print/src/print.ts +366 -281
  376. package/packages/print/src/util.ts +299 -304
  377. package/packages/print-page-break/index.ts +16 -16
  378. package/packages/pulldown/index.ts +16 -16
  379. package/packages/pulldown/src/pulldown.ts +505 -445
  380. package/packages/radio/index.ts +16 -16
  381. package/packages/radio/src/button.ts +290 -243
  382. package/packages/radio/src/group.ts +275 -252
  383. package/packages/radio/src/radio.ts +237 -218
  384. package/packages/radio-button/index.ts +16 -16
  385. package/packages/radio-group/index.ts +16 -16
  386. package/packages/rate/index.ts +16 -16
  387. package/packages/rate/src/rate.ts +203 -192
  388. package/packages/result/index.ts +16 -16
  389. package/packages/result/src/result.ts +141 -112
  390. package/packages/row/index.ts +16 -16
  391. package/packages/row/src/col.ts +171 -159
  392. package/packages/row/src/row.ts +143 -138
  393. package/packages/scrollbar/index.ts +16 -16
  394. package/packages/scrollbar/src/scrollbar.ts +626 -595
  395. package/packages/segmented/index.ts +16 -16
  396. package/packages/segmented/src/segmented.ts +297 -264
  397. package/packages/select/index.ts +16 -16
  398. package/packages/select/src/optgroup.ts +53 -49
  399. package/packages/select/src/option-info.ts +20 -20
  400. package/packages/select/src/option.ts +47 -47
  401. package/packages/select/src/select.ts +2390 -2214
  402. package/packages/select/src/util.ts +50 -47
  403. package/packages/slider/index.ts +16 -16
  404. package/packages/slider/src/slider.ts +547 -506
  405. package/packages/space/index.ts +16 -16
  406. package/packages/space/src/space.ts +225 -209
  407. package/packages/split/index.ts +16 -16
  408. package/packages/split-pane/index.ts +17 -17
  409. package/packages/splitter/index.ts +16 -16
  410. package/packages/splitter/src/splitter-panel.ts +199 -163
  411. package/packages/splitter/src/splitter.ts +1110 -1020
  412. package/packages/splitter/src/util.ts +21 -21
  413. package/packages/splitter-panel/index.ts +16 -16
  414. package/packages/steps/index.ts +16 -16
  415. package/packages/steps/src/steps.ts +69 -68
  416. package/packages/switch/index.ts +16 -16
  417. package/packages/switch/src/switch.ts +300 -271
  418. package/packages/tab-pane/index.ts +16 -16
  419. package/packages/table-select/index.ts +16 -16
  420. package/packages/table-select/src/table-select.ts +1103 -999
  421. package/packages/table-transfer/index.ts +16 -16
  422. package/packages/table-transfer/src/table-transfer.ts +104 -91
  423. package/packages/tabs/index.ts +16 -16
  424. package/packages/tabs/src/tab-pane.ts +132 -117
  425. package/packages/tabs/src/tabs.ts +1137 -997
  426. package/packages/tabs/src/util.ts +21 -21
  427. package/packages/tag/index.ts +16 -16
  428. package/packages/tag/src/tag.ts +204 -187
  429. package/packages/text/index.ts +16 -16
  430. package/packages/text/src/text.ts +282 -260
  431. package/packages/text-ellipsis/index.ts +16 -16
  432. package/packages/text-ellipsis/src/text-ellipsis.ts +312 -282
  433. package/packages/textarea/index.ts +16 -16
  434. package/packages/textarea/src/textarea.ts +526 -495
  435. package/packages/timeline/index.ts +16 -16
  436. package/packages/timeline/src/timeline-item.ts +65 -67
  437. package/packages/timeline/src/timeline.ts +70 -71
  438. package/packages/timeline-item/index.ts +16 -16
  439. package/packages/tip/index.ts +19 -19
  440. package/packages/tip/src/tip.ts +150 -129
  441. package/packages/tooltip/index.ts +72 -72
  442. package/packages/tooltip/src/tooltip.ts +669 -627
  443. package/packages/tour/index.ts +16 -16
  444. package/packages/tour/src/tour.ts +70 -71
  445. package/packages/transfer/index.ts +16 -16
  446. package/packages/transfer/src/transfer.ts +130 -117
  447. package/packages/tree/index.ts +16 -16
  448. package/packages/tree/src/store.ts +10 -10
  449. package/packages/tree/src/tree.ts +4077 -3852
  450. package/packages/tree/src/util.ts +51 -51
  451. package/packages/tree-select/index.ts +16 -16
  452. package/packages/tree-select/src/tree-select.ts +1217 -1094
  453. package/packages/ui/index.ts +836 -793
  454. package/packages/ui/src/anime.ts +51 -52
  455. package/packages/ui/src/comp.ts +3 -3
  456. package/packages/ui/src/dom.ts +357 -354
  457. package/packages/ui/src/log.ts +19 -19
  458. package/packages/ui/src/utils.ts +79 -79
  459. package/packages/ui/src/vn.ts +39 -39
  460. package/packages/upload/index.ts +20 -20
  461. package/packages/upload/src/upload.ts +2271 -2021
  462. package/packages/upload/src/util.ts +109 -109
  463. package/packages/watermark/index.ts +33 -33
  464. package/packages/watermark/src/util.ts +186 -180
  465. package/packages/watermark/src/watermark.ts +196 -168
  466. package/types/all.d.ts +552 -552
  467. package/types/components/alert.d.ts +83 -87
  468. package/types/components/anchor-link.d.ts +88 -91
  469. package/types/components/anchor.d.ts +97 -104
  470. package/types/components/avatar.d.ts +85 -88
  471. package/types/components/backtop.d.ts +119 -122
  472. package/types/components/badge.d.ts +77 -80
  473. package/types/components/breadcrumb-item.d.ts +77 -80
  474. package/types/components/breadcrumb.d.ts +83 -87
  475. package/types/components/button-group.d.ts +118 -120
  476. package/types/components/button.d.ts +331 -339
  477. package/types/components/calendar.d.ts +247 -264
  478. package/types/components/card.d.ts +111 -113
  479. package/types/components/carousel-item.d.ts +73 -75
  480. package/types/components/carousel.d.ts +130 -134
  481. package/types/components/cascader.d.ts +336 -386
  482. package/types/components/checkbox-button.d.ts +109 -114
  483. package/types/components/checkbox-group.d.ts +152 -154
  484. package/types/components/checkbox.d.ts +123 -128
  485. package/types/components/col.d.ts +77 -80
  486. package/types/components/colgroup.d.ts +64 -69
  487. package/types/components/collapse-pane.d.ts +86 -89
  488. package/types/components/collapse.d.ts +123 -133
  489. package/types/components/color-picker.d.ts +275 -280
  490. package/types/components/column.d.ts +834 -851
  491. package/types/components/context-menu.d.ts +282 -289
  492. package/types/components/countdown.d.ts +108 -112
  493. package/types/components/date-panel.d.ts +319 -331
  494. package/types/components/date-picker.d.ts +361 -384
  495. package/types/components/date-range-picker.d.ts +351 -371
  496. package/types/components/divider.d.ts +72 -75
  497. package/types/components/drawer.d.ts +333 -344
  498. package/types/components/empty.d.ts +75 -78
  499. package/types/components/flow-design.d.ts +73 -85
  500. package/types/components/flow-view.d.ts +73 -85
  501. package/types/components/form-design.d.ts +370 -376
  502. package/types/components/form-gather.d.ts +120 -124
  503. package/types/components/form-group.d.ts +73 -77
  504. package/types/components/form-item.d.ts +395 -413
  505. package/types/components/form-view.d.ts +179 -183
  506. package/types/components/form.d.ts +499 -495
  507. package/types/components/gantt-module/gantt-view.d.ts +195 -200
  508. package/types/components/gantt-module/index.d.ts +1 -1
  509. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +137 -131
  510. package/types/components/gantt-plugins/index.d.ts +1 -1
  511. package/types/components/gantt.d.ts +1248 -1399
  512. package/types/components/grid.d.ts +1289 -1317
  513. package/types/components/icon-picker.d.ts +242 -253
  514. package/types/components/icon.d.ts +332 -87
  515. package/types/components/image-group.d.ts +124 -127
  516. package/types/components/image-preview.d.ts +167 -167
  517. package/types/components/image.d.ts +166 -173
  518. package/types/components/input.d.ts +429 -453
  519. package/types/components/layout-aside.d.ts +123 -123
  520. package/types/components/layout-body.d.ts +110 -113
  521. package/types/components/layout-container.d.ts +73 -75
  522. package/types/components/layout-footer.d.ts +71 -73
  523. package/types/components/layout-header.d.ts +67 -69
  524. package/types/components/link.d.ts +107 -111
  525. package/types/components/list-design.d.ts +189 -190
  526. package/types/components/list-view.d.ts +193 -199
  527. package/types/components/list.d.ts +678 -715
  528. package/types/components/loading.d.ts +98 -103
  529. package/types/components/mention.d.ts +70 -77
  530. package/types/components/menu.d.ts +284 -295
  531. package/types/components/modal.d.ts +567 -584
  532. package/types/components/notice-bar.d.ts +102 -106
  533. package/types/components/number-input.d.ts +359 -365
  534. package/types/components/optgroup.d.ts +85 -88
  535. package/types/components/option.d.ts +94 -103
  536. package/types/components/pager.d.ts +330 -335
  537. package/types/components/password-input.d.ts +143 -156
  538. package/types/components/print-page-break.d.ts +65 -69
  539. package/types/components/print.d.ts +243 -245
  540. package/types/components/pulldown.d.ts +231 -239
  541. package/types/components/radio-button.d.ts +113 -118
  542. package/types/components/radio-group.d.ts +151 -153
  543. package/types/components/radio.d.ts +129 -134
  544. package/types/components/rate.d.ts +83 -88
  545. package/types/components/result.d.ts +81 -84
  546. package/types/components/row.d.ts +77 -81
  547. package/types/components/scrollbar.d.ts +299 -305
  548. package/types/components/segmented.d.ts +119 -123
  549. package/types/components/select.d.ts +598 -616
  550. package/types/components/slider.d.ts +137 -151
  551. package/types/components/space.d.ts +120 -127
  552. package/types/components/split-pane.d.ts +126 -133
  553. package/types/components/split.d.ts +301 -312
  554. package/types/components/splitter-panel.d.ts +123 -130
  555. package/types/components/splitter.d.ts +290 -301
  556. package/types/components/steps.d.ts +63 -68
  557. package/types/components/switch.d.ts +127 -133
  558. package/types/components/tab-pane.d.ts +111 -114
  559. package/types/components/table-module/custom.d.ts +123 -123
  560. package/types/components/table-module/edit.d.ts +297 -276
  561. package/types/components/table-module/export.d.ts +88 -96
  562. package/types/components/table-module/filter.d.ts +144 -144
  563. package/types/components/table-module/index.d.ts +7 -7
  564. package/types/components/table-module/keyboard.d.ts +26 -26
  565. package/types/components/table-module/menu.d.ts +46 -46
  566. package/types/components/table-module/validator.d.ts +53 -53
  567. package/types/components/table-plugins/extend-cell-area.d.ts +781 -781
  568. package/types/components/table-plugins/extend-pivot-table.d.ts +59 -58
  569. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  570. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  571. package/types/components/table-plugins/index.d.ts +4 -4
  572. package/types/components/table-select.d.ts +268 -276
  573. package/types/components/table-transfer.d.ts +80 -84
  574. package/types/components/table.d.ts +7530 -8000
  575. package/types/components/tabs.d.ts +314 -352
  576. package/types/components/tag.d.ts +108 -114
  577. package/types/components/text-ellipsis.d.ts +107 -112
  578. package/types/components/text.d.ts +112 -122
  579. package/types/components/textarea.d.ts +261 -275
  580. package/types/components/timeline-item.d.ts +66 -75
  581. package/types/components/timeline.d.ts +70 -77
  582. package/types/components/tip.d.ts +81 -83
  583. package/types/components/toolbar.d.ts +327 -336
  584. package/types/components/tooltip.d.ts +250 -255
  585. package/types/components/tour.d.ts +70 -77
  586. package/types/components/transfer.d.ts +80 -84
  587. package/types/components/tree-select.d.ts +361 -376
  588. package/types/components/tree.d.ts +994 -1036
  589. package/types/components/upload.d.ts +477 -518
  590. package/types/components/watermark.d.ts +116 -120
  591. package/types/handles/form-design.d.ts +50 -50
  592. package/types/handles/index.d.ts +3 -3
  593. package/types/handles/list-design.d.ts +1 -2
  594. package/types/handles/table.d.ts +15 -15
  595. package/types/index.d.ts +8 -8
  596. package/types/ui/commands.d.ts +57 -57
  597. package/types/ui/formats.d.ts +62 -62
  598. package/types/ui/global-config.d.ts +269 -269
  599. package/types/ui/global-icon.d.ts +315 -315
  600. package/types/ui/hooks.d.ts +13 -13
  601. package/types/ui/index.d.ts +100 -100
  602. package/types/ui/interceptor.d.ts +52 -52
  603. package/types/ui/menus.d.ts +89 -89
  604. package/types/ui/renderer.d.ts +1033 -1047
  605. package/types/ui/validators.d.ts +37 -38
  606. /package/dist/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  607. /package/dist/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  608. /package/dist/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  609. /package/es/icon/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  610. /package/es/icon/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  611. /package/es/icon/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  612. /package/es/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  613. /package/es/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  614. /package/es/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  615. /package/es/vxe-icon/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  616. /package/es/vxe-icon/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  617. /package/es/vxe-icon/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  618. /package/lib/icon/style/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  619. /package/lib/icon/style/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  620. /package/lib/icon/style/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  621. /package/lib/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  622. /package/lib/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  623. /package/lib/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
  624. /package/lib/vxe-icon/style/{iconfont.1792992046297.ttf → iconfont.1793007755017.ttf} +0 -0
  625. /package/lib/vxe-icon/style/{iconfont.1792992046297.woff → iconfont.1793007755017.woff} +0 -0
  626. /package/lib/vxe-icon/style/{iconfont.1792992046297.woff2 → iconfont.1793007755017.woff2} +0 -0
@@ -1,1147 +1,1310 @@
1
- import { watch, computed, provide, ref, inject, Teleport, h, nextTick, PropType, reactive, onMounted, onUnmounted } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI, getIcon, getConfig, getI18n, globalEvents, createEvent, useSize, renderEmptyElement } from '../../ui'
5
- import { getEventTargetNode, getPopupContainer, toCssUnit, updatePanelPlacement } from '../../ui/src/dom'
6
- import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
7
- import { parseValColor, updateColorAlpha, hexToHsv, rgbToHsv, rgbToHexVal, hexToRgb, hsvToRgb, toValRgb } from './util'
8
- import VxeButtonComponent from '../../button'
9
- import VxeInputComponent from '../../input'
10
- import VxeNumberInputComponent from '../../number-input'
11
-
12
- import type { ColorPickerReactData, VxeColorPickerPropTypes, VxeColorPickerEmits, ColorPickerInternalData, ColorPickerMethods, ColorPickerPrivateMethods, ValueOf, ColorPickerPrivateRef, VxeColorPickerPrivateComputed, VxeColorPickerConstructor, VxeColorPickerPrivateMethods, VxeModalConstructor, VxeModalMethods, VxeDrawerConstructor, VxeDrawerMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeCardConstructor, VxeCardPrivateMethods, VxeComponentStyleType } from '../../../types'
13
- import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
14
-
15
- export default defineVxeComponent({
16
- name: 'VxeColorPicker',
17
- props: {
18
- modelValue: String as PropType<VxeColorPickerPropTypes.ModelValue>,
19
- placeholder: String as PropType<VxeColorPickerPropTypes.Placeholder>,
20
- clearable: {
21
- type: Boolean as PropType<VxeColorPickerPropTypes.Clearable>,
22
- default: () => getConfig().colorPicker.clearable
23
- },
24
- type: {
25
- type: String as PropType<VxeColorPickerPropTypes.Type>,
26
- default: () => getConfig().colorPicker.type
27
- },
28
- width: [Number, String] as PropType<VxeColorPickerPropTypes.Width>,
29
- size: {
30
- type: String as PropType<VxeColorPickerPropTypes.Size>,
31
- default: () => getConfig().colorPicker.size || getConfig().size
32
- },
33
- className: [String, Function] as PropType<VxeColorPickerPropTypes.ClassName>,
34
- popupClassName: [String, Function] as PropType<VxeColorPickerPropTypes.PopupClassName>,
35
- colors: {
36
- type: Array as PropType<VxeColorPickerPropTypes.Colors>,
37
- default: () => XEUtils.clone(getConfig().colorPicker.colors, true) || []
38
- },
39
- showAlpha: {
40
- type: Boolean as PropType<VxeColorPickerPropTypes.ShowAlpha>,
41
- default: () => getConfig().colorPicker.showAlpha
42
- },
43
- showEyeDropper: {
44
- type: Boolean as PropType<VxeColorPickerPropTypes.ShowEyeDropper>,
45
- default: () => getConfig().colorPicker.showEyeDropper
46
- },
47
- showColorExtractor: {
48
- type: Boolean as PropType<VxeColorPickerPropTypes.ShowColorExtractor>,
49
- default: () => getConfig().colorPicker.showColorExtractor
50
- },
51
- showQuick: {
52
- type: Boolean as PropType<VxeColorPickerPropTypes.ShowQuick>,
53
- default: () => getConfig().colorPicker.showQuick
54
- },
55
- readonly: {
56
- type: Boolean as PropType<VxeColorPickerPropTypes.Readonly>,
57
- default: null
58
- },
59
- disabled: {
60
- type: Boolean as PropType<VxeColorPickerPropTypes.Disabled>,
61
- default: null
62
- },
63
- clickToCopy: {
64
- type: Boolean as PropType<VxeColorPickerPropTypes.ClickToCopy>,
65
- default: () => getConfig().colorPicker.clickToCopy
66
- },
67
- defaultColor: {
68
- type: String as PropType<VxeColorPickerPropTypes.DefaultColor>,
69
- default: () => getConfig().colorPicker.defaultColor
70
- },
71
- /**
72
- * 已废弃,请使用 popupConfig.placement
73
- * @deprecated
74
- */
75
- placement: String as PropType<VxeColorPickerPropTypes.Placement>,
76
- /**
77
- * 已废弃,请使用 popupConfig.transfer
78
- * @deprecated
79
- */
80
- transfer: {
81
- type: Boolean as PropType<VxeColorPickerPropTypes.Transfer>,
82
- default: null
83
- },
84
- popupConfig: Object as PropType<VxeColorPickerPropTypes.PopupConfig>
85
- },
86
- emits: [
87
- 'update:modelValue',
88
- 'change',
89
- 'clear',
90
- 'click'
91
- ] as VxeColorPickerEmits,
92
- setup (props, context) {
93
- const { emit } = context
94
-
95
- const $xeModal = inject<(VxeModalConstructor & VxeModalMethods) | null>('$xeModal', null)
96
- const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
97
- const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
98
- const $xeCard = inject<(VxeCardConstructor & VxeCardPrivateMethods) | null>('$xeCard', null)
99
- const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods) | null>('$xeForm', null)
100
- const formItemInfo = inject<VxeFormDefines.ProvideItemInfo | null>('xeFormItemInfo', null)
101
-
102
- const WinEyeDropper = typeof window !== 'undefined' ? (window as any).EyeDropper : null
103
-
104
- const xID = XEUtils.uniqueId()
105
-
106
- const { computeSize } = useSize(props)
107
-
108
- const refElem = ref<HTMLDivElement>()
109
- const refInputTarget = ref<HTMLInputElement>()
110
- const refOptionPanel = ref<HTMLDivElement>()
111
- const refHueSliderElem = ref<HTMLDivElement>()
112
- const refHueSliderBtnElem = ref<HTMLDivElement>()
113
- const refAlphaSliderElem = ref<HTMLDivElement>()
114
- const refAlphaSliderBtnElem = ref<HTMLDivElement>()
115
- const refColorPanelElem = ref<HTMLDivElement>()
116
- const refColorActiveElem = ref<HTMLDivElement>()
117
-
118
- const reactData = reactive<ColorPickerReactData>({
119
- initialized: false,
120
- selectTyle: 'hex',
121
- selectColor: `${props.modelValue || ''}`,
122
- showTypePopup: false,
123
- panelColor: '',
124
- hexValue: '',
125
- rValue: 0,
126
- gValue: 0,
127
- bValue: 0,
128
- aValue: 0,
129
- panelIndex: 0,
130
- panelStyle: {},
131
- panelPlacement: null,
132
- visiblePanel: false,
133
- isAniVisible: false,
134
- isActivated: false
135
- })
136
-
137
- const typeList = [
138
- { label: 'HEX', value: 'hex' },
139
- { label: 'RGB', value: 'rgb' }
140
- ]
141
-
142
- const internalData: ColorPickerInternalData = {
143
- // hpTimeout: undefined
144
- }
145
-
146
- const computeFormReadonly = computed(() => {
147
- const { readonly } = props
148
- if (readonly === null) {
149
- if ($xeForm) {
150
- return $xeForm.props.readonly
151
- }
152
- return false
153
- }
154
- return readonly
155
- })
156
-
157
- const computeIsDisabled = computed(() => {
158
- const { disabled } = props
159
- if (disabled === null) {
160
- if ($xeForm) {
161
- return $xeForm.props.disabled
162
- }
163
- return false
164
- }
165
- return disabled
166
- })
167
-
168
- const computeBtnTransfer = computed(() => {
169
- const { transfer } = props
170
- if (transfer === null) {
171
- const globalTransfer = getConfig().colorPicker.transfer
172
- if (XEUtils.isBoolean(globalTransfer)) {
173
- return globalTransfer
174
- }
175
- if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
176
- return true
177
- }
178
- }
179
- return transfer
180
- })
181
-
182
- const computeColorList = computed(() => {
183
- const { colors } = props
184
- if (colors) {
185
- return colors.map(item => {
186
- if (XEUtils.isString(item)) {
187
- return {
188
- label: item,
189
- value: item
190
- }
191
- }
192
- return {
193
- label: XEUtils.eqNull(item.label) ? item.value : item.label,
194
- value: item.value
195
- }
196
- })
197
- }
198
- return []
199
- })
200
-
201
- const computeCurrStyle = computed(() => {
202
- const { width } = props
203
- const stys: VxeComponentStyleType = {}
204
- if (width) {
205
- stys.width = toCssUnit(width)
206
- }
207
- return stys
208
- })
209
-
210
- const computePopupOpts = computed(() => {
211
- return Object.assign({}, getConfig().colorPicker.popupConfig, props.popupConfig)
212
- })
213
-
214
- const computeIsRgb = computed(() => {
215
- const { selectTyle } = reactData
216
- return selectTyle === 'rgb'
217
- })
218
-
219
- const computeSelectTypeItem = computed(() => {
220
- const { selectTyle } = reactData
221
- return typeList.find(item => item.value === selectTyle)
222
- })
223
-
224
- const refMaps: ColorPickerPrivateRef = {
225
- refElem
226
- }
227
-
228
- const computeMaps: VxeColorPickerPrivateComputed = {
229
- }
230
-
231
- const $xeColorPicker = {
232
- xID,
233
- props,
234
- context,
235
- reactData,
236
-
237
- getRefMaps: () => refMaps,
238
- getComputeMaps: () => computeMaps
239
- } as unknown as VxeColorPickerConstructor & VxeColorPickerPrivateMethods
240
-
241
- const emitModel = (value: any) => {
242
- emit('update:modelValue', value)
243
- }
244
-
245
- const updateMode = () => {
246
- const { modelValue } = props
247
- reactData.selectColor = XEUtils.toValueString(modelValue)
248
- updateModelColor()
249
- }
250
-
251
- const updateType = () => {
252
- const { type } = props
253
- let selectTyle: VxeColorPickerPropTypes.Type = 'hex'
254
- if (type === 'rgb' || (type as string) === 'rgba') {
255
- selectTyle = 'rgb'
256
- }
257
- reactData.selectTyle = selectTyle
258
- updateMode()
259
- }
260
-
261
- const updateModelColor = () => {
262
- const { defaultColor } = props
263
- const { selectColor, isAniVisible } = reactData
264
- const isRgb = computeIsRgb.value
265
- const hueSliderEl = refHueSliderElem.value
266
- const alphaSliderEl = refAlphaSliderElem.value
267
- const colorRest = parseValColor(selectColor || defaultColor)
268
- reactData.hexValue = ''
269
- reactData.rValue = 0
270
- reactData.gValue = 0
271
- reactData.bValue = 0
272
- reactData.aValue = 1
273
- if (colorRest) {
274
- if (colorRest.type === 'hex') {
275
- reactData.hexValue = colorRest.hex
276
- } else {
277
- reactData.rValue = colorRest.r
278
- reactData.gValue = colorRest.g
279
- reactData.bValue = colorRest.b
280
- reactData.aValue = colorRest.a
281
- }
282
- if (colorRest.value) {
283
- if (isRgb) {
284
- if (colorRest.type === 'hex') {
285
- const rgbRest = hexToRgb(colorRest.hex)
286
- if (rgbRest) {
287
- reactData.rValue = rgbRest.r
288
- reactData.gValue = rgbRest.g
289
- reactData.bValue = rgbRest.b
290
- reactData.aValue = rgbRest.a
291
- }
292
- }
293
- } else {
294
- if (colorRest.type !== 'hex') {
295
- reactData.hexValue = rgbToHexVal(colorRest.r, colorRest.g, colorRest.b, colorRest.a)
296
- }
297
- }
298
- }
299
- }
300
- if (isAniVisible) {
301
- const hsvRest = colorRest ? (colorRest.type === 'hex' ? hexToHsv(colorRest.hex) : rgbToHsv(colorRest)) : null
302
- const colorPanelEl = refColorPanelElem.value
303
- if (hsvRest) {
304
- if (colorPanelEl) {
305
- const offsetTop = colorPanelEl.clientHeight * (1 - hsvRest.v)
306
- const offsetLeft = colorPanelEl.clientWidth * hsvRest.s
307
- handlePanelColor(offsetLeft, offsetTop)
308
- }
309
- if (hueSliderEl) {
310
- handleHueColor(XEUtils.ceil((1 - hsvRest.h / 360) * hueSliderEl.clientWidth) - 1)
311
- }
312
- }
313
- if (alphaSliderEl) {
314
- handleAlphaColor(alphaSliderEl.clientWidth * reactData.aValue)
315
- }
316
- }
317
- }
318
-
319
- const updateZindex = () => {
320
- if (reactData.panelIndex < getLastZIndex()) {
321
- reactData.panelIndex = nextZIndex()
322
- }
323
- }
324
-
325
- const updatePlacement = () => {
326
- const { placement } = props
327
- const { panelIndex } = reactData
328
- const targetElem = refElem.value
329
- const panelElem = refOptionPanel.value
330
- const btnTransfer = computeBtnTransfer.value
331
- const popupOpts = computePopupOpts.value
332
- const handleStyle = () => {
333
- const ppObj = updatePanelPlacement(targetElem, panelElem, {
334
- placement: popupOpts.placement || placement,
335
- defaultPlacement: popupOpts.defaultPlacement,
336
- appendTo: popupOpts.appendTo,
337
- teleportTo: btnTransfer
338
- })
339
- const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
340
- zIndex: panelIndex
341
- })
342
- reactData.panelStyle = panelStyle
343
- reactData.panelPlacement = ppObj.placement
344
- }
345
- handleStyle()
346
- return nextTick().then(handleStyle)
347
- }
348
-
349
- const showOptionPanel = () => {
350
- const { hpTimeout } = internalData
351
- const isDisabled = computeIsDisabled.value
352
- if (!isDisabled) {
353
- if (hpTimeout) {
354
- clearTimeout(hpTimeout)
355
- internalData.hpTimeout = undefined
356
- }
357
- if (!reactData.initialized) {
358
- reactData.initialized = true
359
- }
360
- reactData.isActivated = true
361
- reactData.isAniVisible = true
362
- setTimeout(() => {
363
- updateModelColor()
364
- reactData.visiblePanel = true
365
- }, 10)
366
- updateZindex()
367
- updatePlacement()
368
- }
369
- }
370
-
371
- const hideOptionPanel = () => {
372
- reactData.visiblePanel = false
373
- internalData.hpTimeout = setTimeout(() => {
374
- reactData.isAniVisible = false
375
- }, 350)
376
- }
377
-
378
- const changeEvent = (evnt: Event, value: any) => {
379
- reactData.selectColor = value
380
- if (value !== props.modelValue) {
381
- emitModel(value)
382
- dispatchEvent('change', { value }, evnt)
383
- // 自动更新校验状态
384
- if ($xeForm && formItemInfo) {
385
- $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
386
- }
387
- }
388
- }
389
-
390
- const clearValueEvent = (evnt: Event, selectValue: any) => {
391
- changeEvent(evnt, selectValue)
392
- dispatchEvent('clear', { value: selectValue }, evnt)
393
- }
394
-
395
- const focusEvent = () => {
396
- const isDisabled = computeIsDisabled.value
397
- if (!isDisabled) {
398
- if (!reactData.visiblePanel) {
399
- showOptionPanel()
400
- }
401
- }
402
- }
403
-
404
- const blurEvent = () => {
405
- reactData.isActivated = false
406
- }
407
-
408
- const clearEvent = (evnt: Event) => {
409
- clearValueEvent(evnt, null)
410
- hideOptionPanel()
411
- }
412
-
413
- const confirmEvent = (evnt: MouseEvent) => {
414
- const { selectTyle, selectColor, hexValue } = reactData
415
- const value = selectTyle === 'hex' ? hexValue : selectColor
416
- changeEvent(evnt, value)
417
- hideOptionPanel()
418
- }
419
-
420
- const togglePanelEvent = (evnt: MouseEvent) => {
421
- evnt.preventDefault()
422
- if (reactData.visiblePanel) {
423
- hideOptionPanel()
424
- } else {
425
- showOptionPanel()
426
- }
427
- }
428
-
429
- const clickEvent = (evnt: MouseEvent) => {
430
- togglePanelEvent(evnt)
431
- dispatchEvent('click', {}, evnt)
432
- }
433
-
434
- const handlePanelClickEvent = () => {
435
- reactData.showTypePopup = false
436
- }
437
-
438
- const toggleTypeVisibleEvent = (evnt: MouseEvent) => {
439
- evnt.stopPropagation()
440
- reactData.showTypePopup = !reactData.showTypePopup
441
- }
442
-
443
- const handleChangeType = (type: VxeColorPickerPropTypes.Type) => {
444
- const { selectTyle } = reactData
445
- if (type !== selectTyle) {
446
- reactData.selectTyle = type
447
- updateModelColor()
448
- }
449
- reactData.showTypePopup = false
450
- }
451
-
452
- const handleHueColor = (offsetLeft: number) => {
453
- const hueSliderEl = refHueSliderElem.value
454
- const hueSliderBtnEl = refHueSliderBtnElem.value
455
- if (hueSliderEl && hueSliderBtnEl) {
456
- if (offsetLeft < 0) {
457
- offsetLeft = 0
458
- }
459
- const barWidth = XEUtils.toInteger(hueSliderEl.clientWidth)
460
- const itemNum = 255
461
- const countNum = itemNum * 6
462
- const offsetX = XEUtils.ceil(countNum / barWidth * offsetLeft)
463
- const offsetNum = offsetX % itemNum
464
- let rNum = 0
465
- let gNum = 0
466
- let bNum = 0
467
- switch (Math.ceil(offsetX / itemNum)) {
468
- case 1:
469
- rNum = itemNum
470
- bNum = offsetNum
471
- break
472
- case 2:
473
- rNum = itemNum - offsetNum
474
- bNum = itemNum
475
- break
476
- case 3:
477
- gNum = offsetNum
478
- bNum = itemNum
479
- break
480
- case 4:
481
- gNum = itemNum
482
- bNum = itemNum - offsetNum
483
- break
484
- case 5:
485
- rNum = offsetNum
486
- gNum = itemNum
487
- break
488
- case 6:
489
- rNum = itemNum
490
- gNum = itemNum - offsetNum
491
- break
492
- }
493
- reactData.panelColor = toValRgb(rNum, gNum, bNum)
494
- hueSliderBtnEl.style.left = toCssUnit(offsetLeft)
495
- }
496
- }
497
-
498
- const handleHueBarEvent = (evnt: MouseEvent) => {
499
- const hueSliderEl = refHueSliderElem.value
500
- const hueSliderBtnEl = refHueSliderBtnElem.value
501
- if (hueSliderEl && hueSliderBtnEl) {
502
- const hueSliderRect = hueSliderEl.getBoundingClientRect()
503
- const barWidth = XEUtils.toInteger(hueSliderEl.clientWidth)
504
- const offsetLeft = XEUtils.ceil(Math.min(barWidth - 1, Math.max(1, evnt.clientX - hueSliderRect.x)))
505
- handleHueColor(offsetLeft)
506
- }
507
- }
508
-
509
- const handleHueSliderMousedownEvent = (evnt: MouseEvent) => {
510
- evnt.preventDefault()
511
- document.onmousemove = evnt => {
512
- evnt.preventDefault()
513
- handleHueBarEvent(evnt)
514
- }
515
- document.onmouseup = (evnt: MouseEvent) => {
516
- document.onmousemove = null
517
- document.onmouseup = null
518
- handleHueBarEvent(evnt)
519
- }
520
- }
521
-
522
- const handleAlphaColor = (offsetLeft: number) => {
523
- const { selectColor } = reactData
524
- const alphaSliderEl = refAlphaSliderElem.value
525
- const alphaSliderBtnEl = refAlphaSliderBtnElem.value
526
- if (alphaSliderEl && alphaSliderBtnEl) {
527
- const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
528
- const barWidth = alphaSliderRect.width
529
- if (offsetLeft < 0) {
530
- offsetLeft = 0
531
- }
532
- if (offsetLeft > barWidth) {
533
- offsetLeft = barWidth
534
- }
535
- const alpha = XEUtils.ceil(100 / barWidth * offsetLeft / 100, 2)
536
- reactData.aValue = alpha
537
- alphaSliderBtnEl.style.left = toCssUnit(offsetLeft)
538
- reactData.selectColor = selectColor ? updateColorAlpha(selectColor, alpha) : ''
539
- }
540
- }
541
-
542
- const handleAlphaBarEvent = (evnt: MouseEvent) => {
543
- const alphaSliderEl = refAlphaSliderElem.value
544
- const alphaSliderBtnEl = refAlphaSliderBtnElem.value
545
- if (alphaSliderEl && alphaSliderBtnEl) {
546
- const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
547
- const barWidth = alphaSliderRect.width
548
- const offsetLeft = Math.min(barWidth, Math.max(0, evnt.clientX - alphaSliderRect.x))
549
- handleAlphaColor(offsetLeft)
550
- updateModelColor()
551
- }
552
- }
553
-
554
- const handleAlphaSliderMousedownEvent = (evnt: MouseEvent) => {
555
- evnt.preventDefault()
556
- document.onmousemove = evnt => {
557
- evnt.preventDefault()
558
- handleAlphaBarEvent(evnt)
559
- }
560
- document.onmouseup = (evnt: MouseEvent) => {
561
- document.onmousemove = null
562
- document.onmouseup = null
563
- handleAlphaBarEvent(evnt)
564
- }
565
- }
566
-
567
- const handleInputRgbEvent = () => {
568
- const { rValue, gValue, bValue, aValue } = reactData
569
- reactData.selectColor = toValRgb(rValue, gValue, bValue, aValue)
570
- updateModelColor()
571
- }
572
-
573
- const handleInputAlphaEvent = () => {
574
- const { aValue } = reactData
575
- const alphaSliderEl = refAlphaSliderElem.value
576
- const alphaSliderBtnEl = refAlphaSliderBtnElem.value
577
- if (alphaSliderEl && alphaSliderBtnEl) {
578
- const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
579
- const barWidth = alphaSliderRect.width
580
- const offsetLeft = barWidth * aValue
581
- handleAlphaColor(offsetLeft)
582
- }
583
- }
584
-
585
- const handleQuickEvent = (evnt: MouseEvent, item: any) => {
586
- const value = item.value
587
- reactData.selectColor = value
588
- updateModelColor()
589
- }
590
-
591
- const handlePanelColor = (offsetLeft: number, offsetTop: number) => {
592
- const colorActiveEl = refColorActiveElem.value
593
- if (colorActiveEl) {
594
- colorActiveEl.style.top = toCssUnit(offsetTop)
595
- colorActiveEl.style.left = toCssUnit(offsetLeft)
596
- }
597
- }
598
-
599
- const handleEyeDropperEvent = () => {
600
- if (WinEyeDropper) {
601
- try {
602
- const eyeDropper = new WinEyeDropper()
603
- eyeDropper.open().then((rest: any) => {
604
- if (rest && rest.sRGBHex) {
605
- reactData.selectColor = rest.sRGBHex
606
- updateModelColor()
607
- }
608
- }).catch(() => {
609
- })
610
- } catch (e) {}
611
- }
612
- }
613
-
614
- const handleSelectColorByXY = (clientX: number, clientY: number) => {
615
- const { showAlpha } = props
616
- const { panelColor, aValue } = reactData
617
- const colorPanelEl = refColorPanelElem.value
618
- const colorActiveEl = refColorActiveElem.value
619
- if (colorPanelEl && colorActiveEl) {
620
- const { clientWidth, clientHeight } = colorPanelEl
621
- const colorPanelRect = colorPanelEl.getBoundingClientRect()
622
- const offsetTop = Math.min(clientHeight, Math.max(0, clientY - colorPanelRect.y))
623
- const offsetLeft = Math.min(clientWidth, Math.max(0, clientX - colorPanelRect.x))
624
- const colorRest = parseValColor(panelColor)
625
- if (colorRest) {
626
- const hsvRest = colorRest.type === 'hex' ? hexToHsv(colorRest.hex) : rgbToHsv(colorRest)
627
- if (hsvRest) {
628
- const ragRest = hsvToRgb(hsvRest.h, offsetLeft / clientWidth, (1 - offsetTop / clientHeight))
629
- reactData.selectColor = toValRgb(ragRest.r, ragRest.g, ragRest.b, showAlpha ? aValue : null)
630
- updateModelColor()
631
- }
632
- }
633
- handlePanelColor(offsetLeft, offsetTop)
634
- }
635
- }
636
-
637
- const handleSelectColorMousedownEvent = (evnt: MouseEvent) => {
638
- evnt.stopPropagation()
639
- evnt.preventDefault()
640
- handleSelectColorByXY(evnt.clientX, evnt.clientY)
641
- document.onmousemove = evnt => {
642
- handleSelectColorByXY(evnt.clientX, evnt.clientY)
643
- }
644
- document.onmouseup = () => {
645
- document.onmousemove = null
646
- document.onmouseup = null
647
- }
648
- }
649
-
650
- const handleCopyColorEvent = () => {
651
- const { selectColor } = reactData
652
- if (selectColor) {
653
- if (VxeUI.clipboard.copy(selectColor)) {
654
- if (VxeUI.modal) {
655
- VxeUI.modal.message({
656
- content: getI18n('vxe.colorPicker.copySuccess', [selectColor]),
657
- status: 'success'
658
- })
659
- }
660
- }
661
- }
662
- }
663
-
664
- const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
665
- const { visiblePanel } = reactData
666
- const isDisabled = computeIsDisabled.value
667
- if (!isDisabled) {
668
- const el = refElem.value
669
- const panelElem = refOptionPanel.value
670
- reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
671
- if (visiblePanel && !reactData.isActivated) {
672
- hideOptionPanel()
673
- }
674
- }
675
- }
676
-
677
- const handleGlobalBlurEvent = () => {
678
- const { visiblePanel, isActivated } = reactData
679
- if (visiblePanel) {
680
- hideOptionPanel()
681
- }
682
- if (isActivated) {
683
- reactData.isActivated = false
684
- }
685
- if (visiblePanel || isActivated) {
686
- const targetElem = refInputTarget.value
687
- if (targetElem) {
688
- targetElem.blur()
689
- }
690
- }
691
- }
692
-
693
- const handleGlobalResizeEvent = () => {
694
- const { visiblePanel } = reactData
695
- if (visiblePanel) {
696
- updatePlacement()
697
- }
698
- }
699
-
700
- const handleGlobalScrollEvent = () => {
701
- const { visiblePanel } = reactData
702
- if (visiblePanel) {
703
- updatePlacement()
704
- }
705
- }
706
-
707
- const dispatchEvent = (type: ValueOf<VxeColorPickerEmits>, params: Record<string, any>, evnt: Event | null) => {
708
- emit(type, createEvent(evnt, { $colorPicker: $xeColorPicker }, params))
709
- }
710
-
711
- const colorPickerMethods: ColorPickerMethods = {
712
- dispatchEvent
713
- }
714
-
715
- const colorPickerPrivateMethods: ColorPickerPrivateMethods = {
716
- }
717
-
718
- Object.assign($xeColorPicker, colorPickerMethods, colorPickerPrivateMethods)
719
-
720
- const renderColorWrapper = () => {
721
- const { showColorExtractor } = props
722
- const { panelColor } = reactData
723
- if (showColorExtractor) {
724
- return h('div', {
725
- ref: refColorPanelElem,
726
- class: 'vxe-color-picker--color-wrapper',
727
- onMousedown: handleSelectColorMousedownEvent
728
- }, [
729
- h('div', {
730
- class: 'vxe-color-picker--color-bg',
731
- style: {
732
- backgroundColor: panelColor
733
- }
734
- }),
735
- h('div', {
736
- class: 'vxe-color-picker--white-bg'
737
- }),
738
- h('div', {
739
- class: 'vxe-color-picker--black-bg'
740
- }),
741
- h('div', {
742
- ref: refColorActiveElem,
743
- class: 'vxe-color-picker--color-active'
744
- })
745
- ])
746
- }
747
- return renderEmptyElement($xeColorPicker)
748
- }
749
-
750
- const renderColorBar = () => {
751
- const { showAlpha, clickToCopy, showEyeDropper } = props
752
- const { selectTyle, showTypePopup, hexValue, rValue, gValue, bValue, aValue, selectColor, panelColor } = reactData
753
- const isRgb = computeIsRgb.value
754
- const selectTypeItem = computeSelectTypeItem.value
755
- return h('div', {
756
- class: 'vxe-color-picker--bar-wrapper'
757
- }, [
758
- h('div', {
759
- class: 'vxe-color-picker--slider-wrapper'
760
- }, [
761
- showEyeDropper && WinEyeDropper
762
- ? h('div', {
763
- class: 'vxe-color-picker--color-dropper'
764
- }, [
765
- h('span', {
766
- class: 'vxe-color-picker--color-dropper-btn',
767
- onClick: handleEyeDropperEvent
768
- }, [
769
- h('i', {
770
- class: getIcon().COLOR_PICKER_EYE_DROPPER
771
- })
772
- ])
773
- ])
774
- : renderEmptyElement($xeColorPicker),
775
- h('div', {
776
- class: 'vxe-color-picker--slider-preview'
777
- }, [
778
- h('div', {
779
- class: 'vxe-color-picker--preview-btn'
780
- }, [
781
- h('div', {
782
- class: 'vxe-color-picker--preview-color',
783
- style: {
784
- backgroundColor: selectColor
785
- }
786
- }, clickToCopy
787
- ? [
788
- h('span', {
789
- class: 'vxe-color-picker--preview-copy-btn',
790
- onClick: handleCopyColorEvent
791
- }, [
792
- h('i', {
793
- class: getIcon().COLOR_PICKER_COLOR_COPY
794
- })
795
- ])
796
- ]
797
- : [])
798
- ])
799
- ]),
800
- h('div', {
801
- class: 'vxe-color-picker--slider-handle'
802
- }, [
803
- h('div', {
804
- ref: refHueSliderElem,
805
- class: 'vxe-color-picker--bar-hue-slider',
806
- onClick: handleHueBarEvent
807
- }, [
808
- h('div', {
809
- ref: refHueSliderBtnElem,
810
- class: 'vxe-color-picker--bar-hue-btn',
811
- onMousedown: handleHueSliderMousedownEvent
812
- })
813
- ]),
814
- showAlpha
815
- ? h('div', {
816
- ref: refAlphaSliderElem,
817
- class: 'vxe-color-picker--bar-alpha-slider',
818
- onClick: handleAlphaBarEvent
819
- }, [
820
- h('div', {
821
- class: 'vxe-color-picker--bar-alpha-bg',
822
- style: {
823
- background: `linear-gradient(to right, rgba(0, 0, 0, 0), ${panelColor})`
824
- }
825
- }),
826
- h('div', {
827
- ref: refAlphaSliderBtnElem,
828
- class: 'vxe-color-picker--bar-alpha-btn',
829
- onMousedown: handleAlphaSliderMousedownEvent
830
- })
831
- ])
832
- : renderEmptyElement($xeColorPicker)
833
- ])
834
- ]),
835
- h('div', {
836
- class: 'vxe-color-picker--custom-wrapper'
837
- }, [
838
- h('div', {
839
- class: 'vxe-color-picker--type-switch'
840
- }, [
841
- h('div', {
842
- class: 'vxe-color-picker--type-label',
843
- onClick: toggleTypeVisibleEvent
844
- }, [
845
- h('span', `${selectTypeItem ? selectTypeItem.label : selectTyle}`),
846
- h('span', {
847
- class: 'vxe-color-picker--type-icon'
848
- }, [
849
- h('i', {
850
- class: showTypePopup ? getIcon().COLOR_PICKER_TPTY_OPEN : getIcon().COLOR_PICKER_TPTY_CLOSE
851
- })
852
- ])
853
- ]),
854
- h('div', {
855
- class: ['vxe-color-picker--type-popup', {
856
- 'is--visible': showTypePopup
857
- }]
858
- }, typeList.map(item => {
859
- return h('div', {
860
- class: 'vxe-color-picker--type-item',
861
- onClick (evnt) {
862
- evnt.stopPropagation()
863
- handleChangeType(item.value as VxeColorPickerPropTypes.Type)
864
- }
865
- }, item.label)
866
- }))
867
- ]),
868
- h('div', {
869
- class: `vxe-color-picker--${selectTyle}-wrapper`
870
- }, isRgb
871
- ? [
872
- h('div', {
873
- class: 'vxe-color-picker--input-wrapper'
874
- }, [
875
- h(VxeNumberInputComponent, {
876
- type: 'integer',
877
- size: 'mini',
878
- align: 'center',
879
- min: 0,
880
- max: 255,
881
- maxLength: 3,
882
- placeholder: '',
883
- modelValue: rValue,
884
- controlConfig: {
885
- showButton: false
886
- },
887
- 'onUpdate:modelValue' (val) {
888
- reactData.rValue = val
889
- },
890
- onChange: handleInputRgbEvent
891
- }),
892
- h(VxeNumberInputComponent, {
893
- type: 'integer',
894
- size: 'mini',
895
- align: 'center',
896
- min: 0,
897
- max: 255,
898
- maxLength: 3,
899
- placeholder: '',
900
- modelValue: gValue,
901
- controlConfig: {
902
- showButton: false
903
- },
904
- 'onUpdate:modelValue' (val) {
905
- reactData.gValue = val
906
- },
907
- onChange: handleInputRgbEvent
908
- }),
909
- h(VxeNumberInputComponent, {
910
- type: 'integer',
911
- size: 'mini',
912
- align: 'center',
913
- min: 0,
914
- max: 255,
915
- maxLength: 3,
916
- placeholder: '',
917
- modelValue: bValue,
918
- controlConfig: {
919
- showButton: false
920
- },
921
- 'onUpdate:modelValue' (val) {
922
- reactData.bValue = val
923
- },
924
- onChange: handleInputRgbEvent
925
- }),
926
- h(VxeNumberInputComponent, {
927
- type: 'number',
928
- size: 'mini',
929
- align: 'center',
930
- min: 0,
931
- max: 1,
932
- step: 0.01,
933
- maxLength: 4,
934
- placeholder: '',
935
- modelValue: aValue,
936
- controlConfig: {
937
- showButton: false
938
- },
939
- 'onUpdate:modelValue' (val) {
940
- reactData.aValue = val
941
- },
942
- onChange: handleInputAlphaEvent
943
- })
944
- ]),
945
- h('div', {
946
- class: 'vxe-color-picker--input-title'
947
- }, [
948
- h('span', 'R'),
949
- h('span', 'G'),
950
- h('span', 'B'),
951
- h('span', 'A')
952
- ])]
953
- : [
954
- h('div', {
955
- class: 'vxe-color-picker--input-wrapper'
956
- }, [
957
- h(VxeInputComponent, {
958
- type: 'text',
959
- size: 'mini',
960
- align: 'center',
961
- maxLength: 9,
962
- placeholder: '',
963
- modelValue: hexValue,
964
- 'onUpdate:modelValue' (val) {
965
- reactData.hexValue = val
966
- },
967
- onChange () {
968
- const colorRest = parseValColor(reactData.hexValue)
969
- if (colorRest) {
970
- if (colorRest.value) {
971
- reactData.selectColor = colorRest.value
972
- updateModelColor()
973
- }
974
- }
975
- }
976
- })
977
- ]),
978
- h('div', {
979
- class: 'vxe-color-picker--input-title'
980
- }, getI18n('vxe.colorPicker.hex'))
981
- ])
982
- ])
983
- ])
984
- }
985
-
986
- const renderQuickWrapper = () => {
987
- const { showQuick } = props
988
- const colorList = computeColorList.value
989
- if (showQuick && colorList.length) {
990
- return h('div', {
991
- class: 'vxe-color-picker--quick-wrapper'
992
- }, colorList.map((item, i) => {
993
- return h('div', {
994
- key: i,
995
- class: 'vxe-color-picker--quick-item',
996
- title: item.label || '',
997
- style: {
998
- backgroundColor: item.value
999
- },
1000
- onClick (evnt) {
1001
- handleQuickEvent(evnt, item)
1002
- }
1003
- })
1004
- }))
1005
- }
1006
- return renderEmptyElement($xeColorPicker)
1007
- }
1008
-
1009
- const renderVN = () => {
1010
- const { className, popupClassName, clearable, modelValue } = props
1011
- const { initialized, isActivated, isAniVisible, visiblePanel } = reactData
1012
- const vSize = computeSize.value
1013
- const isDisabled = computeIsDisabled.value
1014
- const btnTransfer = computeBtnTransfer.value
1015
- const formReadonly = computeFormReadonly.value
1016
-
1017
- if (formReadonly) {
1018
- return h('div', {
1019
- ref: refElem,
1020
- class: ['vxe-color-picker--readonly', className, {
1021
- [`size--${vSize}`]: vSize
1022
- }]
1023
- }, [
1024
- h('div', {
1025
- class: ['vxe-color-picker--readonly-color', {
1026
- 'is--empty': !modelValue
1027
- }],
1028
- style: modelValue
1029
- ? {
1030
- backgroundColor: modelValue
1031
- }
1032
- : undefined
1033
- })
1034
- ])
1035
- }
1036
- const currStyle = computeCurrStyle.value
1037
- const popupOpts = computePopupOpts.value
1038
- const { appendTo } = popupOpts
1039
- return h('div', {
1040
- ref: refElem,
1041
- class: ['vxe-color-picker', className ? (XEUtils.isFunction(className) ? className({ $colorPicker: $xeColorPicker }) : className) : '', {
1042
- [`size--${vSize}`]: vSize,
1043
- 'is--selected': !!modelValue,
1044
- 'is--visible': visiblePanel,
1045
- 'is--disabled': isDisabled,
1046
- 'is--active': isActivated
1047
- }],
1048
- style: currStyle
1049
- }, [
1050
- h('input', {
1051
- ref: refInputTarget,
1052
- class: 'vxe-color-picker--input',
1053
- onFocus: focusEvent,
1054
- onBlur: blurEvent
1055
- }),
1056
- h('div', {
1057
- class: 'vxe-color-picker--inner',
1058
- onClick: clickEvent
1059
- }, [
1060
- h('div', {
1061
- class: 'vxe-color-picker--inner-color',
1062
- style: {
1063
- backgroundColor: modelValue
1064
- }
1065
- })
1066
- ]),
1067
- h(Teleport, {
1068
- to: getPopupContainer(appendTo),
1069
- disabled: btnTransfer ? !initialized : true
1070
- }, [
1071
- h('div', {
1072
- ref: refOptionPanel,
1073
- class: ['vxe-table--ignore-clear vxe-color-picker--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $colorPicker: $xeColorPicker }) : popupClassName) : '', {
1074
- [`size--${vSize}`]: vSize,
1075
- 'is--transfer': btnTransfer,
1076
- 'ani--leave': isAniVisible,
1077
- 'ani--enter': visiblePanel
1078
- }],
1079
- placement: reactData.panelPlacement,
1080
- style: reactData.panelStyle
1081
- }, [
1082
- initialized && (visiblePanel || isAniVisible)
1083
- ? h('div', {
1084
- class: 'vxe-color-picker--panel-wrapper',
1085
- onClick: handlePanelClickEvent
1086
- }, [
1087
- renderColorWrapper(),
1088
- renderColorBar(),
1089
- renderQuickWrapper(),
1090
- h('div', {
1091
- class: 'vxe-color-picker--footer-wrapper'
1092
- }, [
1093
- clearable
1094
- ? h(VxeButtonComponent, {
1095
- content: getI18n('vxe.colorPicker.clear'),
1096
- size: 'mini',
1097
- onClick: clearEvent
1098
- })
1099
- : renderEmptyElement($xeColorPicker),
1100
- h(VxeButtonComponent, {
1101
- content: getI18n('vxe.colorPicker.confirm'),
1102
- size: 'mini',
1103
- status: 'primary',
1104
- onClick: confirmEvent
1105
- })
1106
- ])
1107
- ])
1108
- : renderEmptyElement($xeColorPicker)
1109
- ])
1110
- ])
1111
- ])
1112
- }
1113
-
1114
- watch(() => props.modelValue, () => {
1115
- updateMode()
1116
- })
1117
-
1118
- watch(() => props.type, () => {
1119
- updateType()
1120
- })
1121
-
1122
- onMounted(() => {
1123
- globalEvents.on($xeColorPicker, 'mousedown', handleGlobalMousedownEvent)
1124
- globalEvents.on($xeColorPicker, 'blur', handleGlobalBlurEvent)
1125
- globalEvents.on($xeColorPicker, 'resize', handleGlobalResizeEvent)
1126
- globalEvents.on($xeColorPicker, 'scroll', handleGlobalScrollEvent)
1127
- })
1128
-
1129
- onUnmounted(() => {
1130
- globalEvents.off($xeColorPicker, 'mousedown')
1131
- globalEvents.off($xeColorPicker, 'blur')
1132
- globalEvents.off($xeColorPicker, 'resize')
1133
- globalEvents.off($xeColorPicker, 'scroll')
1134
- })
1135
-
1136
- updateType()
1137
-
1138
- provide('$xeColorPicker', $xeColorPicker)
1139
-
1140
- $xeColorPicker.renderVN = renderVN
1141
-
1142
- return $xeColorPicker
1143
- },
1144
- render () {
1145
- return this.renderVN()
1146
- }
1147
- })
1
+ import { watch, computed, provide, ref, inject, Teleport, h, nextTick, PropType, reactive, onMounted, onUnmounted } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI } from '@vxe-ui/core'
5
+ import { getEventTargetNode, getPopupContainer, toCssUnit, updatePanelPlacement } from '../../ui/src/dom'
6
+ import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
7
+ import { parseValColor, updateColorAlpha, hexToHsv, rgbToHsv, rgbToHexVal, hexToRgb, hsvToRgb, toValRgb } from './util'
8
+ import VxeButtonComponent from '../../button'
9
+ import VxeInputComponent from '../../input'
10
+ import VxeNumberInputComponent from '../../number-input'
11
+
12
+ import type {
13
+ ColorPickerReactData,
14
+ VxeColorPickerPropTypes,
15
+ VxeColorPickerEmits,
16
+ ColorPickerInternalData,
17
+ ColorPickerMethods,
18
+ ColorPickerPrivateMethods,
19
+ ValueOf,
20
+ ColorPickerPrivateRef,
21
+ VxeColorPickerPrivateComputed,
22
+ VxeColorPickerConstructor,
23
+ VxeColorPickerPrivateMethods,
24
+ VxeModalConstructor,
25
+ VxeModalMethods,
26
+ VxeDrawerConstructor,
27
+ VxeDrawerMethods,
28
+ VxeFormDefines,
29
+ VxeFormConstructor,
30
+ VxeFormPrivateMethods,
31
+ VxeCardConstructor,
32
+ VxeCardPrivateMethods,
33
+ VxeComponentStyleType
34
+ } from '../../../types'
35
+ import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
36
+
37
+ const { getIcon, getConfig, getI18n, globalEvents, createEvent, useFns, renderEmptyElement } = VxeUI
38
+
39
+ export default defineVxeComponent({
40
+ name: 'VxeColorPicker',
41
+ props: {
42
+ modelValue: String as PropType<VxeColorPickerPropTypes.ModelValue>,
43
+ placeholder: String as PropType<VxeColorPickerPropTypes.Placeholder>,
44
+ clearable: {
45
+ type: Boolean as PropType<VxeColorPickerPropTypes.Clearable>,
46
+ default: () => getConfig().colorPicker.clearable
47
+ },
48
+ type: {
49
+ type: String as PropType<VxeColorPickerPropTypes.Type>,
50
+ default: () => getConfig().colorPicker.type
51
+ },
52
+ width: [Number, String] as PropType<VxeColorPickerPropTypes.Width>,
53
+ size: {
54
+ type: String as PropType<VxeColorPickerPropTypes.Size>,
55
+ default: () => getConfig().colorPicker.size || getConfig().size
56
+ },
57
+ className: [String, Function] as PropType<VxeColorPickerPropTypes.ClassName>,
58
+ popupClassName: [String, Function] as PropType<VxeColorPickerPropTypes.PopupClassName>,
59
+ colors: {
60
+ type: Array as PropType<VxeColorPickerPropTypes.Colors>,
61
+ default: () => XEUtils.clone(getConfig().colorPicker.colors, true) || []
62
+ },
63
+ showAlpha: {
64
+ type: Boolean as PropType<VxeColorPickerPropTypes.ShowAlpha>,
65
+ default: () => getConfig().colorPicker.showAlpha
66
+ },
67
+ showEyeDropper: {
68
+ type: Boolean as PropType<VxeColorPickerPropTypes.ShowEyeDropper>,
69
+ default: () => getConfig().colorPicker.showEyeDropper
70
+ },
71
+ showColorExtractor: {
72
+ type: Boolean as PropType<VxeColorPickerPropTypes.ShowColorExtractor>,
73
+ default: () => getConfig().colorPicker.showColorExtractor
74
+ },
75
+ showQuick: {
76
+ type: Boolean as PropType<VxeColorPickerPropTypes.ShowQuick>,
77
+ default: () => getConfig().colorPicker.showQuick
78
+ },
79
+ readonly: {
80
+ type: Boolean as PropType<VxeColorPickerPropTypes.Readonly>,
81
+ default: null
82
+ },
83
+ disabled: {
84
+ type: Boolean as PropType<VxeColorPickerPropTypes.Disabled>,
85
+ default: null
86
+ },
87
+ clickToCopy: {
88
+ type: Boolean as PropType<VxeColorPickerPropTypes.ClickToCopy>,
89
+ default: () => getConfig().colorPicker.clickToCopy
90
+ },
91
+ defaultColor: {
92
+ type: String as PropType<VxeColorPickerPropTypes.DefaultColor>,
93
+ default: () => getConfig().colorPicker.defaultColor
94
+ },
95
+ /**
96
+ * 已废弃,请使用 popupConfig.placement
97
+ * @deprecated
98
+ */
99
+ placement: String as PropType<VxeColorPickerPropTypes.Placement>,
100
+ /**
101
+ * 已废弃,请使用 popupConfig.transfer
102
+ * @deprecated
103
+ */
104
+ transfer: {
105
+ type: Boolean as PropType<VxeColorPickerPropTypes.Transfer>,
106
+ default: null
107
+ },
108
+ popupConfig: Object as PropType<VxeColorPickerPropTypes.PopupConfig>
109
+ },
110
+ emits: ['update:modelValue', 'change', 'clear', 'click'] as VxeColorPickerEmits,
111
+ setup(props, context) {
112
+ const { emit } = context
113
+
114
+ const $xeModal = inject<(VxeModalConstructor & VxeModalMethods) | null>('$xeModal', null)
115
+ const $xeDrawer = inject<(VxeDrawerConstructor & VxeDrawerMethods) | null>('$xeDrawer', null)
116
+ const $xeTable = inject<(VxeTableConstructor & VxeTablePrivateMethods) | null>('$xeTable', null)
117
+ const $xeCard = inject<(VxeCardConstructor & VxeCardPrivateMethods) | null>('$xeCard', null)
118
+ const $xeForm = inject<(VxeFormConstructor & VxeFormPrivateMethods) | null>('$xeForm', null)
119
+ const formItemInfo = inject<VxeFormDefines.ProvideItemInfo | null>('xeFormItemInfo', null)
120
+
121
+ const WinEyeDropper = typeof window !== 'undefined' ? (window as any).EyeDropper : null
122
+
123
+ const xID = XEUtils.uniqueId()
124
+
125
+ const { computeSize } = useFns.useSize(props)
126
+
127
+ const refElem = ref<HTMLDivElement>()
128
+ const refInputTarget = ref<HTMLInputElement>()
129
+ const refOptionPanel = ref<HTMLDivElement>()
130
+ const refHueSliderElem = ref<HTMLDivElement>()
131
+ const refHueSliderBtnElem = ref<HTMLDivElement>()
132
+ const refAlphaSliderElem = ref<HTMLDivElement>()
133
+ const refAlphaSliderBtnElem = ref<HTMLDivElement>()
134
+ const refColorPanelElem = ref<HTMLDivElement>()
135
+ const refColorActiveElem = ref<HTMLDivElement>()
136
+
137
+ const reactData = reactive<ColorPickerReactData>({
138
+ initialized: false,
139
+ selectTyle: 'hex',
140
+ selectColor: `${props.modelValue || ''}`,
141
+ showTypePopup: false,
142
+ panelColor: '',
143
+ hexValue: '',
144
+ rValue: 0,
145
+ gValue: 0,
146
+ bValue: 0,
147
+ aValue: 0,
148
+ panelIndex: 0,
149
+ panelStyle: {},
150
+ panelPlacement: null,
151
+ visiblePanel: false,
152
+ isAniVisible: false,
153
+ isActivated: false
154
+ })
155
+
156
+ const typeList = [
157
+ { label: 'HEX', value: 'hex' },
158
+ { label: 'RGB', value: 'rgb' }
159
+ ]
160
+
161
+ const internalData: ColorPickerInternalData = {
162
+ // hpTimeout: undefined
163
+ }
164
+
165
+ const computeFormReadonly = computed(() => {
166
+ const { readonly } = props
167
+ if (readonly === null) {
168
+ if ($xeForm) {
169
+ return $xeForm.props.readonly
170
+ }
171
+ return false
172
+ }
173
+ return readonly
174
+ })
175
+
176
+ const computeIsDisabled = computed(() => {
177
+ const { disabled } = props
178
+ if (disabled === null) {
179
+ if ($xeForm) {
180
+ return $xeForm.props.disabled
181
+ }
182
+ return false
183
+ }
184
+ return disabled
185
+ })
186
+
187
+ const computeBtnTransfer = computed(() => {
188
+ const { transfer } = props
189
+ if (transfer === null) {
190
+ const globalTransfer = getConfig().colorPicker.transfer
191
+ if (XEUtils.isBoolean(globalTransfer)) {
192
+ return globalTransfer
193
+ }
194
+ if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
195
+ return true
196
+ }
197
+ }
198
+ return transfer
199
+ })
200
+
201
+ const computeColorList = computed(() => {
202
+ const { colors } = props
203
+ if (colors) {
204
+ return colors.map((item) => {
205
+ if (XEUtils.isString(item)) {
206
+ return {
207
+ label: item,
208
+ value: item
209
+ }
210
+ }
211
+ return {
212
+ label: XEUtils.eqNull(item.label) ? item.value : item.label,
213
+ value: item.value
214
+ }
215
+ })
216
+ }
217
+ return []
218
+ })
219
+
220
+ const computeCurrStyle = computed(() => {
221
+ const { width } = props
222
+ const stys: VxeComponentStyleType = {}
223
+ if (width) {
224
+ stys.width = toCssUnit(width)
225
+ }
226
+ return stys
227
+ })
228
+
229
+ const computePopupOpts = computed(() => {
230
+ return Object.assign({}, getConfig().colorPicker.popupConfig, props.popupConfig)
231
+ })
232
+
233
+ const computeIsRgb = computed(() => {
234
+ const { selectTyle } = reactData
235
+ return selectTyle === 'rgb'
236
+ })
237
+
238
+ const computeSelectTypeItem = computed(() => {
239
+ const { selectTyle } = reactData
240
+ return typeList.find((item) => item.value === selectTyle)
241
+ })
242
+
243
+ const refMaps: ColorPickerPrivateRef = {
244
+ refElem
245
+ }
246
+
247
+ const computeMaps: VxeColorPickerPrivateComputed = {}
248
+
249
+ const $xeColorPicker = {
250
+ xID,
251
+ props,
252
+ context,
253
+ reactData,
254
+
255
+ getRefMaps: () => refMaps,
256
+ getComputeMaps: () => computeMaps
257
+ } as unknown as VxeColorPickerConstructor & VxeColorPickerPrivateMethods
258
+
259
+ const emitModel = (value: any) => {
260
+ emit('update:modelValue', value)
261
+ }
262
+
263
+ const updateMode = () => {
264
+ const { modelValue } = props
265
+ reactData.selectColor = XEUtils.toValueString(modelValue)
266
+ updateModelColor()
267
+ }
268
+
269
+ const updateType = () => {
270
+ const { type } = props
271
+ let selectTyle: VxeColorPickerPropTypes.Type = 'hex'
272
+ if (type === 'rgb' || (type as string) === 'rgba') {
273
+ selectTyle = 'rgb'
274
+ }
275
+ reactData.selectTyle = selectTyle
276
+ updateMode()
277
+ }
278
+
279
+ const updateModelColor = () => {
280
+ const { defaultColor } = props
281
+ const { selectColor, isAniVisible } = reactData
282
+ const isRgb = computeIsRgb.value
283
+ const hueSliderEl = refHueSliderElem.value
284
+ const alphaSliderEl = refAlphaSliderElem.value
285
+ const colorRest = parseValColor(selectColor || defaultColor)
286
+ reactData.hexValue = ''
287
+ reactData.rValue = 0
288
+ reactData.gValue = 0
289
+ reactData.bValue = 0
290
+ reactData.aValue = 1
291
+ if (colorRest) {
292
+ if (colorRest.type === 'hex') {
293
+ reactData.hexValue = colorRest.hex
294
+ } else {
295
+ reactData.rValue = colorRest.r
296
+ reactData.gValue = colorRest.g
297
+ reactData.bValue = colorRest.b
298
+ reactData.aValue = colorRest.a
299
+ }
300
+ if (colorRest.value) {
301
+ if (isRgb) {
302
+ if (colorRest.type === 'hex') {
303
+ const rgbRest = hexToRgb(colorRest.hex)
304
+ if (rgbRest) {
305
+ reactData.rValue = rgbRest.r
306
+ reactData.gValue = rgbRest.g
307
+ reactData.bValue = rgbRest.b
308
+ reactData.aValue = rgbRest.a
309
+ }
310
+ }
311
+ } else {
312
+ if (colorRest.type !== 'hex') {
313
+ reactData.hexValue = rgbToHexVal(colorRest.r, colorRest.g, colorRest.b, colorRest.a)
314
+ }
315
+ }
316
+ }
317
+ }
318
+ if (isAniVisible) {
319
+ const hsvRest = colorRest ? (colorRest.type === 'hex' ? hexToHsv(colorRest.hex) : rgbToHsv(colorRest)) : null
320
+ const colorPanelEl = refColorPanelElem.value
321
+ if (hsvRest) {
322
+ if (colorPanelEl) {
323
+ const offsetTop = colorPanelEl.clientHeight * (1 - hsvRest.v)
324
+ const offsetLeft = colorPanelEl.clientWidth * hsvRest.s
325
+ handlePanelColor(offsetLeft, offsetTop)
326
+ }
327
+ if (hueSliderEl) {
328
+ handleHueColor(XEUtils.ceil((1 - hsvRest.h / 360) * hueSliderEl.clientWidth) - 1)
329
+ }
330
+ }
331
+ if (alphaSliderEl) {
332
+ handleAlphaColor(alphaSliderEl.clientWidth * reactData.aValue)
333
+ }
334
+ }
335
+ }
336
+
337
+ const updateZindex = () => {
338
+ if (reactData.panelIndex < getLastZIndex()) {
339
+ reactData.panelIndex = nextZIndex()
340
+ }
341
+ }
342
+
343
+ const updatePlacement = () => {
344
+ const { placement } = props
345
+ const { panelIndex } = reactData
346
+ const targetElem = refElem.value
347
+ const panelElem = refOptionPanel.value
348
+ const btnTransfer = computeBtnTransfer.value
349
+ const popupOpts = computePopupOpts.value
350
+ const handleStyle = () => {
351
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
352
+ placement: popupOpts.placement || placement,
353
+ defaultPlacement: popupOpts.defaultPlacement,
354
+ appendTo: popupOpts.appendTo,
355
+ teleportTo: btnTransfer
356
+ })
357
+ const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
358
+ zIndex: panelIndex
359
+ })
360
+ reactData.panelStyle = panelStyle
361
+ reactData.panelPlacement = ppObj.placement
362
+ }
363
+ handleStyle()
364
+ return nextTick().then(handleStyle)
365
+ }
366
+
367
+ const showOptionPanel = () => {
368
+ const { hpTimeout } = internalData
369
+ const isDisabled = computeIsDisabled.value
370
+ if (!isDisabled) {
371
+ if (hpTimeout) {
372
+ clearTimeout(hpTimeout)
373
+ internalData.hpTimeout = undefined
374
+ }
375
+ if (!reactData.initialized) {
376
+ reactData.initialized = true
377
+ }
378
+ reactData.isActivated = true
379
+ reactData.isAniVisible = true
380
+ setTimeout(() => {
381
+ updateModelColor()
382
+ reactData.visiblePanel = true
383
+ }, 10)
384
+ updateZindex()
385
+ updatePlacement()
386
+ }
387
+ }
388
+
389
+ const hideOptionPanel = () => {
390
+ reactData.visiblePanel = false
391
+ internalData.hpTimeout = setTimeout(() => {
392
+ reactData.isAniVisible = false
393
+ }, 350)
394
+ }
395
+
396
+ const changeEvent = (evnt: Event, value: any) => {
397
+ reactData.selectColor = value
398
+ if (value !== props.modelValue) {
399
+ emitModel(value)
400
+ dispatchEvent('change', { value }, evnt)
401
+ // 自动更新校验状态
402
+ if ($xeForm && formItemInfo) {
403
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, value)
404
+ }
405
+ }
406
+ }
407
+
408
+ const clearValueEvent = (evnt: Event, selectValue: any) => {
409
+ changeEvent(evnt, selectValue)
410
+ dispatchEvent('clear', { value: selectValue }, evnt)
411
+ }
412
+
413
+ const focusEvent = () => {
414
+ const isDisabled = computeIsDisabled.value
415
+ if (!isDisabled) {
416
+ if (!reactData.visiblePanel) {
417
+ showOptionPanel()
418
+ }
419
+ }
420
+ }
421
+
422
+ const blurEvent = () => {
423
+ reactData.isActivated = false
424
+ }
425
+
426
+ const clearEvent = (evnt: Event) => {
427
+ clearValueEvent(evnt, null)
428
+ hideOptionPanel()
429
+ }
430
+
431
+ const confirmEvent = (evnt: MouseEvent) => {
432
+ const { selectTyle, selectColor, hexValue } = reactData
433
+ const value = selectTyle === 'hex' ? hexValue : selectColor
434
+ changeEvent(evnt, value)
435
+ hideOptionPanel()
436
+ }
437
+
438
+ const togglePanelEvent = (evnt: MouseEvent) => {
439
+ evnt.preventDefault()
440
+ if (reactData.visiblePanel) {
441
+ hideOptionPanel()
442
+ } else {
443
+ showOptionPanel()
444
+ }
445
+ }
446
+
447
+ const clickEvent = (evnt: MouseEvent) => {
448
+ togglePanelEvent(evnt)
449
+ dispatchEvent('click', {}, evnt)
450
+ }
451
+
452
+ const handlePanelClickEvent = () => {
453
+ reactData.showTypePopup = false
454
+ }
455
+
456
+ const toggleTypeVisibleEvent = (evnt: MouseEvent) => {
457
+ evnt.stopPropagation()
458
+ reactData.showTypePopup = !reactData.showTypePopup
459
+ }
460
+
461
+ const handleChangeType = (type: VxeColorPickerPropTypes.Type) => {
462
+ const { selectTyle } = reactData
463
+ if (type !== selectTyle) {
464
+ reactData.selectTyle = type
465
+ updateModelColor()
466
+ }
467
+ reactData.showTypePopup = false
468
+ }
469
+
470
+ const handleHueColor = (offsetLeft: number) => {
471
+ const hueSliderEl = refHueSliderElem.value
472
+ const hueSliderBtnEl = refHueSliderBtnElem.value
473
+ if (hueSliderEl && hueSliderBtnEl) {
474
+ if (offsetLeft < 0) {
475
+ offsetLeft = 0
476
+ }
477
+ const barWidth = XEUtils.toInteger(hueSliderEl.clientWidth)
478
+ const itemNum = 255
479
+ const countNum = itemNum * 6
480
+ const offsetX = XEUtils.ceil((countNum / barWidth) * offsetLeft)
481
+ const offsetNum = offsetX % itemNum
482
+ let rNum = 0
483
+ let gNum = 0
484
+ let bNum = 0
485
+ switch (Math.ceil(offsetX / itemNum)) {
486
+ case 1:
487
+ rNum = itemNum
488
+ bNum = offsetNum
489
+ break
490
+ case 2:
491
+ rNum = itemNum - offsetNum
492
+ bNum = itemNum
493
+ break
494
+ case 3:
495
+ gNum = offsetNum
496
+ bNum = itemNum
497
+ break
498
+ case 4:
499
+ gNum = itemNum
500
+ bNum = itemNum - offsetNum
501
+ break
502
+ case 5:
503
+ rNum = offsetNum
504
+ gNum = itemNum
505
+ break
506
+ case 6:
507
+ rNum = itemNum
508
+ gNum = itemNum - offsetNum
509
+ break
510
+ }
511
+ reactData.panelColor = toValRgb(rNum, gNum, bNum)
512
+ hueSliderBtnEl.style.left = toCssUnit(offsetLeft)
513
+ }
514
+ }
515
+
516
+ const handleHueBarEvent = (evnt: MouseEvent) => {
517
+ const hueSliderEl = refHueSliderElem.value
518
+ const hueSliderBtnEl = refHueSliderBtnElem.value
519
+ if (hueSliderEl && hueSliderBtnEl) {
520
+ const hueSliderRect = hueSliderEl.getBoundingClientRect()
521
+ const barWidth = XEUtils.toInteger(hueSliderEl.clientWidth)
522
+ const offsetLeft = XEUtils.ceil(Math.min(barWidth - 1, Math.max(1, evnt.clientX - hueSliderRect.x)))
523
+ handleHueColor(offsetLeft)
524
+ }
525
+ }
526
+
527
+ const handleHueSliderMousedownEvent = (evnt: MouseEvent) => {
528
+ evnt.preventDefault()
529
+ document.onmousemove = (evnt) => {
530
+ evnt.preventDefault()
531
+ handleHueBarEvent(evnt)
532
+ }
533
+ document.onmouseup = (evnt: MouseEvent) => {
534
+ document.onmousemove = null
535
+ document.onmouseup = null
536
+ handleHueBarEvent(evnt)
537
+ }
538
+ }
539
+
540
+ const handleAlphaColor = (offsetLeft: number) => {
541
+ const { selectColor } = reactData
542
+ const alphaSliderEl = refAlphaSliderElem.value
543
+ const alphaSliderBtnEl = refAlphaSliderBtnElem.value
544
+ if (alphaSliderEl && alphaSliderBtnEl) {
545
+ const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
546
+ const barWidth = alphaSliderRect.width
547
+ if (offsetLeft < 0) {
548
+ offsetLeft = 0
549
+ }
550
+ if (offsetLeft > barWidth) {
551
+ offsetLeft = barWidth
552
+ }
553
+ const alpha = XEUtils.ceil(((100 / barWidth) * offsetLeft) / 100, 2)
554
+ reactData.aValue = alpha
555
+ alphaSliderBtnEl.style.left = toCssUnit(offsetLeft)
556
+ reactData.selectColor = selectColor ? updateColorAlpha(selectColor, alpha) : ''
557
+ }
558
+ }
559
+
560
+ const handleAlphaBarEvent = (evnt: MouseEvent) => {
561
+ const alphaSliderEl = refAlphaSliderElem.value
562
+ const alphaSliderBtnEl = refAlphaSliderBtnElem.value
563
+ if (alphaSliderEl && alphaSliderBtnEl) {
564
+ const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
565
+ const barWidth = alphaSliderRect.width
566
+ const offsetLeft = Math.min(barWidth, Math.max(0, evnt.clientX - alphaSliderRect.x))
567
+ handleAlphaColor(offsetLeft)
568
+ updateModelColor()
569
+ }
570
+ }
571
+
572
+ const handleAlphaSliderMousedownEvent = (evnt: MouseEvent) => {
573
+ evnt.preventDefault()
574
+ document.onmousemove = (evnt) => {
575
+ evnt.preventDefault()
576
+ handleAlphaBarEvent(evnt)
577
+ }
578
+ document.onmouseup = (evnt: MouseEvent) => {
579
+ document.onmousemove = null
580
+ document.onmouseup = null
581
+ handleAlphaBarEvent(evnt)
582
+ }
583
+ }
584
+
585
+ const handleInputRgbEvent = () => {
586
+ const { rValue, gValue, bValue, aValue } = reactData
587
+ reactData.selectColor = toValRgb(rValue, gValue, bValue, aValue)
588
+ updateModelColor()
589
+ }
590
+
591
+ const handleInputAlphaEvent = () => {
592
+ const { aValue } = reactData
593
+ const alphaSliderEl = refAlphaSliderElem.value
594
+ const alphaSliderBtnEl = refAlphaSliderBtnElem.value
595
+ if (alphaSliderEl && alphaSliderBtnEl) {
596
+ const alphaSliderRect = alphaSliderEl.getBoundingClientRect()
597
+ const barWidth = alphaSliderRect.width
598
+ const offsetLeft = barWidth * aValue
599
+ handleAlphaColor(offsetLeft)
600
+ }
601
+ }
602
+
603
+ const handleQuickEvent = (evnt: MouseEvent, item: any) => {
604
+ const value = item.value
605
+ reactData.selectColor = value
606
+ updateModelColor()
607
+ }
608
+
609
+ const handlePanelColor = (offsetLeft: number, offsetTop: number) => {
610
+ const colorActiveEl = refColorActiveElem.value
611
+ if (colorActiveEl) {
612
+ colorActiveEl.style.top = toCssUnit(offsetTop)
613
+ colorActiveEl.style.left = toCssUnit(offsetLeft)
614
+ }
615
+ }
616
+
617
+ const handleEyeDropperEvent = () => {
618
+ if (WinEyeDropper) {
619
+ try {
620
+ const eyeDropper = new WinEyeDropper()
621
+ eyeDropper
622
+ .open()
623
+ .then((rest: any) => {
624
+ if (rest && rest.sRGBHex) {
625
+ reactData.selectColor = rest.sRGBHex
626
+ updateModelColor()
627
+ }
628
+ })
629
+ .catch(() => {})
630
+ } catch (e) {}
631
+ }
632
+ }
633
+
634
+ const handleSelectColorByXY = (clientX: number, clientY: number) => {
635
+ const { showAlpha } = props
636
+ const { panelColor, aValue } = reactData
637
+ const colorPanelEl = refColorPanelElem.value
638
+ const colorActiveEl = refColorActiveElem.value
639
+ if (colorPanelEl && colorActiveEl) {
640
+ const { clientWidth, clientHeight } = colorPanelEl
641
+ const colorPanelRect = colorPanelEl.getBoundingClientRect()
642
+ const offsetTop = Math.min(clientHeight, Math.max(0, clientY - colorPanelRect.y))
643
+ const offsetLeft = Math.min(clientWidth, Math.max(0, clientX - colorPanelRect.x))
644
+ const colorRest = parseValColor(panelColor)
645
+ if (colorRest) {
646
+ const hsvRest = colorRest.type === 'hex' ? hexToHsv(colorRest.hex) : rgbToHsv(colorRest)
647
+ if (hsvRest) {
648
+ const ragRest = hsvToRgb(hsvRest.h, offsetLeft / clientWidth, 1 - offsetTop / clientHeight)
649
+ reactData.selectColor = toValRgb(ragRest.r, ragRest.g, ragRest.b, showAlpha ? aValue : null)
650
+ updateModelColor()
651
+ }
652
+ }
653
+ handlePanelColor(offsetLeft, offsetTop)
654
+ }
655
+ }
656
+
657
+ const handleSelectColorMousedownEvent = (evnt: MouseEvent) => {
658
+ evnt.stopPropagation()
659
+ evnt.preventDefault()
660
+ handleSelectColorByXY(evnt.clientX, evnt.clientY)
661
+ document.onmousemove = (evnt) => {
662
+ handleSelectColorByXY(evnt.clientX, evnt.clientY)
663
+ }
664
+ document.onmouseup = () => {
665
+ document.onmousemove = null
666
+ document.onmouseup = null
667
+ }
668
+ }
669
+
670
+ const handleCopyColorEvent = () => {
671
+ const { selectColor } = reactData
672
+ if (selectColor) {
673
+ if (VxeUI.clipboard.copy(selectColor)) {
674
+ if (VxeUI.modal) {
675
+ VxeUI.modal.message({
676
+ content: getI18n('vxe.colorPicker.copySuccess', [selectColor]),
677
+ status: 'success'
678
+ })
679
+ }
680
+ }
681
+ }
682
+ }
683
+
684
+ const handleGlobalMousedownEvent = (evnt: MouseEvent) => {
685
+ const { visiblePanel } = reactData
686
+ const isDisabled = computeIsDisabled.value
687
+ if (!isDisabled) {
688
+ const el = refElem.value
689
+ const panelElem = refOptionPanel.value
690
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
691
+ if (visiblePanel && !reactData.isActivated) {
692
+ hideOptionPanel()
693
+ }
694
+ }
695
+ }
696
+
697
+ const handleGlobalBlurEvent = () => {
698
+ const { visiblePanel, isActivated } = reactData
699
+ if (visiblePanel) {
700
+ hideOptionPanel()
701
+ }
702
+ if (isActivated) {
703
+ reactData.isActivated = false
704
+ }
705
+ if (visiblePanel || isActivated) {
706
+ const targetElem = refInputTarget.value
707
+ if (targetElem) {
708
+ targetElem.blur()
709
+ }
710
+ }
711
+ }
712
+
713
+ const handleGlobalResizeEvent = () => {
714
+ const { visiblePanel } = reactData
715
+ if (visiblePanel) {
716
+ updatePlacement()
717
+ }
718
+ }
719
+
720
+ const handleGlobalScrollEvent = () => {
721
+ const { visiblePanel } = reactData
722
+ if (visiblePanel) {
723
+ updatePlacement()
724
+ }
725
+ }
726
+
727
+ const dispatchEvent = (type: ValueOf<VxeColorPickerEmits>, params: Record<string, any>, evnt: Event | null) => {
728
+ emit(type, createEvent(evnt, { $colorPicker: $xeColorPicker }, params))
729
+ }
730
+
731
+ const colorPickerMethods: ColorPickerMethods = {
732
+ dispatchEvent
733
+ }
734
+
735
+ const colorPickerPrivateMethods: ColorPickerPrivateMethods = {}
736
+
737
+ Object.assign($xeColorPicker, colorPickerMethods, colorPickerPrivateMethods)
738
+
739
+ const renderColorWrapper = () => {
740
+ const { showColorExtractor } = props
741
+ const { panelColor } = reactData
742
+ if (showColorExtractor) {
743
+ return h(
744
+ 'div',
745
+ {
746
+ ref: refColorPanelElem,
747
+ class: 'vxe-color-picker--color-wrapper',
748
+ onMousedown: handleSelectColorMousedownEvent
749
+ },
750
+ [
751
+ h('div', {
752
+ class: 'vxe-color-picker--color-bg',
753
+ style: {
754
+ backgroundColor: panelColor
755
+ }
756
+ }),
757
+ h('div', {
758
+ class: 'vxe-color-picker--white-bg'
759
+ }),
760
+ h('div', {
761
+ class: 'vxe-color-picker--black-bg'
762
+ }),
763
+ h('div', {
764
+ ref: refColorActiveElem,
765
+ class: 'vxe-color-picker--color-active'
766
+ })
767
+ ]
768
+ )
769
+ }
770
+ return renderEmptyElement($xeColorPicker)
771
+ }
772
+
773
+ const renderColorBar = () => {
774
+ const { showAlpha, clickToCopy, showEyeDropper } = props
775
+ const { selectTyle, showTypePopup, hexValue, rValue, gValue, bValue, aValue, selectColor, panelColor } = reactData
776
+ const isRgb = computeIsRgb.value
777
+ const selectTypeItem = computeSelectTypeItem.value
778
+ return h(
779
+ 'div',
780
+ {
781
+ class: 'vxe-color-picker--bar-wrapper'
782
+ },
783
+ [
784
+ h(
785
+ 'div',
786
+ {
787
+ class: 'vxe-color-picker--slider-wrapper'
788
+ },
789
+ [
790
+ showEyeDropper && WinEyeDropper
791
+ ? h(
792
+ 'div',
793
+ {
794
+ class: 'vxe-color-picker--color-dropper'
795
+ },
796
+ [
797
+ h(
798
+ 'span',
799
+ {
800
+ class: 'vxe-color-picker--color-dropper-btn',
801
+ onClick: handleEyeDropperEvent
802
+ },
803
+ [
804
+ h('i', {
805
+ class: getIcon().COLOR_PICKER_EYE_DROPPER
806
+ })
807
+ ]
808
+ )
809
+ ]
810
+ )
811
+ : renderEmptyElement($xeColorPicker),
812
+ h(
813
+ 'div',
814
+ {
815
+ class: 'vxe-color-picker--slider-preview'
816
+ },
817
+ [
818
+ h(
819
+ 'div',
820
+ {
821
+ class: 'vxe-color-picker--preview-btn'
822
+ },
823
+ [
824
+ h(
825
+ 'div',
826
+ {
827
+ class: 'vxe-color-picker--preview-color',
828
+ style: {
829
+ backgroundColor: selectColor
830
+ }
831
+ },
832
+ clickToCopy
833
+ ? [
834
+ h(
835
+ 'span',
836
+ {
837
+ class: 'vxe-color-picker--preview-copy-btn',
838
+ onClick: handleCopyColorEvent
839
+ },
840
+ [
841
+ h('i', {
842
+ class: getIcon().COLOR_PICKER_COLOR_COPY
843
+ })
844
+ ]
845
+ )
846
+ ]
847
+ : []
848
+ )
849
+ ]
850
+ )
851
+ ]
852
+ ),
853
+ h(
854
+ 'div',
855
+ {
856
+ class: 'vxe-color-picker--slider-handle'
857
+ },
858
+ [
859
+ h(
860
+ 'div',
861
+ {
862
+ ref: refHueSliderElem,
863
+ class: 'vxe-color-picker--bar-hue-slider',
864
+ onClick: handleHueBarEvent
865
+ },
866
+ [
867
+ h('div', {
868
+ ref: refHueSliderBtnElem,
869
+ class: 'vxe-color-picker--bar-hue-btn',
870
+ onMousedown: handleHueSliderMousedownEvent
871
+ })
872
+ ]
873
+ ),
874
+ showAlpha
875
+ ? h(
876
+ 'div',
877
+ {
878
+ ref: refAlphaSliderElem,
879
+ class: 'vxe-color-picker--bar-alpha-slider',
880
+ onClick: handleAlphaBarEvent
881
+ },
882
+ [
883
+ h('div', {
884
+ class: 'vxe-color-picker--bar-alpha-bg',
885
+ style: {
886
+ background: `linear-gradient(to right, rgba(0, 0, 0, 0), ${panelColor})`
887
+ }
888
+ }),
889
+ h('div', {
890
+ ref: refAlphaSliderBtnElem,
891
+ class: 'vxe-color-picker--bar-alpha-btn',
892
+ onMousedown: handleAlphaSliderMousedownEvent
893
+ })
894
+ ]
895
+ )
896
+ : renderEmptyElement($xeColorPicker)
897
+ ]
898
+ )
899
+ ]
900
+ ),
901
+ h(
902
+ 'div',
903
+ {
904
+ class: 'vxe-color-picker--custom-wrapper'
905
+ },
906
+ [
907
+ h(
908
+ 'div',
909
+ {
910
+ class: 'vxe-color-picker--type-switch'
911
+ },
912
+ [
913
+ h(
914
+ 'div',
915
+ {
916
+ class: 'vxe-color-picker--type-label',
917
+ onClick: toggleTypeVisibleEvent
918
+ },
919
+ [
920
+ h('span', `${selectTypeItem ? selectTypeItem.label : selectTyle}`),
921
+ h(
922
+ 'span',
923
+ {
924
+ class: 'vxe-color-picker--type-icon'
925
+ },
926
+ [
927
+ h('i', {
928
+ class: showTypePopup ? getIcon().COLOR_PICKER_TPTY_OPEN : getIcon().COLOR_PICKER_TPTY_CLOSE
929
+ })
930
+ ]
931
+ )
932
+ ]
933
+ ),
934
+ h(
935
+ 'div',
936
+ {
937
+ class: [
938
+ 'vxe-color-picker--type-popup',
939
+ {
940
+ 'is--visible': showTypePopup
941
+ }
942
+ ]
943
+ },
944
+ typeList.map((item) => {
945
+ return h(
946
+ 'div',
947
+ {
948
+ class: 'vxe-color-picker--type-item',
949
+ onClick(evnt) {
950
+ evnt.stopPropagation()
951
+ handleChangeType(item.value as VxeColorPickerPropTypes.Type)
952
+ }
953
+ },
954
+ item.label
955
+ )
956
+ })
957
+ )
958
+ ]
959
+ ),
960
+ h(
961
+ 'div',
962
+ {
963
+ class: `vxe-color-picker--${selectTyle}-wrapper`
964
+ },
965
+ isRgb
966
+ ? [
967
+ h(
968
+ 'div',
969
+ {
970
+ class: 'vxe-color-picker--input-wrapper'
971
+ },
972
+ [
973
+ h(VxeNumberInputComponent, {
974
+ type: 'integer',
975
+ size: 'mini',
976
+ align: 'center',
977
+ min: 0,
978
+ max: 255,
979
+ maxLength: 3,
980
+ placeholder: '',
981
+ modelValue: rValue,
982
+ controlConfig: {
983
+ showButton: false
984
+ },
985
+ 'onUpdate:modelValue'(val) {
986
+ reactData.rValue = val
987
+ },
988
+ onChange: handleInputRgbEvent
989
+ }),
990
+ h(VxeNumberInputComponent, {
991
+ type: 'integer',
992
+ size: 'mini',
993
+ align: 'center',
994
+ min: 0,
995
+ max: 255,
996
+ maxLength: 3,
997
+ placeholder: '',
998
+ modelValue: gValue,
999
+ controlConfig: {
1000
+ showButton: false
1001
+ },
1002
+ 'onUpdate:modelValue'(val) {
1003
+ reactData.gValue = val
1004
+ },
1005
+ onChange: handleInputRgbEvent
1006
+ }),
1007
+ h(VxeNumberInputComponent, {
1008
+ type: 'integer',
1009
+ size: 'mini',
1010
+ align: 'center',
1011
+ min: 0,
1012
+ max: 255,
1013
+ maxLength: 3,
1014
+ placeholder: '',
1015
+ modelValue: bValue,
1016
+ controlConfig: {
1017
+ showButton: false
1018
+ },
1019
+ 'onUpdate:modelValue'(val) {
1020
+ reactData.bValue = val
1021
+ },
1022
+ onChange: handleInputRgbEvent
1023
+ }),
1024
+ h(VxeNumberInputComponent, {
1025
+ type: 'number',
1026
+ size: 'mini',
1027
+ align: 'center',
1028
+ min: 0,
1029
+ max: 1,
1030
+ step: 0.01,
1031
+ maxLength: 4,
1032
+ placeholder: '',
1033
+ modelValue: aValue,
1034
+ controlConfig: {
1035
+ showButton: false
1036
+ },
1037
+ 'onUpdate:modelValue'(val) {
1038
+ reactData.aValue = val
1039
+ },
1040
+ onChange: handleInputAlphaEvent
1041
+ })
1042
+ ]
1043
+ ),
1044
+ h(
1045
+ 'div',
1046
+ {
1047
+ class: 'vxe-color-picker--input-title'
1048
+ },
1049
+ [h('span', 'R'), h('span', 'G'), h('span', 'B'), h('span', 'A')]
1050
+ )
1051
+ ]
1052
+ : [
1053
+ h(
1054
+ 'div',
1055
+ {
1056
+ class: 'vxe-color-picker--input-wrapper'
1057
+ },
1058
+ [
1059
+ h(VxeInputComponent, {
1060
+ type: 'text',
1061
+ size: 'mini',
1062
+ align: 'center',
1063
+ maxLength: 9,
1064
+ placeholder: '',
1065
+ modelValue: hexValue,
1066
+ 'onUpdate:modelValue'(val) {
1067
+ reactData.hexValue = val
1068
+ },
1069
+ onChange() {
1070
+ const colorRest = parseValColor(reactData.hexValue)
1071
+ if (colorRest) {
1072
+ if (colorRest.value) {
1073
+ reactData.selectColor = colorRest.value
1074
+ updateModelColor()
1075
+ }
1076
+ }
1077
+ }
1078
+ })
1079
+ ]
1080
+ ),
1081
+ h(
1082
+ 'div',
1083
+ {
1084
+ class: 'vxe-color-picker--input-title'
1085
+ },
1086
+ getI18n('vxe.colorPicker.hex')
1087
+ )
1088
+ ]
1089
+ )
1090
+ ]
1091
+ )
1092
+ ]
1093
+ )
1094
+ }
1095
+
1096
+ const renderQuickWrapper = () => {
1097
+ const { showQuick } = props
1098
+ const colorList = computeColorList.value
1099
+ if (showQuick && colorList.length) {
1100
+ return h(
1101
+ 'div',
1102
+ {
1103
+ class: 'vxe-color-picker--quick-wrapper'
1104
+ },
1105
+ colorList.map((item, i) => {
1106
+ return h('div', {
1107
+ key: i,
1108
+ class: 'vxe-color-picker--quick-item',
1109
+ title: item.label || '',
1110
+ style: {
1111
+ backgroundColor: item.value
1112
+ },
1113
+ onClick(evnt) {
1114
+ handleQuickEvent(evnt, item)
1115
+ }
1116
+ })
1117
+ })
1118
+ )
1119
+ }
1120
+ return renderEmptyElement($xeColorPicker)
1121
+ }
1122
+
1123
+ const renderVN = () => {
1124
+ const { className, popupClassName, clearable, modelValue } = props
1125
+ const { initialized, isActivated, isAniVisible, visiblePanel } = reactData
1126
+ const vSize = computeSize.value
1127
+ const isDisabled = computeIsDisabled.value
1128
+ const btnTransfer = computeBtnTransfer.value
1129
+ const formReadonly = computeFormReadonly.value
1130
+
1131
+ if (formReadonly) {
1132
+ return h(
1133
+ 'div',
1134
+ {
1135
+ ref: refElem,
1136
+ class: [
1137
+ 'vxe-color-picker--readonly',
1138
+ className,
1139
+ {
1140
+ [`size--${vSize}`]: vSize
1141
+ }
1142
+ ]
1143
+ },
1144
+ [
1145
+ h('div', {
1146
+ class: [
1147
+ 'vxe-color-picker--readonly-color',
1148
+ {
1149
+ 'is--empty': !modelValue
1150
+ }
1151
+ ],
1152
+ style: modelValue
1153
+ ? {
1154
+ backgroundColor: modelValue
1155
+ }
1156
+ : undefined
1157
+ })
1158
+ ]
1159
+ )
1160
+ }
1161
+ const currStyle = computeCurrStyle.value
1162
+ const popupOpts = computePopupOpts.value
1163
+ const { appendTo } = popupOpts
1164
+ return h(
1165
+ 'div',
1166
+ {
1167
+ ref: refElem,
1168
+ class: [
1169
+ 'vxe-color-picker',
1170
+ className ? (XEUtils.isFunction(className) ? className({ $colorPicker: $xeColorPicker }) : className) : '',
1171
+ {
1172
+ [`size--${vSize}`]: vSize,
1173
+ 'is--selected': !!modelValue,
1174
+ 'is--visible': visiblePanel,
1175
+ 'is--disabled': isDisabled,
1176
+ 'is--active': isActivated
1177
+ }
1178
+ ],
1179
+ style: currStyle
1180
+ },
1181
+ [
1182
+ h('input', {
1183
+ ref: refInputTarget,
1184
+ class: 'vxe-color-picker--input',
1185
+ onFocus: focusEvent,
1186
+ onBlur: blurEvent
1187
+ }),
1188
+ h(
1189
+ 'div',
1190
+ {
1191
+ class: 'vxe-color-picker--inner',
1192
+ onClick: clickEvent
1193
+ },
1194
+ [
1195
+ h('div', {
1196
+ class: 'vxe-color-picker--inner-color',
1197
+ style: {
1198
+ backgroundColor: modelValue
1199
+ }
1200
+ })
1201
+ ]
1202
+ ),
1203
+ h(
1204
+ Teleport,
1205
+ {
1206
+ to: getPopupContainer(appendTo),
1207
+ disabled: btnTransfer ? !initialized : true
1208
+ },
1209
+ [
1210
+ h(
1211
+ 'div',
1212
+ {
1213
+ ref: refOptionPanel,
1214
+ class: [
1215
+ 'vxe-table--ignore-clear vxe-color-picker--panel',
1216
+ popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $colorPicker: $xeColorPicker }) : popupClassName) : '',
1217
+ {
1218
+ [`size--${vSize}`]: vSize,
1219
+ 'is--transfer': btnTransfer,
1220
+ 'ani--leave': isAniVisible,
1221
+ 'ani--enter': visiblePanel
1222
+ }
1223
+ ],
1224
+ placement: reactData.panelPlacement,
1225
+ style: reactData.panelStyle
1226
+ },
1227
+ [
1228
+ initialized && (visiblePanel || isAniVisible)
1229
+ ? h(
1230
+ 'div',
1231
+ {
1232
+ class: 'vxe-color-picker--panel-wrapper',
1233
+ onClick: handlePanelClickEvent
1234
+ },
1235
+ [
1236
+ renderColorWrapper(),
1237
+ renderColorBar(),
1238
+ renderQuickWrapper(),
1239
+ h(
1240
+ 'div',
1241
+ {
1242
+ class: 'vxe-color-picker--footer-wrapper'
1243
+ },
1244
+ [
1245
+ clearable
1246
+ ? h(VxeButtonComponent, {
1247
+ content: getI18n('vxe.colorPicker.clear'),
1248
+ size: 'mini',
1249
+ onClick: clearEvent
1250
+ })
1251
+ : renderEmptyElement($xeColorPicker),
1252
+ h(VxeButtonComponent, {
1253
+ content: getI18n('vxe.colorPicker.confirm'),
1254
+ size: 'mini',
1255
+ status: 'primary',
1256
+ onClick: confirmEvent
1257
+ })
1258
+ ]
1259
+ )
1260
+ ]
1261
+ )
1262
+ : renderEmptyElement($xeColorPicker)
1263
+ ]
1264
+ )
1265
+ ]
1266
+ )
1267
+ ]
1268
+ )
1269
+ }
1270
+
1271
+ watch(
1272
+ () => props.modelValue,
1273
+ () => {
1274
+ updateMode()
1275
+ }
1276
+ )
1277
+
1278
+ watch(
1279
+ () => props.type,
1280
+ () => {
1281
+ updateType()
1282
+ }
1283
+ )
1284
+
1285
+ onMounted(() => {
1286
+ globalEvents.on($xeColorPicker, 'mousedown', handleGlobalMousedownEvent)
1287
+ globalEvents.on($xeColorPicker, 'blur', handleGlobalBlurEvent)
1288
+ globalEvents.on($xeColorPicker, 'resize', handleGlobalResizeEvent)
1289
+ globalEvents.on($xeColorPicker, 'scroll', handleGlobalScrollEvent)
1290
+ })
1291
+
1292
+ onUnmounted(() => {
1293
+ globalEvents.off($xeColorPicker, 'mousedown')
1294
+ globalEvents.off($xeColorPicker, 'blur')
1295
+ globalEvents.off($xeColorPicker, 'resize')
1296
+ globalEvents.off($xeColorPicker, 'scroll')
1297
+ })
1298
+
1299
+ updateType()
1300
+
1301
+ provide('$xeColorPicker', $xeColorPicker)
1302
+
1303
+ $xeColorPicker.renderVN = renderVN
1304
+
1305
+ return $xeColorPicker
1306
+ },
1307
+ render() {
1308
+ return this.renderVN()
1309
+ }
1310
+ })