vxe-pc-ui 4.20.24 → 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 (627) hide show
  1. package/dist/all.esm.js +15151 -10366
  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.d.ts +3 -0
  53. package/es/index.esm.js +12 -0
  54. package/es/index.js +12 -0
  55. package/es/input/src/input.js +820 -507
  56. package/es/layout-aside/src/layout-aside.js +54 -38
  57. package/es/layout-body/src/layout-body.js +39 -27
  58. package/es/layout-container/src/layout-container.js +16 -9
  59. package/es/layout-footer/src/layout-footer.js +16 -7
  60. package/es/layout-header/src/layout-header.js +15 -7
  61. package/es/link/src/link.js +65 -44
  62. package/es/list/src/list.js +453 -333
  63. package/es/loading/index.js +8 -5
  64. package/es/loading/src/loading.js +60 -33
  65. package/es/mention/src/mention.js +2 -1
  66. package/es/menu/src/menu.js +341 -210
  67. package/es/modal/index.js +60 -37
  68. package/es/modal/src/modal.js +303 -205
  69. package/es/notice-bar/src/notice-bar.js +64 -37
  70. package/es/number-input/src/number-input.js +249 -172
  71. package/es/pager/src/pager.js +346 -202
  72. package/es/password-input/src/password-input.js +145 -105
  73. package/es/print/src/page-break.js +2 -1
  74. package/es/print/src/print.js +184 -99
  75. package/es/pulldown/src/pulldown.js +113 -71
  76. package/es/radio/src/button.js +92 -57
  77. package/es/radio/src/group.js +33 -25
  78. package/es/radio/src/radio.js +61 -41
  79. package/es/rate/src/rate.js +48 -36
  80. package/es/result/src/result.js +67 -35
  81. package/es/row/src/col.js +30 -16
  82. package/es/row/src/row.js +21 -14
  83. package/es/scrollbar/src/scrollbar.js +177 -145
  84. package/es/segmented/src/segmented.js +93 -60
  85. package/es/select/src/optgroup.js +7 -3
  86. package/es/select/src/select.js +483 -340
  87. package/es/select/src/util.js +6 -3
  88. package/es/slider/src/slider.js +108 -80
  89. package/es/space/src/space.js +43 -26
  90. package/es/splitter/src/splitter-panel.js +50 -25
  91. package/es/splitter/src/splitter.js +219 -144
  92. package/es/steps/src/steps.js +10 -5
  93. package/es/style.css +1 -1
  94. package/es/style.mini.css +1 -1
  95. package/es/switch/src/switch.js +115 -64
  96. package/es/table-select/src/table-select.js +232 -153
  97. package/es/table-transfer/src/table-transfer.js +10 -5
  98. package/es/tabs/src/tab-pane.js +33 -16
  99. package/es/tabs/src/tabs.js +363 -230
  100. package/es/tag/src/tag.js +61 -43
  101. package/es/text/src/text.js +89 -65
  102. package/es/text-ellipsis/src/text-ellipsis.js +82 -51
  103. package/es/textarea/src/textarea.js +116 -86
  104. package/es/timeline/src/timeline-item.js +2 -1
  105. package/es/timeline/src/timeline.js +2 -1
  106. package/es/tip/src/tip.js +53 -29
  107. package/es/tooltip/src/tooltip.js +114 -74
  108. package/es/tour/src/tour.js +2 -1
  109. package/es/transfer/src/transfer.js +42 -25
  110. package/es/tree/src/tree.js +709 -492
  111. package/es/tree-select/src/tree-select.js +320 -225
  112. package/es/ui/index.d.ts +0 -1
  113. package/es/ui/index.js +46 -3
  114. package/es/ui/src/dom.js +9 -6
  115. package/es/ui/src/log.js +1 -1
  116. package/es/ui/src/utils.d.ts +1 -1
  117. package/es/upload/src/upload.js +614 -398
  118. package/es/vxe-icon/style.css +1 -1
  119. package/es/vxe-icon/style.mini.css +1 -1
  120. package/es/watermark/src/util.js +15 -12
  121. package/es/watermark/src/watermark.js +55 -25
  122. package/lib/alert/src/alert.js +62 -37
  123. package/lib/anchor/src/anchor-link.js +39 -20
  124. package/lib/anchor/src/anchor.js +75 -46
  125. package/lib/avatar/src/avatar.js +52 -32
  126. package/lib/backtop/src/backtop.js +81 -56
  127. package/lib/badge/src/badge.js +35 -19
  128. package/lib/breadcrumb/src/breadcrumb-item.js +52 -27
  129. package/lib/breadcrumb/src/breadcrumb.js +13 -10
  130. package/lib/button/src/button-group.js +27 -21
  131. package/lib/button/src/button.js +306 -207
  132. package/lib/calendar/src/calendar.js +575 -362
  133. package/lib/card/src/card.js +133 -78
  134. package/lib/carousel/src/carousel-item.js +15 -8
  135. package/lib/carousel/src/carousel.js +182 -120
  136. package/lib/cascader/src/cascader.js +555 -409
  137. package/lib/checkbox/src/button.js +93 -58
  138. package/lib/checkbox/src/checkbox.js +63 -43
  139. package/lib/checkbox/src/group.js +37 -29
  140. package/lib/collapse/src/collapse-pane.js +34 -17
  141. package/lib/collapse/src/collapse.js +139 -85
  142. package/lib/color-picker/src/color-picker.js +516 -377
  143. package/lib/components.js +3 -2
  144. package/lib/context-menu/src/context-menu.js +212 -132
  145. package/lib/countdown/src/countdown.js +95 -63
  146. package/lib/date-panel/src/date-panel.js +776 -466
  147. package/lib/date-picker/src/date-picker.js +377 -274
  148. package/lib/date-range-picker/src/date-range-picker.js +401 -300
  149. package/lib/divider/src/divider.js +31 -17
  150. package/lib/drawer/src/drawer.js +255 -155
  151. package/lib/dynamics/index.js +38 -25
  152. package/lib/empty/src/empty.js +55 -31
  153. package/lib/form/render/index.js +68 -43
  154. package/lib/form/src/form-config-item.js +24 -18
  155. package/lib/form/src/form-group.js +25 -16
  156. package/lib/form/src/form-item.js +25 -19
  157. package/lib/form/src/form.js +140 -96
  158. package/lib/form/src/itemInfo.js +4 -3
  159. package/lib/form/src/render.js +214 -134
  160. package/lib/form/src/util.js +9 -5
  161. package/lib/icon/src/icon.js +17 -13
  162. package/lib/icon/style/style.css +1 -1
  163. package/lib/icon/style/style.mini.css +1 -1
  164. package/lib/icon-picker/src/icon-picker.js +251 -158
  165. package/lib/image/src/group.js +26 -20
  166. package/lib/image/src/image.js +41 -40
  167. package/lib/image/src/preview.js +206 -146
  168. package/lib/image/src/util.js +6 -3
  169. package/lib/index.common.js +12 -0
  170. package/lib/index.js +12 -0
  171. package/lib/index.umd.js +15359 -10558
  172. package/lib/index.umd.min.js +3 -3
  173. package/lib/input/src/input.js +878 -565
  174. package/lib/layout-aside/src/layout-aside.js +61 -45
  175. package/lib/layout-body/src/layout-body.js +47 -35
  176. package/lib/layout-container/src/layout-container.js +18 -11
  177. package/lib/layout-footer/src/layout-footer.js +17 -8
  178. package/lib/layout-header/src/layout-header.js +16 -8
  179. package/lib/link/src/link.js +69 -48
  180. package/lib/list/src/list.js +456 -336
  181. package/lib/loading/index.js +8 -5
  182. package/lib/loading/src/loading.js +69 -42
  183. package/lib/mention/src/mention.js +4 -3
  184. package/lib/menu/src/menu.js +351 -220
  185. package/lib/modal/index.js +60 -37
  186. package/lib/modal/src/modal.js +306 -208
  187. package/lib/notice-bar/src/notice-bar.js +70 -43
  188. package/lib/number-input/src/number-input.js +290 -213
  189. package/lib/pager/src/pager.js +347 -203
  190. package/lib/password-input/src/password-input.js +155 -115
  191. package/lib/print/src/page-break.js +3 -2
  192. package/lib/print/src/print.js +193 -108
  193. package/lib/pulldown/src/pulldown.js +128 -86
  194. package/lib/radio/src/button.js +96 -61
  195. package/lib/radio/src/group.js +37 -29
  196. package/lib/radio/src/radio.js +65 -45
  197. package/lib/rate/src/rate.js +50 -38
  198. package/lib/result/src/result.js +68 -36
  199. package/lib/row/src/col.js +32 -18
  200. package/lib/row/src/row.js +25 -18
  201. package/lib/scrollbar/src/scrollbar.js +178 -146
  202. package/lib/segmented/src/segmented.js +97 -64
  203. package/lib/select/src/optgroup.js +7 -3
  204. package/lib/select/src/select.js +486 -343
  205. package/lib/select/src/util.js +6 -3
  206. package/lib/slider/src/slider.js +122 -94
  207. package/lib/space/src/space.js +57 -40
  208. package/lib/splitter/src/splitter-panel.js +51 -26
  209. package/lib/splitter/src/splitter.js +233 -158
  210. package/lib/steps/src/steps.js +11 -6
  211. package/lib/style.css +1 -1
  212. package/lib/style.mini.css +1 -1
  213. package/lib/switch/src/switch.js +116 -65
  214. package/lib/table-select/src/table-select.js +234 -155
  215. package/lib/table-transfer/src/table-transfer.js +12 -7
  216. package/lib/tabs/src/tab-pane.js +34 -17
  217. package/lib/tabs/src/tabs.js +365 -232
  218. package/lib/tag/src/tag.js +67 -49
  219. package/lib/text/src/text.js +100 -76
  220. package/lib/text-ellipsis/src/text-ellipsis.js +86 -55
  221. package/lib/textarea/src/textarea.js +127 -97
  222. package/lib/timeline/src/timeline-item.js +3 -2
  223. package/lib/timeline/src/timeline.js +4 -3
  224. package/lib/tip/src/tip.js +58 -34
  225. package/lib/tooltip/src/tooltip.js +116 -76
  226. package/lib/tour/src/tour.js +4 -3
  227. package/lib/transfer/src/transfer.js +44 -27
  228. package/lib/tree/src/tree.js +717 -500
  229. package/lib/tree-select/src/tree-select.js +351 -256
  230. package/lib/ui/index.js +46 -4
  231. package/lib/ui/src/dom.js +9 -6
  232. package/lib/ui/src/log.js +1 -1
  233. package/lib/upload/src/upload.js +708 -492
  234. package/lib/vxe-icon/style/style.css +1 -1
  235. package/lib/vxe-icon/style/style.mini.css +1 -1
  236. package/lib/watermark/src/util.js +15 -12
  237. package/lib/watermark/src/watermark.js +60 -30
  238. package/package.json +10 -4
  239. package/packages/alert/index.ts +16 -16
  240. package/packages/alert/src/alert.ts +148 -126
  241. package/packages/anchor/index.ts +16 -16
  242. package/packages/anchor/src/anchor-link.ts +139 -121
  243. package/packages/anchor/src/anchor.ts +266 -237
  244. package/packages/anchor/src/util.ts +23 -23
  245. package/packages/anchor-link/index.ts +16 -16
  246. package/packages/avatar/index.ts +16 -16
  247. package/packages/avatar/src/avatar.ts +166 -149
  248. package/packages/backtop/index.ts +16 -16
  249. package/packages/backtop/src/backtop.ts +337 -313
  250. package/packages/badge/index.ts +16 -16
  251. package/packages/badge/src/badge.ts +131 -118
  252. package/packages/breadcrumb/index.ts +16 -16
  253. package/packages/breadcrumb/src/breadcrumb-item.ts +129 -106
  254. package/packages/breadcrumb/src/breadcrumb.ts +94 -92
  255. package/packages/breadcrumb-item/index.ts +16 -16
  256. package/packages/button/index.ts +16 -16
  257. package/packages/button/src/button-group.ts +116 -110
  258. package/packages/button/src/button.ts +975 -855
  259. package/packages/button-group/index.ts +16 -16
  260. package/packages/calendar/index.ts +16 -16
  261. package/packages/calendar/src/calendar.ts +1566 -1352
  262. package/packages/card/index.ts +16 -16
  263. package/packages/card/src/card.ts +285 -236
  264. package/packages/carousel/index.ts +16 -16
  265. package/packages/carousel/src/carousel-item.ts +120 -102
  266. package/packages/carousel/src/carousel.ts +475 -414
  267. package/packages/carousel/src/util.ts +21 -21
  268. package/packages/carousel-item/index.ts +16 -16
  269. package/packages/cascader/index.ts +16 -16
  270. package/packages/cascader/src/cascader.ts +2074 -1896
  271. package/packages/cascader/src/util.ts +9 -9
  272. package/packages/checkbox/index.ts +16 -16
  273. package/packages/checkbox/src/button.ts +267 -221
  274. package/packages/checkbox/src/checkbox.ts +219 -199
  275. package/packages/checkbox/src/group.ts +292 -269
  276. package/packages/checkbox-button/index.ts +16 -16
  277. package/packages/checkbox-group/index.ts +16 -16
  278. package/packages/col/index.ts +16 -16
  279. package/packages/collapse/index.ts +16 -16
  280. package/packages/collapse/src/collapse-pane.ts +142 -114
  281. package/packages/collapse/src/collapse.ts +453 -384
  282. package/packages/collapse/src/util.ts +21 -21
  283. package/packages/collapse-pane/index.ts +16 -16
  284. package/packages/color-picker/index.ts +31 -31
  285. package/packages/color-picker/src/color-picker.ts +1310 -1147
  286. package/packages/color-picker/src/util.ts +436 -423
  287. package/packages/components.ts +350 -349
  288. package/packages/context-menu/index.ts +54 -54
  289. package/packages/context-menu/src/context-menu.ts +773 -681
  290. package/packages/countdown/index.ts +16 -16
  291. package/packages/countdown/src/countdown.ts +295 -262
  292. package/packages/date-panel/index.ts +16 -16
  293. package/packages/date-panel/src/date-panel.ts +2214 -1900
  294. package/packages/date-panel/src/util.ts +354 -326
  295. package/packages/date-picker/index.ts +16 -16
  296. package/packages/date-picker/src/date-picker.ts +1884 -1752
  297. package/packages/date-range-picker/index.ts +16 -16
  298. package/packages/date-range-picker/src/date-range-picker.ts +1728 -1604
  299. package/packages/divider/index.ts +16 -16
  300. package/packages/divider/src/divider.ts +105 -93
  301. package/packages/drawer/index.ts +78 -78
  302. package/packages/drawer/src/drawer.ts +920 -802
  303. package/packages/drawer/src/store.ts +3 -3
  304. package/packages/dynamics/index.ts +124 -117
  305. package/packages/empty/index.ts +16 -16
  306. package/packages/empty/src/empty.ts +124 -103
  307. package/packages/form/index.ts +16 -16
  308. package/packages/form/render/index.ts +646 -614
  309. package/packages/form/src/form-config-item.ts +85 -80
  310. package/packages/form/src/form-group.ts +96 -86
  311. package/packages/form/src/form-item.ts +181 -174
  312. package/packages/form/src/form.ts +1122 -1069
  313. package/packages/form/src/itemInfo.ts +84 -82
  314. package/packages/form/src/render.ts +470 -387
  315. package/packages/form/src/util.ts +98 -93
  316. package/packages/form-gather/index.ts +26 -26
  317. package/packages/form-group/index.ts +16 -16
  318. package/packages/form-item/index.ts +16 -16
  319. package/packages/icon/index.ts +16 -16
  320. package/packages/icon/src/icon.ts +78 -75
  321. package/packages/icon-picker/index.ts +16 -16
  322. package/packages/icon-picker/src/icon-picker.ts +922 -809
  323. package/packages/image/index.ts +16 -16
  324. package/packages/image/src/group.ts +159 -153
  325. package/packages/image/src/image.ts +298 -298
  326. package/packages/image/src/preview.ts +749 -672
  327. package/packages/image/src/util.ts +62 -59
  328. package/packages/image-group/index.ts +16 -16
  329. package/packages/image-preview/index.ts +19 -19
  330. package/packages/index.ts +20 -4
  331. package/packages/input/index.ts +16 -16
  332. package/packages/input/src/input.ts +3201 -2863
  333. package/packages/language/fr-FR.ts +15 -15
  334. package/packages/language/it-IT.ts +4 -4
  335. package/packages/language/uk-UA.ts +1 -1
  336. package/packages/language/uz-UZ.ts +13 -13
  337. package/packages/language/zh-CN.ts +907 -907
  338. package/packages/layout-aside/index.ts +16 -16
  339. package/packages/layout-aside/src/layout-aside.ts +172 -156
  340. package/packages/layout-body/index.ts +16 -16
  341. package/packages/layout-body/src/layout-body.ts +191 -181
  342. package/packages/layout-container/index.ts +16 -16
  343. package/packages/layout-container/src/layout-container.ts +108 -92
  344. package/packages/layout-footer/index.ts +16 -16
  345. package/packages/layout-footer/src/layout-footer.ts +81 -74
  346. package/packages/layout-header/index.ts +16 -16
  347. package/packages/layout-header/src/layout-header.ts +79 -73
  348. package/packages/link/index.ts +16 -16
  349. package/packages/link/src/link.ts +180 -161
  350. package/packages/list/index.ts +16 -16
  351. package/packages/list/src/list.ts +2690 -2564
  352. package/packages/list/src/store.ts +10 -10
  353. package/packages/list/src/util.ts +10 -11
  354. package/packages/loading/index.ts +39 -36
  355. package/packages/loading/src/loading.ts +179 -152
  356. package/packages/mention/index.ts +16 -16
  357. package/packages/mention/src/mention.ts +69 -71
  358. package/packages/menu/index.ts +16 -16
  359. package/packages/menu/src/menu.ts +1000 -857
  360. package/packages/modal/index.ts +164 -141
  361. package/packages/modal/src/modal.ts +1803 -1681
  362. package/packages/modal/src/store.ts +3 -3
  363. package/packages/notice-bar/index.ts +16 -16
  364. package/packages/notice-bar/src/notice-bar.ts +207 -181
  365. package/packages/number-input/index.ts +16 -16
  366. package/packages/number-input/src/number-input.ts +1322 -1242
  367. package/packages/number-input/src/util.ts +25 -25
  368. package/packages/optgroup/index.ts +16 -16
  369. package/packages/option/index.ts +16 -16
  370. package/packages/pager/index.ts +16 -16
  371. package/packages/pager/src/pager.ts +919 -775
  372. package/packages/password-input/index.ts +16 -16
  373. package/packages/password-input/src/password-input.ts +523 -482
  374. package/packages/print/index.ts +18 -18
  375. package/packages/print/src/page-break.ts +104 -92
  376. package/packages/print/src/print.ts +366 -281
  377. package/packages/print/src/util.ts +299 -304
  378. package/packages/print-page-break/index.ts +16 -16
  379. package/packages/pulldown/index.ts +16 -16
  380. package/packages/pulldown/src/pulldown.ts +505 -445
  381. package/packages/radio/index.ts +16 -16
  382. package/packages/radio/src/button.ts +290 -243
  383. package/packages/radio/src/group.ts +275 -252
  384. package/packages/radio/src/radio.ts +237 -218
  385. package/packages/radio-button/index.ts +16 -16
  386. package/packages/radio-group/index.ts +16 -16
  387. package/packages/rate/index.ts +16 -16
  388. package/packages/rate/src/rate.ts +203 -192
  389. package/packages/result/index.ts +16 -16
  390. package/packages/result/src/result.ts +141 -112
  391. package/packages/row/index.ts +16 -16
  392. package/packages/row/src/col.ts +171 -159
  393. package/packages/row/src/row.ts +143 -138
  394. package/packages/scrollbar/index.ts +16 -16
  395. package/packages/scrollbar/src/scrollbar.ts +626 -595
  396. package/packages/segmented/index.ts +16 -16
  397. package/packages/segmented/src/segmented.ts +297 -264
  398. package/packages/select/index.ts +16 -16
  399. package/packages/select/src/optgroup.ts +53 -49
  400. package/packages/select/src/option-info.ts +20 -20
  401. package/packages/select/src/option.ts +47 -47
  402. package/packages/select/src/select.ts +2390 -2214
  403. package/packages/select/src/util.ts +50 -47
  404. package/packages/slider/index.ts +16 -16
  405. package/packages/slider/src/slider.ts +547 -506
  406. package/packages/space/index.ts +16 -16
  407. package/packages/space/src/space.ts +225 -209
  408. package/packages/split/index.ts +16 -16
  409. package/packages/split-pane/index.ts +17 -17
  410. package/packages/splitter/index.ts +16 -16
  411. package/packages/splitter/src/splitter-panel.ts +199 -163
  412. package/packages/splitter/src/splitter.ts +1110 -1020
  413. package/packages/splitter/src/util.ts +21 -21
  414. package/packages/splitter-panel/index.ts +16 -16
  415. package/packages/steps/index.ts +16 -16
  416. package/packages/steps/src/steps.ts +69 -68
  417. package/packages/switch/index.ts +16 -16
  418. package/packages/switch/src/switch.ts +300 -245
  419. package/packages/tab-pane/index.ts +16 -16
  420. package/packages/table-select/index.ts +16 -16
  421. package/packages/table-select/src/table-select.ts +1103 -999
  422. package/packages/table-transfer/index.ts +16 -16
  423. package/packages/table-transfer/src/table-transfer.ts +104 -91
  424. package/packages/tabs/index.ts +16 -16
  425. package/packages/tabs/src/tab-pane.ts +132 -117
  426. package/packages/tabs/src/tabs.ts +1137 -997
  427. package/packages/tabs/src/util.ts +21 -21
  428. package/packages/tag/index.ts +16 -16
  429. package/packages/tag/src/tag.ts +204 -187
  430. package/packages/text/index.ts +16 -16
  431. package/packages/text/src/text.ts +282 -260
  432. package/packages/text-ellipsis/index.ts +16 -16
  433. package/packages/text-ellipsis/src/text-ellipsis.ts +312 -282
  434. package/packages/textarea/index.ts +16 -16
  435. package/packages/textarea/src/textarea.ts +526 -495
  436. package/packages/timeline/index.ts +16 -16
  437. package/packages/timeline/src/timeline-item.ts +65 -67
  438. package/packages/timeline/src/timeline.ts +70 -71
  439. package/packages/timeline-item/index.ts +16 -16
  440. package/packages/tip/index.ts +19 -19
  441. package/packages/tip/src/tip.ts +150 -129
  442. package/packages/tooltip/index.ts +72 -72
  443. package/packages/tooltip/src/tooltip.ts +669 -627
  444. package/packages/tour/index.ts +16 -16
  445. package/packages/tour/src/tour.ts +70 -71
  446. package/packages/transfer/index.ts +16 -16
  447. package/packages/transfer/src/transfer.ts +130 -117
  448. package/packages/tree/index.ts +16 -16
  449. package/packages/tree/src/store.ts +10 -10
  450. package/packages/tree/src/tree.ts +4077 -3852
  451. package/packages/tree/src/util.ts +51 -51
  452. package/packages/tree-select/index.ts +16 -16
  453. package/packages/tree-select/src/tree-select.ts +1217 -1094
  454. package/packages/ui/index.ts +836 -793
  455. package/packages/ui/src/anime.ts +51 -52
  456. package/packages/ui/src/comp.ts +3 -3
  457. package/packages/ui/src/dom.ts +357 -354
  458. package/packages/ui/src/log.ts +19 -19
  459. package/packages/ui/src/utils.ts +79 -79
  460. package/packages/ui/src/vn.ts +39 -39
  461. package/packages/upload/index.ts +20 -20
  462. package/packages/upload/src/upload.ts +2271 -2021
  463. package/packages/upload/src/util.ts +109 -109
  464. package/packages/watermark/index.ts +33 -33
  465. package/packages/watermark/src/util.ts +186 -180
  466. package/packages/watermark/src/watermark.ts +196 -168
  467. package/types/all.d.ts +552 -552
  468. package/types/components/alert.d.ts +83 -87
  469. package/types/components/anchor-link.d.ts +88 -91
  470. package/types/components/anchor.d.ts +97 -104
  471. package/types/components/avatar.d.ts +85 -88
  472. package/types/components/backtop.d.ts +119 -122
  473. package/types/components/badge.d.ts +77 -80
  474. package/types/components/breadcrumb-item.d.ts +77 -80
  475. package/types/components/breadcrumb.d.ts +83 -87
  476. package/types/components/button-group.d.ts +118 -120
  477. package/types/components/button.d.ts +331 -339
  478. package/types/components/calendar.d.ts +247 -264
  479. package/types/components/card.d.ts +111 -113
  480. package/types/components/carousel-item.d.ts +73 -75
  481. package/types/components/carousel.d.ts +130 -134
  482. package/types/components/cascader.d.ts +336 -386
  483. package/types/components/checkbox-button.d.ts +109 -114
  484. package/types/components/checkbox-group.d.ts +152 -154
  485. package/types/components/checkbox.d.ts +123 -128
  486. package/types/components/col.d.ts +77 -80
  487. package/types/components/colgroup.d.ts +64 -69
  488. package/types/components/collapse-pane.d.ts +86 -89
  489. package/types/components/collapse.d.ts +123 -133
  490. package/types/components/color-picker.d.ts +275 -280
  491. package/types/components/column.d.ts +834 -851
  492. package/types/components/context-menu.d.ts +282 -289
  493. package/types/components/countdown.d.ts +108 -112
  494. package/types/components/date-panel.d.ts +319 -331
  495. package/types/components/date-picker.d.ts +361 -384
  496. package/types/components/date-range-picker.d.ts +351 -371
  497. package/types/components/divider.d.ts +72 -75
  498. package/types/components/drawer.d.ts +333 -344
  499. package/types/components/empty.d.ts +75 -78
  500. package/types/components/flow-design.d.ts +73 -85
  501. package/types/components/flow-view.d.ts +73 -85
  502. package/types/components/form-design.d.ts +370 -376
  503. package/types/components/form-gather.d.ts +120 -124
  504. package/types/components/form-group.d.ts +73 -77
  505. package/types/components/form-item.d.ts +395 -413
  506. package/types/components/form-view.d.ts +179 -183
  507. package/types/components/form.d.ts +499 -495
  508. package/types/components/gantt-module/gantt-view.d.ts +195 -200
  509. package/types/components/gantt-module/index.d.ts +1 -1
  510. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +137 -131
  511. package/types/components/gantt-plugins/index.d.ts +1 -1
  512. package/types/components/gantt.d.ts +1248 -1399
  513. package/types/components/grid.d.ts +1289 -1317
  514. package/types/components/icon-picker.d.ts +242 -253
  515. package/types/components/icon.d.ts +332 -87
  516. package/types/components/image-group.d.ts +124 -127
  517. package/types/components/image-preview.d.ts +167 -167
  518. package/types/components/image.d.ts +166 -173
  519. package/types/components/input.d.ts +429 -453
  520. package/types/components/layout-aside.d.ts +123 -123
  521. package/types/components/layout-body.d.ts +110 -113
  522. package/types/components/layout-container.d.ts +73 -75
  523. package/types/components/layout-footer.d.ts +71 -73
  524. package/types/components/layout-header.d.ts +67 -69
  525. package/types/components/link.d.ts +107 -111
  526. package/types/components/list-design.d.ts +189 -190
  527. package/types/components/list-view.d.ts +193 -199
  528. package/types/components/list.d.ts +678 -715
  529. package/types/components/loading.d.ts +98 -103
  530. package/types/components/mention.d.ts +70 -77
  531. package/types/components/menu.d.ts +284 -295
  532. package/types/components/modal.d.ts +567 -584
  533. package/types/components/notice-bar.d.ts +102 -106
  534. package/types/components/number-input.d.ts +359 -365
  535. package/types/components/optgroup.d.ts +85 -88
  536. package/types/components/option.d.ts +94 -103
  537. package/types/components/pager.d.ts +330 -335
  538. package/types/components/password-input.d.ts +143 -156
  539. package/types/components/print-page-break.d.ts +65 -69
  540. package/types/components/print.d.ts +243 -245
  541. package/types/components/pulldown.d.ts +231 -239
  542. package/types/components/radio-button.d.ts +113 -118
  543. package/types/components/radio-group.d.ts +151 -153
  544. package/types/components/radio.d.ts +129 -134
  545. package/types/components/rate.d.ts +83 -88
  546. package/types/components/result.d.ts +81 -84
  547. package/types/components/row.d.ts +77 -81
  548. package/types/components/scrollbar.d.ts +299 -305
  549. package/types/components/segmented.d.ts +119 -123
  550. package/types/components/select.d.ts +598 -616
  551. package/types/components/slider.d.ts +137 -151
  552. package/types/components/space.d.ts +120 -127
  553. package/types/components/split-pane.d.ts +126 -133
  554. package/types/components/split.d.ts +301 -312
  555. package/types/components/splitter-panel.d.ts +123 -130
  556. package/types/components/splitter.d.ts +290 -301
  557. package/types/components/steps.d.ts +63 -68
  558. package/types/components/switch.d.ts +127 -133
  559. package/types/components/tab-pane.d.ts +111 -114
  560. package/types/components/table-module/custom.d.ts +123 -123
  561. package/types/components/table-module/edit.d.ts +297 -276
  562. package/types/components/table-module/export.d.ts +88 -96
  563. package/types/components/table-module/filter.d.ts +144 -144
  564. package/types/components/table-module/index.d.ts +7 -7
  565. package/types/components/table-module/keyboard.d.ts +26 -26
  566. package/types/components/table-module/menu.d.ts +46 -46
  567. package/types/components/table-module/validator.d.ts +53 -53
  568. package/types/components/table-plugins/extend-cell-area.d.ts +781 -781
  569. package/types/components/table-plugins/extend-pivot-table.d.ts +59 -58
  570. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  571. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  572. package/types/components/table-plugins/index.d.ts +4 -4
  573. package/types/components/table-select.d.ts +268 -276
  574. package/types/components/table-transfer.d.ts +80 -84
  575. package/types/components/table.d.ts +7530 -8000
  576. package/types/components/tabs.d.ts +314 -352
  577. package/types/components/tag.d.ts +108 -114
  578. package/types/components/text-ellipsis.d.ts +107 -112
  579. package/types/components/text.d.ts +112 -122
  580. package/types/components/textarea.d.ts +261 -275
  581. package/types/components/timeline-item.d.ts +66 -75
  582. package/types/components/timeline.d.ts +70 -77
  583. package/types/components/tip.d.ts +81 -83
  584. package/types/components/toolbar.d.ts +327 -336
  585. package/types/components/tooltip.d.ts +250 -255
  586. package/types/components/tour.d.ts +70 -77
  587. package/types/components/transfer.d.ts +80 -84
  588. package/types/components/tree-select.d.ts +361 -376
  589. package/types/components/tree.d.ts +994 -1036
  590. package/types/components/upload.d.ts +477 -518
  591. package/types/components/watermark.d.ts +116 -120
  592. package/types/handles/form-design.d.ts +50 -50
  593. package/types/handles/index.d.ts +3 -3
  594. package/types/handles/list-design.d.ts +1 -2
  595. package/types/handles/table.d.ts +15 -15
  596. package/types/index.d.ts +8 -8
  597. package/types/ui/commands.d.ts +57 -57
  598. package/types/ui/formats.d.ts +62 -62
  599. package/types/ui/global-config.d.ts +269 -269
  600. package/types/ui/global-icon.d.ts +315 -315
  601. package/types/ui/hooks.d.ts +13 -13
  602. package/types/ui/index.d.ts +100 -100
  603. package/types/ui/interceptor.d.ts +52 -52
  604. package/types/ui/menus.d.ts +89 -89
  605. package/types/ui/renderer.d.ts +1033 -1047
  606. package/types/ui/validators.d.ts +37 -38
  607. /package/dist/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  608. /package/dist/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  609. /package/dist/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  610. /package/es/icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  611. /package/es/icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  612. /package/es/icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  613. /package/es/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  614. /package/es/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  615. /package/es/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  616. /package/es/vxe-icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  617. /package/es/vxe-icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  618. /package/es/vxe-icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  619. /package/lib/icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  620. /package/lib/icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  621. /package/lib/icon/style/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  622. /package/lib/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  623. /package/lib/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  624. /package/lib/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  625. /package/lib/vxe-icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  626. /package/lib/vxe-icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  627. /package/lib/vxe-icon/style/{iconfont.1792979107495.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
+ })