vxe-pc-ui 4.15.13 → 4.15.14

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 (218) hide show
  1. package/dist/all.esm.js +708 -139
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/button/style.css +11 -0
  5. package/es/button/style.min.css +1 -1
  6. package/es/checkbox/src/button.js +3 -1
  7. package/es/checkbox/src/group.js +6 -1
  8. package/es/checkbox-button/style.css +151 -8
  9. package/es/checkbox-button/style.min.css +1 -1
  10. package/es/icon/style.css +1 -1
  11. package/es/icon-picker/src/icon-picker.js +145 -46
  12. package/es/icon-picker/style.css +29 -5
  13. package/es/icon-picker/style.min.css +1 -1
  14. package/es/language/ar-EG.js +3 -0
  15. package/es/language/de-DE.js +3 -0
  16. package/es/language/en-US.js +3 -0
  17. package/es/language/es-ES.js +3 -0
  18. package/es/language/fr-FR.js +3 -0
  19. package/es/language/hu-HU.js +3 -0
  20. package/es/language/hy-AM.js +3 -0
  21. package/es/language/id-ID.js +3 -0
  22. package/es/language/it-IT.js +3 -0
  23. package/es/language/ja-JP.js +3 -0
  24. package/es/language/ko-KR.js +3 -0
  25. package/es/language/ms-MY.js +3 -0
  26. package/es/language/nb-NO.js +3 -0
  27. package/es/language/pt-BR.js +3 -0
  28. package/es/language/ru-RU.js +3 -0
  29. package/es/language/th-TH.js +3 -0
  30. package/es/language/ug-CN.js +3 -0
  31. package/es/language/uk-UA.js +3 -0
  32. package/es/language/uz-UZ.js +3 -0
  33. package/es/language/vi-VN.js +3 -0
  34. package/es/language/zh-CHT.js +3 -0
  35. package/es/language/zh-CN.js +3 -0
  36. package/es/list/src/list.js +14 -1
  37. package/es/radio/src/button.js +3 -1
  38. package/es/radio/src/group.js +6 -1
  39. package/es/radio-button/style.css +151 -8
  40. package/es/radio-button/style.min.css +1 -1
  41. package/es/style.css +1 -1
  42. package/es/style.min.css +1 -1
  43. package/es/tree/src/tree.js +441 -18
  44. package/es/tree/src/util.js +15 -0
  45. package/es/ui/index.js +5 -2
  46. package/es/ui/src/log.js +1 -1
  47. package/es/vxe-button/style.css +11 -0
  48. package/es/vxe-button/style.min.css +1 -1
  49. package/es/vxe-checkbox-button/style.css +151 -8
  50. package/es/vxe-checkbox-button/style.min.css +1 -1
  51. package/es/vxe-icon-picker/style.css +29 -5
  52. package/es/vxe-icon-picker/style.min.css +1 -1
  53. package/es/vxe-radio-button/style.css +151 -8
  54. package/es/vxe-radio-button/style.min.css +1 -1
  55. package/lib/button/style/style.css +11 -0
  56. package/lib/button/style/style.min.css +1 -1
  57. package/lib/checkbox/src/button.js +3 -1
  58. package/lib/checkbox/src/button.min.js +1 -1
  59. package/lib/checkbox/src/group.js +6 -0
  60. package/lib/checkbox/src/group.min.js +1 -1
  61. package/lib/checkbox-button/style/style.css +151 -8
  62. package/lib/checkbox-button/style/style.min.css +1 -1
  63. package/lib/icon/style/style.css +1 -1
  64. package/lib/icon/style/style.min.css +1 -1
  65. package/lib/icon-picker/src/icon-picker.js +143 -29
  66. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  67. package/lib/icon-picker/style/style.css +29 -5
  68. package/lib/icon-picker/style/style.min.css +1 -1
  69. package/lib/index.umd.js +731 -49
  70. package/lib/index.umd.min.js +1 -1
  71. package/lib/language/ar-EG.js +3 -0
  72. package/lib/language/ar-EG.min.js +1 -1
  73. package/lib/language/ar-EG.umd.js +3 -0
  74. package/lib/language/de-DE.js +3 -0
  75. package/lib/language/de-DE.min.js +1 -1
  76. package/lib/language/de-DE.umd.js +3 -0
  77. package/lib/language/en-US.js +3 -0
  78. package/lib/language/en-US.min.js +1 -1
  79. package/lib/language/en-US.umd.js +3 -0
  80. package/lib/language/es-ES.js +3 -0
  81. package/lib/language/es-ES.min.js +1 -1
  82. package/lib/language/es-ES.umd.js +3 -0
  83. package/lib/language/fr-FR.js +3 -0
  84. package/lib/language/fr-FR.min.js +1 -1
  85. package/lib/language/fr-FR.umd.js +3 -0
  86. package/lib/language/hu-HU.js +3 -0
  87. package/lib/language/hu-HU.min.js +1 -1
  88. package/lib/language/hu-HU.umd.js +3 -0
  89. package/lib/language/hy-AM.js +3 -0
  90. package/lib/language/hy-AM.min.js +1 -1
  91. package/lib/language/hy-AM.umd.js +3 -0
  92. package/lib/language/id-ID.js +3 -0
  93. package/lib/language/id-ID.min.js +1 -1
  94. package/lib/language/id-ID.umd.js +3 -0
  95. package/lib/language/it-IT.js +3 -0
  96. package/lib/language/it-IT.min.js +1 -1
  97. package/lib/language/it-IT.umd.js +3 -0
  98. package/lib/language/ja-JP.js +3 -0
  99. package/lib/language/ja-JP.min.js +1 -1
  100. package/lib/language/ja-JP.umd.js +3 -0
  101. package/lib/language/ko-KR.js +3 -0
  102. package/lib/language/ko-KR.min.js +1 -1
  103. package/lib/language/ko-KR.umd.js +3 -0
  104. package/lib/language/ms-MY.js +3 -0
  105. package/lib/language/ms-MY.min.js +1 -1
  106. package/lib/language/ms-MY.umd.js +3 -0
  107. package/lib/language/nb-NO.js +3 -0
  108. package/lib/language/nb-NO.min.js +1 -1
  109. package/lib/language/nb-NO.umd.js +3 -0
  110. package/lib/language/pt-BR.js +3 -0
  111. package/lib/language/pt-BR.min.js +1 -1
  112. package/lib/language/pt-BR.umd.js +3 -0
  113. package/lib/language/ru-RU.js +3 -0
  114. package/lib/language/ru-RU.min.js +1 -1
  115. package/lib/language/ru-RU.umd.js +3 -0
  116. package/lib/language/th-TH.js +3 -0
  117. package/lib/language/th-TH.min.js +1 -1
  118. package/lib/language/th-TH.umd.js +3 -0
  119. package/lib/language/ug-CN.js +3 -0
  120. package/lib/language/ug-CN.min.js +1 -1
  121. package/lib/language/ug-CN.umd.js +3 -0
  122. package/lib/language/uk-UA.js +3 -0
  123. package/lib/language/uk-UA.min.js +1 -1
  124. package/lib/language/uk-UA.umd.js +3 -0
  125. package/lib/language/uz-UZ.js +3 -0
  126. package/lib/language/uz-UZ.min.js +1 -1
  127. package/lib/language/uz-UZ.umd.js +3 -0
  128. package/lib/language/vi-VN.js +3 -0
  129. package/lib/language/vi-VN.min.js +1 -1
  130. package/lib/language/vi-VN.umd.js +3 -0
  131. package/lib/language/zh-CHT.js +3 -0
  132. package/lib/language/zh-CHT.min.js +1 -1
  133. package/lib/language/zh-CHT.umd.js +3 -0
  134. package/lib/language/zh-CN.js +3 -0
  135. package/lib/language/zh-CN.min.js +1 -1
  136. package/lib/language/zh-CN.umd.js +3 -0
  137. package/lib/list/src/list.js +19 -1
  138. package/lib/list/src/list.min.js +1 -1
  139. package/lib/radio/src/button.js +3 -1
  140. package/lib/radio/src/button.min.js +1 -1
  141. package/lib/radio/src/group.js +7 -1
  142. package/lib/radio/src/group.min.js +1 -1
  143. package/lib/radio-button/style/style.css +151 -8
  144. package/lib/radio-button/style/style.min.css +1 -1
  145. package/lib/style.css +1 -1
  146. package/lib/style.min.css +1 -1
  147. package/lib/tree/src/tree.js +525 -14
  148. package/lib/tree/src/tree.min.js +1 -1
  149. package/lib/tree/src/util.js +16 -0
  150. package/lib/tree/src/util.min.js +1 -1
  151. package/lib/ui/index.js +5 -2
  152. package/lib/ui/index.min.js +1 -1
  153. package/lib/ui/src/log.js +1 -1
  154. package/lib/ui/src/log.min.js +1 -1
  155. package/lib/vxe-button/style/style.css +11 -0
  156. package/lib/vxe-button/style/style.min.css +1 -1
  157. package/lib/vxe-checkbox-button/style/style.css +151 -8
  158. package/lib/vxe-checkbox-button/style/style.min.css +1 -1
  159. package/lib/vxe-icon-picker/style/style.css +29 -5
  160. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  161. package/lib/vxe-radio-button/style/style.css +151 -8
  162. package/lib/vxe-radio-button/style/style.min.css +1 -1
  163. package/package.json +1 -1
  164. package/packages/checkbox/src/button.ts +3 -1
  165. package/packages/checkbox/src/group.ts +6 -1
  166. package/packages/icon-picker/src/icon-picker.ts +157 -48
  167. package/packages/language/ar-EG.ts +3 -0
  168. package/packages/language/de-DE.ts +3 -0
  169. package/packages/language/en-US.ts +3 -0
  170. package/packages/language/es-ES.ts +3 -0
  171. package/packages/language/fr-FR.ts +3 -0
  172. package/packages/language/hu-HU.ts +3 -0
  173. package/packages/language/hy-AM.ts +3 -0
  174. package/packages/language/id-ID.ts +3 -0
  175. package/packages/language/it-IT.ts +3 -0
  176. package/packages/language/ja-JP.ts +3 -0
  177. package/packages/language/ko-KR.ts +3 -0
  178. package/packages/language/ms-MY.ts +3 -0
  179. package/packages/language/nb-NO.ts +3 -0
  180. package/packages/language/pt-BR.ts +3 -0
  181. package/packages/language/ru-RU.ts +3 -0
  182. package/packages/language/th-TH.ts +3 -0
  183. package/packages/language/ug-CN.ts +3 -0
  184. package/packages/language/uk-UA.ts +3 -0
  185. package/packages/language/uz-UZ.ts +3 -0
  186. package/packages/language/vi-VN.ts +3 -0
  187. package/packages/language/zh-CHT.ts +3 -0
  188. package/packages/language/zh-CN.ts +3 -0
  189. package/packages/list/src/list.ts +14 -1
  190. package/packages/radio/src/button.ts +3 -1
  191. package/packages/radio/src/group.ts +6 -1
  192. package/packages/tree/src/tree.ts +443 -14
  193. package/packages/tree/src/util.ts +17 -1
  194. package/packages/ui/index.ts +4 -1
  195. package/styles/components/button.scss +24 -69
  196. package/styles/components/checkbox-button.scss +65 -13
  197. package/styles/components/icon-picker.scss +37 -11
  198. package/styles/components/radio-button.scss +65 -13
  199. package/styles/helpers/themeStatus.scss +58 -0
  200. package/types/all.d.ts +205 -0
  201. package/types/components/checkbox-group.d.ts +3 -1
  202. package/types/components/checkbox.d.ts +1 -1
  203. package/types/components/icon-picker.d.ts +27 -4
  204. package/types/components/list.d.ts +2 -2
  205. package/types/components/radio-group.d.ts +3 -1
  206. package/types/components/tree.d.ts +36 -0
  207. /package/es/icon/{iconfont.1782658269305.ttf → iconfont.1782742200841.ttf} +0 -0
  208. /package/es/icon/{iconfont.1782658269305.woff → iconfont.1782742200841.woff} +0 -0
  209. /package/es/icon/{iconfont.1782658269305.woff2 → iconfont.1782742200841.woff2} +0 -0
  210. /package/es/{iconfont.1782658269305.ttf → iconfont.1782742200841.ttf} +0 -0
  211. /package/es/{iconfont.1782658269305.woff → iconfont.1782742200841.woff} +0 -0
  212. /package/es/{iconfont.1782658269305.woff2 → iconfont.1782742200841.woff2} +0 -0
  213. /package/lib/icon/style/{iconfont.1782658269305.ttf → iconfont.1782742200841.ttf} +0 -0
  214. /package/lib/icon/style/{iconfont.1782658269305.woff → iconfont.1782742200841.woff} +0 -0
  215. /package/lib/icon/style/{iconfont.1782658269305.woff2 → iconfont.1782742200841.woff2} +0 -0
  216. /package/lib/{iconfont.1782658269305.ttf → iconfont.1782742200841.ttf} +0 -0
  217. /package/lib/{iconfont.1782658269305.woff → iconfont.1782742200841.woff} +0 -0
  218. /package/lib/{iconfont.1782658269305.woff2 → iconfont.1782742200841.woff2} +0 -0
