vxe-pc-ui 4.14.6 → 4.14.7

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