vxe-pc-ui 4.14.4 → 4.14.6

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