@@ -1,10 +1,31 @@
1
- import { h, Teleport, ref, inject, watch, computed, provide, onUnmounted, reactive, nextTick, onMounted } from 'vue';
1
+ import { h, Teleport, ref, inject, watch, computed, provide, onBeforeUnmount, reactive, nextTick, onMounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
4
  import { getConfig, getIcon, getI18n, globalEvents, createEvent, renderer, useSize, GLOBAL_EVENT_KEYS, renderEmptyElement } from '../../ui';
5
- import { getEventTargetNode, updatePanelPlacement } from '../../ui/src/dom';
5
+ import { getEventTargetNode, toCssUnit, updatePanelPlacement } from '../../ui/src/dom';
6
6
  import { getLastZIndex, nextZIndex, getFuncText } from '../../ui/src/utils';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
+ import VxeInputComponent from '../../input/src/input';
9
+ function createReactData() {
10
+ return {
11
+ initialized: false,
12
+ selectIcon: '',
13
+ panelIndex: 0,
14
+ panelStyle: {},
15
+ panelPlacement: null,
16
+ visiblePanel: false,
17
+ isAniVisible: false,
18
+ isActivated: false,
19
+ searchValue: '',
20
+ iconGroups: []
21
+ };
22
+ }
23
+ function createInternalData() {
24
+ return {
25
+ fullList: []
26
+ // hpTimeout: undefined
27
+ };
28
+ }
8
29
  export default defineVxeComponent({
9
30
  name: 'VxeIconPicker',
10
31
  props: {
@@ -33,6 +54,11 @@ export default defineVxeComponent({
33
54
  type: Boolean,
34
55
  default: null
35
56
  },
57
+ filterable: {
58
+ type: Boolean,
59
+ default: () => getConfig().iconPicker.filterable
60
+ },
61
+ filterConfig: Object,
36
62
  icons: Array,
37
63
  placement: String,
38
64
  popupConfig: Object,
@@ -56,22 +82,12 @@ export default defineVxeComponent({
56
82
  const formItemInfo = inject('xeFormItemInfo', null);
57
83
  const xID = XEUtils.uniqueId();
58
84
  const { computeSize } = useSize(props);
59
- const reactData = reactive({
60
- initialized: false,
61
- selectIcon: `${props.modelValue || ''}`,
62
- panelIndex: 0,
63
- panelStyle: {},
64
- panelPlacement: null,
65
- visiblePanel: false,
66
- isAniVisible: false,
67
- isActivated: false
68
- });
69
- const internalData = {
70
- // hpTimeout: undefined
71
- };
85
+ const reactData = reactive(createReactData());
86
+ const internalData = createInternalData();
72
87
  const refElem = ref();
73
88
  const refInput = ref();
74
89
  const refOptionPanel = ref();
90
+ const refInpSearch = ref();
75
91
  const refMaps = {
76
92
  refElem
77
93
  };
@@ -131,6 +147,20 @@ export default defineVxeComponent({
131
147
  }
132
148
  return getI18n('vxe.base.pleaseSelect');
133
149
  });
150
+ const computePanelStyle = computed(() => {
151
+ const popupOpts = computePopupOpts.value;
152
+ const { chunkSize, height, maxHeight } = popupOpts;
153
+ const stys = {
154
+ '--vxe-ui-icon-picker-item-width': `${100 / (chunkSize || 4)}%`
155
+ };
156
+ if (height) {
157
+ stys['--vxe-ui-icon-picker-panel-height'] = toCssUnit(height);
158
+ }
159
+ else if (maxHeight) {
160
+ stys['--vxe-ui-icon-picker-panel-max-height'] = toCssUnit(maxHeight);
161
+ }
162
+ return stys;
163
+ });
134
164
  const computeIconList = computed(() => {
135
165
  let { icons } = props;
136
166
  if (!icons || !icons.length) {
@@ -150,13 +180,12 @@ export default defineVxeComponent({
150
180
  };
151
181
  });
152
182
  });
183
+ const computeFilterOpts = computed(() => {
184
+ return Object.assign({}, getConfig().iconPicker.filterConfig, props.filterConfig);
185
+ });
153
186
  const computePopupOpts = computed(() => {
154
187
  return Object.assign({}, getConfig().iconPicker.popupConfig, props.popupConfig);
155
188
  });
156
- const computeIconGroupList = computed(() => {
157
- const iconList = computeIconList.value;
158
- return XEUtils.chunk(iconList, 4);
159
- });
160
189
  const computeSelectIconItem = computed(() => {
161
190
  const { selectIcon } = reactData;
162
191
  const iconList = computeIconList.value;
@@ -174,6 +203,7 @@ export default defineVxeComponent({
174
203
  const panelElem = refOptionPanel.value;
175
204
  const btnTransfer = computeBtnTransfer.value;
176
205
  const popupOpts = computePopupOpts.value;
206
+ const { width } = popupOpts;
177
207
  const handleStyle = () => {
178
208
  const ppObj = updatePanelPlacement(targetElem, panelElem, {
179
209
  placement: popupOpts.placement || placement,
@@ -183,6 +213,12 @@ export default defineVxeComponent({
183
213
  const panelStyle = Object.assign(ppObj.style, {
184
214
  zIndex: panelIndex
185
215
  });
216
+ if (width) {
217
+ Object.assign(panelStyle, {
218
+ width: toCssUnit(width),
219
+ minWidth: undefined
220
+ });
221
+ }
186
222
  reactData.panelStyle = panelStyle;
187
223
  reactData.panelPlacement = ppObj.placement;
188
224
  };
@@ -216,6 +252,26 @@ export default defineVxeComponent({
216
252
  reactData.isAniVisible = false;
217
253
  }, 350);
218
254
  };
255
+ const handleData = () => {
256
+ const { modelValue } = props;
257
+ const { searchValue } = reactData;
258
+ const filterOpts = computeFilterOpts.value;
259
+ const { filterMethod } = filterOpts;
260
+ const popupOpts = computePopupOpts.value;
261
+ const { chunkSize } = popupOpts;
262
+ const iconList = computeIconList.value;
263
+ let visibleList = iconList;
264
+ if (searchValue) {
265
+ const searchTxt = `${searchValue}`.toLowerCase();
266
+ visibleList = iconList.filter(item => {
267
+ if (filterMethod) {
268
+ return filterMethod({ option: item, value: modelValue, searchValue: searchTxt, $iconPicker: $xeIconPicker });
269
+ }
270
+ return (item.title && `${item.title}`.toLowerCase().indexOf(searchTxt) > -1) || (item.icon && `${item.icon}`.indexOf(searchTxt) > -1);
271
+ });
272
+ }
273
+ reactData.iconGroups = XEUtils.chunk(visibleList, chunkSize || 4);
274
+ };
219
275
  const changeEvent = (evnt, selectValue) => {
220
276
  reactData.selectIcon = selectValue;
221
277
  if (selectValue !== props.modelValue) {
@@ -400,45 +456,58 @@ export default defineVxeComponent({
400
456
  changeEvent(evnt, value);
401
457
  hideOptionPanel();
402
458
  };
459
+ const modelSearchEvent = (value) => {
460
+ reactData.searchValue = value;
461
+ };
462
+ const focusSearchEvent = () => {
463
+ reactData.isActivated = true;
464
+ };
465
+ const handleSearchEvent = () => {
466
+ handleData();
467
+ };
468
+ const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true });
403
469
  Object.assign($xeIconPicker, iconPickerMethods);
404
470
  const renderIconWrapper = () => {
405
471
  const { showIconTitle } = props;
406
- const { selectIcon } = reactData;
407
- const iconGroupList = computeIconGroupList.value;
408
- const isDisabled = computeIsDisabled.value;
472
+ const { selectIcon, iconGroups } = reactData;
409
473
  return h('div', {
410
474
  class: 'vxe-ico-picker--list-wrapper'
411
- }, iconGroupList.map(list => {
475
+ }, iconGroups.map(list => {
412
476
  return h('div', {
413
477
  class: 'vxe-ico-picker--list'
414
478
  }, list.map(item => {
415
479
  const { iconRender } = item;
416
480
  const compConf = iconRender ? renderer.get(iconRender.name) : null;
417
- const oIconMethod = compConf ? compConf.renderIconPickerOptionIcon : null;
481
+ const iconMethod = compConf ? compConf.renderIconPickerOptionIcon : null;
418
482
  return h('div', {
419
483
  class: ['vxe-ico-picker--item', {
420
484
  'is--selected': selectIcon === item.icon
421
- }],
422
- onClick(evnt) {
423
- if (!isDisabled) {
424
- handleClickIconEvent(evnt, item);
425
- }
426
- }
485
+ }]
427
486
  }, [
428
487
  h('div', {
429
- class: 'vxe-ico-picker--item-icon'
430
- }, oIconMethod && iconRender
431
- ? getSlotVNs(oIconMethod(iconRender, { $iconPicker: $xeIconPicker, option: item }))
432
- : [
433
- h('i', {
434
- class: item.icon || ''
435
- })
436
- ]),
437
- showIconTitle
438
- ? h('div', {
439
- class: 'vxe-ico-picker--item-title'
440
- }, `${item.title || ''}`)
441
- : renderEmptyElement($xeIconPicker)
488
+ class: 'vxe-ico-picker--item-inner',
489
+ onClick(evnt) {
490
+ const isDisabled = computeIsDisabled.value;
491
+ if (!isDisabled) {
492
+ handleClickIconEvent(evnt, item);
493
+ }
494
+ }
495
+ }, [
496
+ h('div', {
497
+ class: 'vxe-ico-picker--item-icon'
498
+ }, iconMethod && iconRender
499
+ ? getSlotVNs(iconMethod(iconRender, { $iconPicker: $xeIconPicker, option: item }))
500
+ : [
501
+ h('i', {
502
+ class: item.icon || ''
503
+ })
504
+ ]),
505
+ showIconTitle
506
+ ? h('div', {
507
+ class: 'vxe-ico-picker--item-title'
508
+ }, `${item.title || ''}`)
509
+ : renderEmptyElement($xeIconPicker)
510
+ ])
442
511
  ]);
443
512
  }));
444
513
  }));
@@ -467,13 +536,14 @@ export default defineVxeComponent({
467
536
  ]);
468
537
  };
469
538
  const renderVN = () => {
470
- const { className, clearable } = props;
539
+ const { className, clearable, filterable } = props;
471
540
  const { initialized, isActivated, isAniVisible, visiblePanel, selectIcon } = reactData;
472
541
  const vSize = computeSize.value;
473
542
  const isDisabled = computeIsDisabled.value;
474
543
  const btnTransfer = computeBtnTransfer.value;
475
544
  const formReadonly = computeFormReadonly.value;
476
545
  const inpPlaceholder = computeInpPlaceholder.value;
546
+ const panelStyle = computePanelStyle.value;
477
547
  const popupOpts = computePopupOpts.value;
478
548
  const ppClassName = popupOpts.className || props.popupClassName;
479
549
  if (formReadonly) {
@@ -548,8 +618,30 @@ export default defineVxeComponent({
548
618
  }, [
549
619
  initialized && (visiblePanel || isAniVisible)
550
620
  ? h('div', {
551
- class: 'vxe-ico-picker--panel-wrapper'
621
+ class: 'vxe-ico-picker--panel-wrapper',
622
+ style: panelStyle
552
623
  }, [
624
+ filterable
625
+ ? h('div', {
626
+ class: 'vxe-ico-picker--panel-search'
627
+ }, [
628
+ h(VxeInputComponent, {
629
+ ref: refInpSearch,
630
+ class: 'vxe-ico-picker-search--input',
631
+ modelValue: reactData.searchValue,
632
+ type: 'text',
633
+ clearable: true,
634
+ disabled: false,
635
+ readonly: false,
636
+ placeholder: getI18n('vxe.iconPicker.search'),
637
+ prefixIcon: getIcon().INPUT_SEARCH,
638
+ 'onUpdate:modelValue': modelSearchEvent,
639
+ onFocus: focusSearchEvent,
640
+ onChange: triggerSearchEvent,
641
+ onSearch: triggerSearchEvent
642
+ })
643
+ ])
644
+ : renderEmptyElement($xeIconPicker),
553
645
  renderIconWrapper()
554
646
  ])
555
647
  : renderEmptyElement($xeIconPicker)
@@ -557,20 +649,27 @@ export default defineVxeComponent({
557
649
  ])
558
650
  ]);
559
651
  };
652
+ reactData.selectIcon = `${props.modelValue || ''}`;
653
+ handleData();
560
654
  watch(() => props.modelValue, (val) => {
561
655
  reactData.selectIcon = `${val || ''}`;
562
656
  });
657
+ watch(computeIconList, () => {
658
+ handleData();
659
+ });
563
660
  onMounted(() => {
564
661
  globalEvents.on($xeIconPicker, 'mousewheel', handleGlobalMousewheelEvent);
565
662
  globalEvents.on($xeIconPicker, 'mousedown', handleGlobalMousedownEvent);
566
663
  globalEvents.on($xeIconPicker, 'keydown', handleGlobalKeydownEvent);
567
664
  globalEvents.on($xeIconPicker, 'blur', handleGlobalBlurEvent);
568
665
  });
569
- onUnmounted(() => {
666
+ onBeforeUnmount(() => {
570
667
  globalEvents.off($xeIconPicker, 'mousewheel');
571
668
  globalEvents.off($xeIconPicker, 'mousedown');
572
669
  globalEvents.off($xeIconPicker, 'keydown');
573
670
  globalEvents.off($xeIconPicker, 'blur');
671
+ XEUtils.assign(reactData, createReactData());
672
+ XEUtils.assign(internalData, createInternalData());
574
673
  });
575
674
  provide('$xeIconPicker', $xeIconPicker);
576
675
  $xeIconPicker.renderVN = renderVN;
@@ -7,6 +7,11 @@
7
7
  border-radius: var(--vxe-ui-base-border-radius);
8
8
  background-color: var(--vxe-ui-layout-background-color);
9
9
  }
10
+ .vxe-ico-picker.is--disabled {
11
+ background-color: var(--vxe-ui-input-disabled-background-color);
12
+ color: var(--vxe-ui-font-disabled-color);
13
+ cursor: no-drop;
14
+ }
10
15
  .vxe-ico-picker.show--clear:hover .vxe-ico-picker--clear-icon {
11
16
  display: block;
12
17
  }
@@ -64,6 +69,15 @@
64
69
  transition: transform 0.2s ease-in-out;
65
70
  }
66
71
 
72
+ .vxe-ico-picker--panel-search {
73
+ display: block;
74
+ flex-shrink: 0;
75
+ padding: var(--vxe-ui-layout-padding-default);
76
+ }
77
+ .vxe-ico-picker--panel-search .vxe-ico-picker-search--input {
78
+ width: 100%;
79
+ }
80
+
67
81
  .vxe-ico-picker--readonly {
68
82
  color: var(--vxe-ui-font-color);
69
83
  display: inline-flex;
@@ -83,10 +97,17 @@
83
97
  color: var(--vxe-ui-font-primary-color);
84
98
  }
85
99
 
100
+ .vxe-ico-picker--all-list {
101
+ display: flex;
102
+ flex-direction: row;
103
+ flex-wrap: wrap;
104
+ }
105
+
86
106
  .vxe-ico-picker--list-wrapper {
87
107
  overflow-x: hidden;
88
108
  overflow-y: auto;
89
- max-height: 22.3em;
109
+ height: var(--vxe-ui-icon-picker-panel-height);
110
+ max-height: var(--vxe-ui-icon-picker-panel-max-height, var(--vxe-ui-icon-picker-panel-height, 22.3em));
90
111
  padding: var(--vxe-ui-layout-padding-qtr);
91
112
  }
92
113
 
@@ -98,17 +119,20 @@
98
119
  .vxe-ico-picker--item {
99
120
  display: flex;
100
121
  flex-direction: column;
101
- width: 4.8em;
122
+ min-width: 4.8em;
123
+ width: var(--vxe-ui-icon-picker-item-width, 4.8em);
124
+ padding: var(--vxe-ui-layout-padding-half);
125
+ }
126
+ .vxe-ico-picker--item .vxe-ico-picker--item-inner {
102
127
  padding: 0.2em;
103
128
  border: 1px solid var(--vxe-ui-input-border-color);
104
129
  border-radius: var(--vxe-ui-base-border-radius);
105
- margin: var(--vxe-ui-layout-padding-half);
106
130
  cursor: pointer;
107
131
  }
108
- .vxe-ico-picker--item:hover {
132
+ .vxe-ico-picker--item .vxe-ico-picker--item-inner:hover {
109
133
  background-color: var(--vxe-ui-base-hover-background-color);
110
134
  }
111
- .vxe-ico-picker--item.is--selected {
135
+ .vxe-ico-picker--item.is--selected .vxe-ico-picker--item-inner {
112
136
  color: var(--vxe-ui-font-primary-color);
113
137
  border-color: var(--vxe-ui-font-primary-color);
114
138
  }
@@ -1 +1 @@
1
- .vxe-ico-picker{position:relative;display:inline-block;color:var(--vxe-ui-font-color);width:100px;border:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-layout-background-color)}.vxe-ico-picker.show--clear:hover .vxe-ico-picker--clear-icon{display:block}.vxe-ico-picker.is--active{border-color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--inner{display:flex;flex-direction:row;width:100%;padding:0 .5em}.vxe-ico-picker--input{position:absolute;z-index:-1;width:1px;height:1px;outline:0;border:0}.vxe-ico-picker--icon{flex-grow:1;display:inline-flex;flex-direction:row;align-items:center;justify-content:left;padding:0 .5em}.vxe-ico-picker--icon>svg{max-width:1em;max-height:1em;vertical-align:middle}.vxe-ico-picker--placeholder{flex-grow:1;color:var(--vxe-ui-input-placeholder-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-ico-picker--suffix{display:flex;flex-direction:row;flex-shrink:0;color:var(--vxe-ui-input-placeholder-color);cursor:pointer}.vxe-ico-picker--suffix .vxe-ico-picker--suffix-icon>i{display:inline-block;transition:transform .2s ease-in-out}.vxe-ico-picker--readonly{color:var(--vxe-ui-font-color);display:inline-flex}.vxe-ico-picker--clear-icon{display:none;padding-right:.5em;height:100%;color:var(--vxe-ui-input-placeholder-color);cursor:pointer}.vxe-ico-picker--clear-icon:hover{color:var(--vxe-ui-font-color)}.vxe-ico-picker--clear-icon:active{color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--list-wrapper{overflow-x:hidden;overflow-y:auto;max-height:22.3em;padding:var(--vxe-ui-layout-padding-qtr)}.vxe-ico-picker--list{display:flex;flex-direction:row}.vxe-ico-picker--item{display:flex;flex-direction:column;width:4.8em;padding:.2em;border:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius);margin:var(--vxe-ui-layout-padding-half);cursor:pointer}.vxe-ico-picker--item:hover{background-color:var(--vxe-ui-base-hover-background-color)}.vxe-ico-picker--item.is--selected{color:var(--vxe-ui-font-primary-color);border-color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--item-icon{flex-grow:1;display:flex;flex-direction:row;align-items:center;justify-content:center;height:1.5em;font-size:1.4em}.vxe-ico-picker--item-icon>svg{max-width:1em;max-height:1em;vertical-align:middle}.vxe-ico-picker--item-title{padding:0 .2em;line-height:1.3em;flex-shrink:0;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9em}.vxe-ico-picker--item-icon,.vxe-ico-picker--item-title{width:100%}.vxe-ico-picker--panel-wrapper{position:relative;border-radius:var(--vxe-ui-base-border-radius);border:1px solid var(--vxe-ui-base-popup-border-color);box-shadow:var(--vxe-ui-base-popup-box-shadow);background-color:var(--vxe-ui-layout-background-color)}.vxe-ico-picker--panel{display:none;position:absolute;left:0;padding:4px 0;color:var(--vxe-ui-font-color);text-align:left}.vxe-ico-picker--panel:not(.is--transfer){min-width:100%}.vxe-ico-picker--panel.is--transfer{position:fixed}.vxe-ico-picker--panel.ani--leave{display:block;opacity:0;transform:scaleY(.5);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top;backface-visibility:hidden}.vxe-ico-picker--panel.ani--leave[placement=top]{transform-origin:center bottom}.vxe-ico-picker--panel.ani--enter{opacity:1;transform:scaleY(1)}.vxe-ico-picker{height:var(--vxe-ui-input-height-default);line-height:var(--vxe-ui-input-height-default)}.vxe-ico-picker.size--medium{height:var(--vxe-ui-input-height-medium);line-height:var(--vxe-ui-input-height-medium)}.vxe-ico-picker.size--small{height:var(--vxe-ui-input-height-small);line-height:var(--vxe-ui-input-height-small)}.vxe-ico-picker.size--mini{height:var(--vxe-ui-input-height-mini);line-height:var(--vxe-ui-input-height-mini)}.vxe-ico-picker,.vxe-ico-picker--panel{font-size:var(--vxe-ui-font-size-default)}.vxe-ico-picker--panel.size--medium,.vxe-ico-picker.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-ico-picker--panel.size--small,.vxe-ico-picker.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-ico-picker--panel.size--mini,.vxe-ico-picker.size--mini{font-size:var(--vxe-ui-font-size-mini)}
1
+ .vxe-ico-picker{position:relative;display:inline-block;color:var(--vxe-ui-font-color);width:100px;border:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-layout-background-color)}.vxe-ico-picker.is--disabled{background-color:var(--vxe-ui-input-disabled-background-color);color:var(--vxe-ui-font-disabled-color);cursor:no-drop}.vxe-ico-picker.show--clear:hover .vxe-ico-picker--clear-icon{display:block}.vxe-ico-picker.is--active{border-color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--inner{display:flex;flex-direction:row;width:100%;padding:0 .5em}.vxe-ico-picker--input{position:absolute;z-index:-1;width:1px;height:1px;outline:0;border:0}.vxe-ico-picker--icon{flex-grow:1;display:inline-flex;flex-direction:row;align-items:center;justify-content:left;padding:0 .5em}.vxe-ico-picker--icon>svg{max-width:1em;max-height:1em;vertical-align:middle}.vxe-ico-picker--placeholder{flex-grow:1;color:var(--vxe-ui-input-placeholder-color);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-ico-picker--suffix{display:flex;flex-direction:row;flex-shrink:0;color:var(--vxe-ui-input-placeholder-color);cursor:pointer}.vxe-ico-picker--suffix .vxe-ico-picker--suffix-icon>i{display:inline-block;transition:transform .2s ease-in-out}.vxe-ico-picker--panel-search{display:block;flex-shrink:0;padding:var(--vxe-ui-layout-padding-default)}.vxe-ico-picker--panel-search .vxe-ico-picker-search--input{width:100%}.vxe-ico-picker--readonly{color:var(--vxe-ui-font-color);display:inline-flex}.vxe-ico-picker--clear-icon{display:none;padding-right:.5em;height:100%;color:var(--vxe-ui-input-placeholder-color);cursor:pointer}.vxe-ico-picker--clear-icon:hover{color:var(--vxe-ui-font-color)}.vxe-ico-picker--clear-icon:active{color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--all-list{display:flex;flex-direction:row;flex-wrap:wrap}.vxe-ico-picker--list-wrapper{overflow-x:hidden;overflow-y:auto;height:var(--vxe-ui-icon-picker-panel-height);max-height:var(--vxe-ui-icon-picker-panel-max-height,var(--vxe-ui-icon-picker-panel-height,22.3em));padding:var(--vxe-ui-layout-padding-qtr)}.vxe-ico-picker--list{display:flex;flex-direction:row}.vxe-ico-picker--item{display:flex;flex-direction:column;min-width:4.8em;width:var(--vxe-ui-icon-picker-item-width,4.8em);padding:var(--vxe-ui-layout-padding-half)}.vxe-ico-picker--item .vxe-ico-picker--item-inner{padding:.2em;border:1px solid var(--vxe-ui-input-border-color);border-radius:var(--vxe-ui-base-border-radius);cursor:pointer}.vxe-ico-picker--item .vxe-ico-picker--item-inner:hover{background-color:var(--vxe-ui-base-hover-background-color)}.vxe-ico-picker--item.is--selected .vxe-ico-picker--item-inner{color:var(--vxe-ui-font-primary-color);border-color:var(--vxe-ui-font-primary-color)}.vxe-ico-picker--item-icon{flex-grow:1;display:flex;flex-direction:row;align-items:center;justify-content:center;height:1.5em;font-size:1.4em}.vxe-ico-picker--item-icon>svg{max-width:1em;max-height:1em;vertical-align:middle}.vxe-ico-picker--item-title{padding:0 .2em;line-height:1.3em;flex-shrink:0;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.9em}.vxe-ico-picker--item-icon,.vxe-ico-picker--item-title{width:100%}.vxe-ico-picker--panel-wrapper{position:relative;border-radius:var(--vxe-ui-base-border-radius);border:1px solid var(--vxe-ui-base-popup-border-color);box-shadow:var(--vxe-ui-base-popup-box-shadow);background-color:var(--vxe-ui-layout-background-color)}.vxe-ico-picker--panel{display:none;position:absolute;left:0;padding:4px 0;color:var(--vxe-ui-font-color);text-align:left}.vxe-ico-picker--panel:not(.is--transfer){min-width:100%}.vxe-ico-picker--panel.is--transfer{position:fixed}.vxe-ico-picker--panel.ani--leave{display:block;opacity:0;transform:scaleY(.5);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transform-origin:center top;backface-visibility:hidden}.vxe-ico-picker--panel.ani--leave[placement=top]{transform-origin:center bottom}.vxe-ico-picker--panel.ani--enter{opacity:1;transform:scaleY(1)}.vxe-ico-picker{height:var(--vxe-ui-input-height-default);line-height:var(--vxe-ui-input-height-default)}.vxe-ico-picker.size--medium{height:var(--vxe-ui-input-height-medium);line-height:var(--vxe-ui-input-height-medium)}.vxe-ico-picker.size--small{height:var(--vxe-ui-input-height-small);line-height:var(--vxe-ui-input-height-small)}.vxe-ico-picker.size--mini{height:var(--vxe-ui-input-height-mini);line-height:var(--vxe-ui-input-height-mini)}.vxe-ico-picker,.vxe-ico-picker--panel{font-size:var(--vxe-ui-font-size-default)}.vxe-ico-picker--panel.size--medium,.vxe-ico-picker.size--medium{font-size:var(--vxe-ui-font-size-medium)}.vxe-ico-picker--panel.size--small,.vxe-ico-picker.size--small{font-size:var(--vxe-ui-font-size-small)}.vxe-ico-picker--panel.size--mini,.vxe-ico-picker.size--mini{font-size:var(--vxe-ui-font-size-mini)}
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'تجميد الحق',
288
288
  cancelFixed: 'إلغاء التجميد'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} سنوات'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Rechts einfrieren',
288
288
  cancelFixed: 'Säulen entfernen'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} Jahre'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Freeze right',
288
288
  cancelFixed: 'Unfreeze'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} years'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Congelarse a la derecha',
288
288
  cancelFixed: 'Columnas desenfrenado'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} años'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Geler à droite',
288
288
  cancelFixed: 'Dégeler'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} ans'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Jobbra fagy',
288
288
  cancelFixed: 'Kiolvaszt'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} Évek'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '冻结在右侧',
288
288
  cancelFixed: '取消冻结列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Bekukan benar',
288
288
  cancelFixed: 'Unfreeze'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} tahun'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Freeze Right',
288
288
  cancelFixed: 'Scongelare'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} anni'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '右にフリーズします',
288
288
  cancelFixed: '凍結柱'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0}年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '오른쪽에서 얼립니다',
288
288
  cancelFixed: '열매 열이 없습니다'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 년'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Membekukan di sebelah kanan',
288
288
  cancelFixed: 'Lajur yang tidak jelas'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} tahun'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Frys til høyre',
288
288
  cancelFixed: 'Frigjøre'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} år'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Congele à direita',
288
288
  cancelFixed: 'Descongelar'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} anos'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Заморозить справа',
288
288
  cancelFixed: 'Размороженные столбцы'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} Годы'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'แช่แข็งขวา',
288
288
  cancelFixed: 'สูดดม'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} ปี'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'ئوڭ ياندا توڭلىتىش',
288
288
  cancelFixed: 'قۇر توڭلىتىشنى ئەمەلدىن قالدۇرۇش'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} يىل'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Заморожуйте право',
288
288
  cancelFixed: 'Розморожувати'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} років'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: "O'ng tomonda muzlatib qo'ying",
288
288
  cancelFixed: "Urug'lar ustunini"
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} yillar'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Đóng băng bên phải',
288
288
  cancelFixed: 'Mở ra cột'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} năm'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '凍結在右側',
288
288
  cancelFixed: '取消凍結列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '冻结在右侧',
288
288
  cancelFixed: '取消冻结列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },