vxe-pc-ui 3.3.43 → 3.3.45

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