vxe-pc-ui 4.20.9 → 4.20.10

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 (102) hide show
  1. package/dist/all.esm.js +1863 -2038
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/date-panel/src/date-panel.js +58 -36
  5. package/es/date-panel/style.css +22 -20
  6. package/es/date-panel/style.min.css +1 -1
  7. package/es/icon/style.css +1 -1
  8. package/es/icon-picker/src/icon-picker.js +74 -38
  9. package/es/icon-picker/style.css +9 -3
  10. package/es/icon-picker/style.min.css +1 -1
  11. package/es/list/src/list.js +8 -164
  12. package/es/scrollbar/src/scrollbar.js +20 -173
  13. package/es/select/src/select.js +243 -8
  14. package/es/select/style.css +44 -0
  15. package/es/select/style.min.css +1 -1
  16. package/es/style.css +1 -1
  17. package/es/style.min.css +1 -1
  18. package/es/tooltip/src/tooltip.js +2 -4
  19. package/es/tooltip/style.css +2 -0
  20. package/es/tooltip/style.min.css +1 -1
  21. package/es/tree/src/tree.js +17 -172
  22. package/es/ui/index.js +1 -1
  23. package/es/ui/src/log.js +1 -1
  24. package/es/vxe-date-panel/style.css +22 -20
  25. package/es/vxe-date-panel/style.min.css +1 -1
  26. package/es/vxe-icon-picker/style.css +9 -3
  27. package/es/vxe-icon-picker/style.min.css +1 -1
  28. package/es/vxe-select/style.css +44 -0
  29. package/es/vxe-select/style.min.css +1 -1
  30. package/es/vxe-tooltip/style.css +2 -0
  31. package/es/vxe-tooltip/style.min.css +1 -1
  32. package/lib/date-panel/src/date-panel.js +56 -34
  33. package/lib/date-panel/src/date-panel.min.js +1 -1
  34. package/lib/date-panel/style/style.css +22 -20
  35. package/lib/date-panel/style/style.min.css +1 -1
  36. package/lib/icon/style/style.css +1 -1
  37. package/lib/icon/style/style.min.css +1 -1
  38. package/lib/icon-picker/src/icon-picker.js +101 -45
  39. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  40. package/lib/icon-picker/style/style.css +9 -3
  41. package/lib/icon-picker/style/style.min.css +1 -1
  42. package/lib/index.umd.js +813 -756
  43. package/lib/index.umd.min.js +1 -1
  44. package/lib/list/src/list.js +25 -194
  45. package/lib/list/src/list.min.js +1 -1
  46. package/lib/scrollbar/src/scrollbar.js +34 -199
  47. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  48. package/lib/select/src/select.js +315 -68
  49. package/lib/select/src/select.min.js +1 -1
  50. package/lib/select/style/style.css +44 -0
  51. package/lib/select/style/style.min.css +1 -1
  52. package/lib/style.css +1 -1
  53. package/lib/style.min.css +1 -1
  54. package/lib/tooltip/src/tooltip.js +2 -4
  55. package/lib/tooltip/src/tooltip.min.js +1 -1
  56. package/lib/tooltip/style/style.css +2 -0
  57. package/lib/tooltip/style/style.min.css +1 -1
  58. package/lib/tree/src/tree.js +36 -201
  59. package/lib/tree/src/tree.min.js +1 -1
  60. package/lib/ui/index.js +1 -1
  61. package/lib/ui/index.min.js +1 -1
  62. package/lib/ui/src/log.js +1 -1
  63. package/lib/ui/src/log.min.js +1 -1
  64. package/lib/vxe-date-panel/style/style.css +22 -20
  65. package/lib/vxe-date-panel/style/style.min.css +1 -1
  66. package/lib/vxe-icon-picker/style/style.css +9 -3
  67. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  68. package/lib/vxe-select/style/style.css +44 -0
  69. package/lib/vxe-select/style/style.min.css +1 -1
  70. package/lib/vxe-tooltip/style/style.css +2 -0
  71. package/lib/vxe-tooltip/style/style.min.css +1 -1
  72. package/package.json +2 -2
  73. package/packages/date-panel/src/date-panel.ts +58 -36
  74. package/packages/icon-picker/src/icon-picker.ts +80 -38
  75. package/packages/list/src/list.ts +24 -181
  76. package/packages/scrollbar/src/scrollbar.ts +36 -188
  77. package/packages/select/src/select.ts +278 -8
  78. package/packages/tooltip/src/tooltip.ts +2 -4
  79. package/packages/tree/src/tree.ts +33 -189
  80. package/styles/components/date-panel.scss +31 -29
  81. package/styles/components/icon-picker.scss +9 -3
  82. package/styles/components/select.scss +77 -0
  83. package/styles/components/tooltip.scss +1 -0
  84. package/types/components/gantt-module/gantt-view.d.ts +7 -16
  85. package/types/components/icon-picker.d.ts +21 -1
  86. package/types/components/list.d.ts +4 -0
  87. package/types/components/scrollbar.d.ts +7 -14
  88. package/types/components/select.d.ts +28 -3
  89. package/types/components/table.d.ts +20 -18
  90. package/types/components/tree.d.ts +7 -16
  91. /package/es/icon/{iconfont.1792139440389.ttf → iconfont.1792219842406.ttf} +0 -0
  92. /package/es/icon/{iconfont.1792139440389.woff → iconfont.1792219842406.woff} +0 -0
  93. /package/es/icon/{iconfont.1792139440389.woff2 → iconfont.1792219842406.woff2} +0 -0
  94. /package/es/{iconfont.1792139440389.ttf → iconfont.1792219842406.ttf} +0 -0
  95. /package/es/{iconfont.1792139440389.woff → iconfont.1792219842406.woff} +0 -0
  96. /package/es/{iconfont.1792139440389.woff2 → iconfont.1792219842406.woff2} +0 -0
  97. /package/lib/icon/style/{iconfont.1792139440389.ttf → iconfont.1792219842406.ttf} +0 -0
  98. /package/lib/icon/style/{iconfont.1792139440389.woff → iconfont.1792219842406.woff} +0 -0
  99. /package/lib/icon/style/{iconfont.1792139440389.woff2 → iconfont.1792219842406.woff2} +0 -0
  100. /package/lib/{iconfont.1792139440389.ttf → iconfont.1792219842406.ttf} +0 -0
  101. /package/lib/{iconfont.1792139440389.woff → iconfont.1792219842406.woff} +0 -0
  102. /package/lib/{iconfont.1792139440389.woff2 → iconfont.1792219842406.woff2} +0 -0
@@ -1,13 +1,15 @@
1
- import { h, Teleport, ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted } from 'vue';
1
+ import { h, Teleport, ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted, onBeforeUnmount } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
3
  import XEUtils from 'xe-utils';
4
- import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, renderEmptyElement } from '../../ui';
4
+ import { VxeUI, useFns } from '../../ui';
5
5
  import { getEventTargetNode, getPopupContainer, toCssUnit, updatePanelPlacement } from '../../ui/src/dom';
6
6
  import { getLastZIndex, nextZIndex, getFuncText, eqEmptyValue } from '../../ui/src/utils';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { createComponentLog } from '../../ui/src/log';
9
9
  import VxeInputComponent from '../../input';
10
10
  import VxeButtonComponent from '../../button';
11
+ const { getConfig, getIcon, getI18n, baseUtils, domUtils, globalEvents, GLOBAL_EVENT_KEYS, globalResize, createEvent, renderEmptyElement } = VxeUI;
12
+ const { getDefVal } = baseUtils;
11
13
  const { errLog } = createComponentLog('select');
12
14
  function isOptionVisible(option) {
13
15
  return option.visible !== false;
@@ -27,6 +29,9 @@ function createReactData() {
27
29
  currentOption: null,
28
30
  searchValue: '',
29
31
  searchLoading: false,
32
+ // 滚动条
33
+ yThumbHeight: 0,
34
+ xThumbWidth: 0,
30
35
  panelIndex: 0,
31
36
  panelStyle: {},
32
37
  panelPlacement: null,
@@ -46,8 +51,14 @@ function createInternalData() {
46
51
  optGroupKeyMaps: {},
47
52
  optFullValMaps: {},
48
53
  remoteValMaps: {},
49
- lastScrollLeft: 0,
54
+ // 滚动条
55
+ // scrollObserver: undefined,
56
+ // isThumbDrag: false,
57
+ thumbDragOffset: 0,
58
+ yThumbTop: 0,
59
+ xThumbLeft: 0,
50
60
  lastScrollTop: 0,
61
+ lastScrollLeft: 0,
51
62
  scrollYStore: {
52
63
  startIndex: 0,
53
64
  endIndex: 0,
@@ -170,6 +181,11 @@ export default defineVxeComponent({
170
181
  popupConfig: Object,
171
182
  virtualYConfig: Object,
172
183
  scrollY: Object,
184
+ useScrollbar: {
185
+ type: Boolean,
186
+ default: () => getDefVal(getConfig().select.useScrollbar, getConfig().useScrollbar)
187
+ },
188
+ scrollbarConfig: Object,
173
189
  /**
174
190
  * 已废弃,被 remote-config.queryMethod 替换
175
191
  * @deprecated
@@ -215,8 +231,10 @@ export default defineVxeComponent({
215
231
  const refInpSearch = ref();
216
232
  const refVirtualWrapper = ref();
217
233
  const refOptionPanel = ref();
234
+ const refVirtualSpaceElem = ref();
218
235
  const refVirtualBody = ref();
219
- const { computeSize } = useSize(props);
236
+ const { computeSize } = useFns.useSize(props);
237
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
220
238
  const reactData = reactive(createReactData());
221
239
  const internalData = createInternalData();
222
240
  const refMaps = {
@@ -230,6 +248,7 @@ export default defineVxeComponent({
230
248
  internalData,
231
249
  getRefMaps: () => refMaps
232
250
  };
251
+ const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns.useInitVScrollbar($xeSelect);
233
252
  const computeFormReadonly = computed(() => {
234
253
  const { readonly } = props;
235
254
  if (readonly === null) {
@@ -393,6 +412,74 @@ export default defineVxeComponent({
393
412
  }
394
413
  return labels.join(', ');
395
414
  });
415
+ const computeScrollbarOpts = computed(() => {
416
+ return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
417
+ });
418
+ const computeScrollbarXOpts = computed(() => {
419
+ const scrollbarOpts = computeScrollbarOpts.value;
420
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
421
+ visible: false
422
+ });
423
+ });
424
+ const computeScrollbarYOpts = computed(() => {
425
+ const scrollbarOpts = computeScrollbarOpts.value;
426
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
427
+ });
428
+ const computeScrollXHeight = computed(() => {
429
+ const scrollbarOpts = computeScrollbarOpts.value;
430
+ const scrollbarXOpts = computeScrollbarXOpts.value;
431
+ return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
432
+ });
433
+ const computeScrollYWidth = computed(() => {
434
+ const scrollbarOpts = computeScrollbarOpts.value;
435
+ const scrollbarYOpts = computeScrollbarYOpts.value;
436
+ return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
437
+ });
438
+ const computeScrollXVisible = computed(() => {
439
+ const scrollbarOpts = computeScrollbarOpts.value;
440
+ const scrollbarXOpts = computeScrollbarXOpts.value;
441
+ return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible);
442
+ });
443
+ const computeScrollYVisible = computed(() => {
444
+ const scrollbarOpts = computeScrollbarOpts.value;
445
+ const scrollbarYOpts = computeScrollbarYOpts.value;
446
+ return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible);
447
+ });
448
+ const computeScrollXAutoHide = computed(() => {
449
+ const scrollbarOpts = computeScrollbarOpts.value;
450
+ const scrollbarXOpts = computeScrollbarXOpts.value;
451
+ return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
452
+ });
453
+ const computeScrollYAutoHide = computed(() => {
454
+ const scrollbarOpts = computeScrollbarOpts.value;
455
+ const scrollbarYOpts = computeScrollbarYOpts.value;
456
+ return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
457
+ });
458
+ const computeScrollbarWrapperClss = computed(() => {
459
+ const { yThumbHeight, xThumbWidth } = reactData;
460
+ const scrollbarXToTop = computeScrollbarXToTop.value;
461
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
462
+ const scrollXVisible = computeScrollXVisible.value;
463
+ const scrollYVisible = computeScrollYVisible.value;
464
+ return domUtils.buildClass([
465
+ 'vxe-scrollbar is--virtual',
466
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
467
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
468
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
469
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
470
+ ], {
471
+ 'overflow-y': yThumbHeight,
472
+ 'overflow-x': xThumbWidth
473
+ });
474
+ });
475
+ const computeScrollbarXToTop = computed(() => {
476
+ const scrollbarXOpts = computeScrollbarXOpts.value;
477
+ return scrollbarXOpts.position === 'top';
478
+ });
479
+ const computeScrollbarYToLeft = computed(() => {
480
+ const scrollbarYOpts = computeScrollbarYOpts.value;
481
+ return scrollbarYOpts.position === 'left';
482
+ });
396
483
  const callSlot = (slotFunc, params) => {
397
484
  if (slotFunc) {
398
485
  if (XEUtils.isString(slotFunc)) {
@@ -1174,13 +1261,25 @@ export default defineVxeComponent({
1174
1261
  }
1175
1262
  });
1176
1263
  };
1264
+ const updateScrollbar = () => {
1265
+ const isVScrollbar = computeIsVScrollbar.value;
1266
+ if (isVScrollbar) {
1267
+ return nextTick().then(() => {
1268
+ updateThumbSize();
1269
+ updateThumbOffset();
1270
+ });
1271
+ }
1272
+ return Promise.resolve();
1273
+ };
1177
1274
  /**
1178
1275
  * 重新计算列表
1179
1276
  */
1180
1277
  const recalculate = () => {
1181
1278
  const el = refElem.value;
1182
1279
  if (el && el.clientWidth && el.clientHeight) {
1183
- return computeScrollLoad();
1280
+ return computeScrollLoad().then(() => {
1281
+ return updateScrollbar();
1282
+ });
1184
1283
  }
1185
1284
  return Promise.resolve();
1186
1285
  };
@@ -1212,6 +1311,7 @@ export default defineVxeComponent({
1212
1311
  const scrollLeft = scrollBodyElem.scrollLeft;
1213
1312
  const isX = scrollLeft !== internalData.lastScrollLeft;
1214
1313
  const isY = scrollTop !== internalData.lastScrollTop;
1314
+ updateThumbOffset();
1215
1315
  internalData.lastScrollTop = scrollTop;
1216
1316
  internalData.lastScrollLeft = scrollLeft;
1217
1317
  if (reactData.scrollYLoad) {
@@ -1286,6 +1386,10 @@ export default defineVxeComponent({
1286
1386
  };
1287
1387
  const selectMethods = {
1288
1388
  dispatchEvent,
1389
+ getScrollViewElem() {
1390
+ const viewEl = refVirtualWrapper.value;
1391
+ return viewEl || null;
1392
+ },
1289
1393
  loadData,
1290
1394
  reloadData(datas) {
1291
1395
  internalData.isLoaded = false;
@@ -1340,6 +1444,26 @@ export default defineVxeComponent({
1340
1444
  recalculate,
1341
1445
  clearScroll
1342
1446
  };
1447
+ const bindScrollbarResize = () => {
1448
+ const isVScrollbar = computeIsVScrollbar.value;
1449
+ const { scrollObserver } = internalData;
1450
+ if (isVScrollbar) {
1451
+ if (!scrollObserver) {
1452
+ const el = refElem.value;
1453
+ const viewInnerEl = refVirtualSpaceElem.value;
1454
+ const scrollObserver = globalResize.create(() => {
1455
+ reScrollFlag.value++;
1456
+ });
1457
+ if (el) {
1458
+ scrollObserver.observe(el);
1459
+ }
1460
+ if (viewInnerEl) {
1461
+ scrollObserver.observe(viewInnerEl);
1462
+ }
1463
+ internalData.scrollObserver = scrollObserver;
1464
+ }
1465
+ }
1466
+ };
1343
1467
  Object.assign($xeSelect, selectMethods);
1344
1468
  const renderRadio = (option, isOptGroup, isChecked, isDisabled) => {
1345
1469
  const radioOpts = computeRadioOpts.value;
@@ -1513,8 +1637,9 @@ export default defineVxeComponent({
1513
1637
  };
1514
1638
  const renderVN = () => {
1515
1639
  const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton } = props;
1516
- const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData;
1640
+ const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData;
1517
1641
  const vSize = computeSize.value;
1642
+ const isVScrollbar = computeIsVScrollbar.value;
1518
1643
  const isDisabled = computeIsDisabled.value;
1519
1644
  const selectLabel = computeSelectLabel.value;
1520
1645
  const fullLabel = computeFullLabel.value;
@@ -1546,6 +1671,14 @@ export default defineVxeComponent({
1546
1671
  const prefixSlot = slots.prefix;
1547
1672
  const { appendTo } = popupOpts;
1548
1673
  const ppClassName = popupOpts.className || props.popupClassName;
1674
+ const scrollbarOpts = computeScrollbarOpts.value;
1675
+ const scrollXVisible = computeScrollXVisible.value;
1676
+ const scrollYVisible = computeScrollYVisible.value;
1677
+ const scrollbarXToTop = computeScrollbarXToTop.value;
1678
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
1679
+ const scrollXAutoHide = computeScrollXAutoHide.value;
1680
+ const scrollYAutoHide = computeScrollYAutoHide.value;
1681
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
1549
1682
  return h('div', {
1550
1683
  ref: refElem,
1551
1684
  class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className) : '', {
@@ -1656,7 +1789,21 @@ export default defineVxeComponent({
1656
1789
  ])
1657
1790
  : renderEmptyElement($xeSelect),
1658
1791
  h('div', {
1659
- class: 'vxe-select--panel-body'
1792
+ class: [
1793
+ 'vxe-select--panel-body',
1794
+ isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
1795
+ isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
1796
+ isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
1797
+ isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
1798
+ {
1799
+ 'is--virtual-scrollbar': isVScrollbar,
1800
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
1801
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
1802
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
1803
+ 'overflow-y': yThumbHeight,
1804
+ 'overflow-x': xThumbWidth
1805
+ }
1806
+ ]
1660
1807
  }, [
1661
1808
  h('div', {
1662
1809
  ref: refVirtualWrapper,
@@ -1664,6 +1811,7 @@ export default defineVxeComponent({
1664
1811
  onScroll: scrollEvent
1665
1812
  }, [
1666
1813
  h('div', {
1814
+ ref: refVirtualSpaceElem,
1667
1815
  class: 'vxe-select--y-space',
1668
1816
  style: {
1669
1817
  height: bodyHeight ? `${bodyHeight}px` : ''
@@ -1676,7 +1824,50 @@ export default defineVxeComponent({
1676
1824
  marginTop: `${topSpaceHeight}px`
1677
1825
  }
1678
1826
  }, renderOpts())
1679
- ])
1827
+ ]),
1828
+ /**
1829
+ * 滚动条
1830
+ */
1831
+ isVScrollbar
1832
+ ? h('div', {
1833
+ class: scrollbarWrapperClss
1834
+ }, [
1835
+ scrollXVisible === false
1836
+ ? renderEmptyElement($xeSelect)
1837
+ : h('div', {
1838
+ ref: refTrackXElem,
1839
+ class: 'vxe-scrollbar--track-x',
1840
+ onClick: clickTrackXEvent
1841
+ }, [
1842
+ h('div', {
1843
+ ref: refThumbXElem,
1844
+ class: 'vxe-scrollbar--thumb-x',
1845
+ onPointerdown: pointerdownThumbXEvent,
1846
+ onPointermove: pointermoveThumbXEvent,
1847
+ onPointerup: cleatPointerThumbEvent,
1848
+ onPointercancel: cleatPointerThumbEvent,
1849
+ onLostpointercapture: cleatPointerThumbEvent
1850
+ })
1851
+ ]),
1852
+ scrollYVisible === false
1853
+ ? renderEmptyElement($xeSelect)
1854
+ : h('div', {
1855
+ ref: refTrackYElem,
1856
+ class: 'vxe-scrollbar--track-y',
1857
+ onClick: clickTrackYEvent
1858
+ }, [
1859
+ h('div', {
1860
+ ref: refThumbYElem,
1861
+ class: 'vxe-scrollbar--thumb-y',
1862
+ onPointerdown: pointerdownThumbYEvent,
1863
+ onPointermove: pointermoveThumbYEvent,
1864
+ onPointerup: cleatPointerThumbEvent,
1865
+ onPointercancel: cleatPointerThumbEvent,
1866
+ onLostpointercapture: cleatPointerThumbEvent
1867
+ })
1868
+ ])
1869
+ ])
1870
+ : renderEmptyElement($xeSelect)
1680
1871
  ]),
1681
1872
  footerSlot || showTotalButton || (showCloseButton && multiple)
1682
1873
  ? h('div', {
@@ -1721,6 +1912,42 @@ export default defineVxeComponent({
1721
1912
  watch(() => props.optionGroups, (val) => {
1722
1913
  loadData(val || []);
1723
1914
  });
1915
+ const reScrollFlag = ref(0);
1916
+ const reLayoutFlag = ref(0);
1917
+ watch(computeIsVScrollbar, () => {
1918
+ nextTick(() => {
1919
+ bindScrollbarResize();
1920
+ nextTick(() => {
1921
+ reLayoutFlag.value++;
1922
+ });
1923
+ });
1924
+ });
1925
+ watch(computeScrollYWidth, () => {
1926
+ reLayoutFlag.value++;
1927
+ });
1928
+ watch(computeScrollXHeight, () => {
1929
+ reLayoutFlag.value++;
1930
+ });
1931
+ watch(computeScrollXVisible, () => {
1932
+ nextTick(() => {
1933
+ reLayoutFlag.value++;
1934
+ });
1935
+ });
1936
+ watch(computeScrollYVisible, () => {
1937
+ nextTick(() => {
1938
+ reLayoutFlag.value++;
1939
+ });
1940
+ });
1941
+ watch(reLayoutFlag, () => {
1942
+ recalculate().then(() => {
1943
+ recalculate();
1944
+ });
1945
+ });
1946
+ watch(reScrollFlag, () => {
1947
+ updateScrollbar().then(() => {
1948
+ updateScrollbar();
1949
+ });
1950
+ });
1724
1951
  onMounted(() => {
1725
1952
  nextTick(() => {
1726
1953
  const { options, optionGroups } = props;
@@ -1731,12 +1958,20 @@ export default defineVxeComponent({
1731
1958
  loadData(options);
1732
1959
  }
1733
1960
  });
1961
+ reLayoutFlag.value++;
1962
+ bindScrollbarResize();
1734
1963
  globalEvents.on($xeSelect, 'mousedown', handleGlobalMousedownEvent);
1735
1964
  globalEvents.on($xeSelect, 'keydown', handleGlobalKeydownEvent);
1736
1965
  globalEvents.on($xeSelect, 'blur', handleGlobalBlurEvent);
1737
1966
  globalEvents.on($xeSelect, 'resize', handleGlobalResizeEvent);
1738
1967
  globalEvents.on($xeSelect, 'scroll', handleGlobalScrollEvent);
1739
1968
  });
1969
+ onBeforeUnmount(() => {
1970
+ const { scrollObserver } = internalData;
1971
+ if (scrollObserver) {
1972
+ scrollObserver.disconnect();
1973
+ }
1974
+ });
1740
1975
  onUnmounted(() => {
1741
1976
  globalEvents.off($xeSelect, 'mousedown');
1742
1977
  globalEvents.off($xeSelect, 'keydown');
@@ -143,6 +143,7 @@
143
143
  }
144
144
 
145
145
  .vxe-select--panel-body {
146
+ position: relative;
146
147
  display: flex;
147
148
  flex-direction: row;
148
149
  flex-grow: 1;
@@ -375,4 +376,47 @@
375
376
  .vxe-select--search-loading,
376
377
  .vxe-select--empty-placeholder {
377
378
  line-height: var(--vxe-ui-select-current-option-height);
379
+ }
380
+
381
+ .vxe-select--panel-body.ov-padding.overflow-x.sx-pos--top {
382
+ padding-top: var(--vxe-ui-scrollbar-x-height);
383
+ }
384
+ .vxe-select--panel-body.ov-padding.overflow-x.sx-pos--bottom {
385
+ padding-bottom: var(--vxe-ui-scrollbar-x-height);
386
+ }
387
+ .vxe-select--panel-body.ov-padding.overflow-y.sy-pos--left {
388
+ padding-left: var(--vxe-ui-scrollbar-y-width);
389
+ }
390
+ .vxe-select--panel-body.ov-padding.overflow-y.sy-pos--right {
391
+ padding-right: var(--vxe-ui-scrollbar-y-width);
392
+ }
393
+ .vxe-select--panel-body.ov-x--hidden > .vxe-select-option--wrapper {
394
+ overflow-x: hidden;
395
+ }
396
+ .vxe-select--panel-body.ov-y--hidden > .vxe-select-option--wrapper {
397
+ overflow-y: hidden;
398
+ }
399
+ .vxe-select--panel-body.is--virtual-scrollbar.ov-x--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-x {
400
+ opacity: 1;
401
+ }
402
+ .vxe-select--panel-body.is--virtual-scrollbar.ov-x--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-x {
403
+ opacity: 0;
404
+ transition: opacity 0.8s ease-in-out;
405
+ }
406
+ .vxe-select--panel-body.is--virtual-scrollbar.ov-y--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-y {
407
+ opacity: 1;
408
+ }
409
+ .vxe-select--panel-body.is--virtual-scrollbar.ov-y--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-y {
410
+ opacity: 0;
411
+ transition: opacity 0.8s ease-in-out;
412
+ }
413
+ .vxe-select--panel-body > .vxe-scrollbar {
414
+ position: unset;
415
+ }
416
+ .vxe-select--panel-body.is--virtual-scrollbar > .vxe-select-option--wrapper {
417
+ scrollbar-width: none;
418
+ -ms-overflow-style: none;
419
+ }
420
+ .vxe-select--panel-body.is--virtual-scrollbar > .vxe-select-option--wrapper::-webkit-scrollbar {
421
+ display: none;
378
422
  }
@@ -1 +1 @@
1
- .vxe-select,.vxe-select--panel{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-default)}.vxe-select--panel.size--xlarge,.vxe-select.size--xlarge{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-xlarge);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-xlarge)}.vxe-select--panel.size--large,.vxe-select.size--large{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-large);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-large)}.vxe-select--panel.size--medium,.vxe-select.size--medium{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-medium)}.vxe-select--panel.size--small,.vxe-select.size--small{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-small)}.vxe-select--panel.size--mini,.vxe-select.size--mini{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-mini)}.vxe-select,.vxe-select--panel{--vxe-ui-select-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-select--panel.size--mini,.vxe-select--panel.size--small,.vxe-select.size--mini,.vxe-select.size--small{--vxe-ui-select-current-padding:var(--vxe-ui-layout-padding-half)}.vxe-select{position:relative;display:inline-block;width:180px;font-size:var(--vxe-ui-select-current-font-size);color:var(--vxe-ui-font-color);text-align:left}.vxe-select>.vxe-input .vxe-input--inner{cursor:pointer}.vxe-select.is--disabled>.vxe-input .vxe-input--inner{cursor:no-drop}.vxe-select.is--loading>.vxe-input .vxe-input--inner{cursor:progress}.vxe-select>.vxe-input{width:100%}.vxe-select>.vxe-input .vxe-input--suffix-icon>i{display:inline-block;transition:transform .2s ease-in-out}.vxe-select.is--active:not(.is--filter)>.vxe-input{border-color:var(--vxe-ui-font-primary-color)}.vxe-select--readonly{color:var(--vxe-ui-font-color);display:inline-flex}.vxe-select-slots{display:none}.vxe-select--panel{font-size:var(--vxe-ui-select-current-font-size);display:none;position:absolute;left:0;padding:4px 0;color:var(--vxe-ui-font-color);text-align:left}.vxe-select--panel:not(.is--transfer){min-width:100%}.vxe-select--panel.is--transfer{position:fixed}.vxe-select--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-select--panel.ani--leave[placement=top]{transform-origin:center bottom}.vxe-select--panel.ani--enter{opacity:1;transform:scaleY(1)}.vxe-select--panel.ani--enter>div::after{display:none}.vxe-select--panel>div::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select--panel-search{display:block;flex-shrink:0;padding:var(--vxe-ui-layout-padding-default)}.vxe-select--panel-search .vxe-select-search--input{width:100%}.vxe-select--panel-wrapper{display:flex;flex-direction:column;position:relative;max-height:18em;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-select--panel-body{display:flex;flex-direction:row;flex-grow:1;overflow:hidden}.vxe-select--header-button{display:flex;flex-direction:row}.vxe-select--footer-button,.vxe-select--header-button{display:flex;flex-direction:row;white-space:nowrap;align-items:center;min-height:2em}.vxe-select--total-btns{padding-left:var(--vxe-ui-select-current-padding);flex-grow:1}.vxe-select--oper-btns,.vxe-select--total-btns{display:flex;flex-direction:row;align-items:center}.vxe-select--oper-btns{flex-shrink:0}.vxe-select--footer-button{display:flex;flex-direction:row}.vxe-select--panel-header{border-bottom:1px solid var(--vxe-ui-base-popup-border-color)}.vxe-select--panel-footer{border-top:1px solid var(--vxe-ui-base-popup-border-color)}.vxe-select--panel-footer,.vxe-select--panel-header{flex-shrink:0;padding:4px 0}.vxe-select-option--wrapper{flex-grow:1;position:relative;overflow-x:hidden;overflow-y:auto}.vxe-select--y-space{width:0;float:left}.vxe-select--body,.vxe-select-option--wrapper{padding:0;margin:0;border:0;outline:0}.vxe-select-option{position:relative;flex-direction:row;display:flex;padding:0 .6em;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer}.vxe-select-option.is--add{padding-right:2em}.vxe-select-option.is--add:hover .vxe-select-option--add-icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option.is--add .vxe-select-option--add-icon{display:block}.vxe-select-option.is--selected{color:var(--vxe-ui-font-primary-color)}.vxe-select-option:not(.is--disabled).is--hover{background-color:var(--vxe-ui-select-option-hover-background-color)}.vxe-select-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:no-drop}.vxe-select-optgroup{color:var(--vxe-ui-select-title-color);font-size:12px;cursor:default}.vxe-select-option--label{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-select-option--add-icon{display:none;position:absolute;top:0;right:.6em}.vxe-select-option--checkbox{padding-right:.4em}.vxe-select-option--checkbox{cursor:pointer}.vxe-select-option--checkbox .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-select-option--checkbox .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select-option--checkbox.is--checked,.vxe-select-option--checkbox.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox.is--checked .vxe-checkbox--icon,.vxe-select-option--checkbox.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox.is--hidden{cursor:default}.vxe-select-option--checkbox.is--readonly{cursor:auto}.vxe-select-option--checkbox.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-select-option--checkbox.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-select-option--checkbox .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-select-option--radio{padding-right:.4em}.vxe-select-option--radio{cursor:pointer}.vxe-select-option--radio .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-select-option--radio .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select-option--radio.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio.is--readonly{cursor:auto}.vxe-select-option--radio.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-select-option--radio.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-select-option--radio .vxe-radio--label{padding-left:.4em;vertical-align:middle}.vxe-select--search-icon{margin-right:.5em}.vxe-select--empty-placeholder,.vxe-select--search-loading{padding:0 .6em;text-align:center;color:var(--vxe-ui-select-empty-color)}.vxe-select-option{height:var(--vxe-ui-select-current-option-height)}.vxe-select--empty-placeholder,.vxe-select--search-loading,.vxe-select-option{line-height:var(--vxe-ui-select-current-option-height)}
1
+ .vxe-select,.vxe-select--panel{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-default)}.vxe-select--panel.size--xlarge,.vxe-select.size--xlarge{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-xlarge);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-xlarge)}.vxe-select--panel.size--large,.vxe-select.size--large{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-large);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-large)}.vxe-select--panel.size--medium,.vxe-select.size--medium{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-medium)}.vxe-select--panel.size--small,.vxe-select.size--small{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-small)}.vxe-select--panel.size--mini,.vxe-select.size--mini{--vxe-ui-select-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-select-current-option-height:var(--vxe-ui-select-option-height-mini)}.vxe-select,.vxe-select--panel{--vxe-ui-select-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-select--panel.size--mini,.vxe-select--panel.size--small,.vxe-select.size--mini,.vxe-select.size--small{--vxe-ui-select-current-padding:var(--vxe-ui-layout-padding-half)}.vxe-select{position:relative;display:inline-block;width:180px;font-size:var(--vxe-ui-select-current-font-size);color:var(--vxe-ui-font-color);text-align:left}.vxe-select>.vxe-input .vxe-input--inner{cursor:pointer}.vxe-select.is--disabled>.vxe-input .vxe-input--inner{cursor:no-drop}.vxe-select.is--loading>.vxe-input .vxe-input--inner{cursor:progress}.vxe-select>.vxe-input{width:100%}.vxe-select>.vxe-input .vxe-input--suffix-icon>i{display:inline-block;transition:transform .2s ease-in-out}.vxe-select.is--active:not(.is--filter)>.vxe-input{border-color:var(--vxe-ui-font-primary-color)}.vxe-select--readonly{color:var(--vxe-ui-font-color);display:inline-flex}.vxe-select-slots{display:none}.vxe-select--panel{font-size:var(--vxe-ui-select-current-font-size);display:none;position:absolute;left:0;padding:4px 0;color:var(--vxe-ui-font-color);text-align:left}.vxe-select--panel:not(.is--transfer){min-width:100%}.vxe-select--panel.is--transfer{position:fixed}.vxe-select--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-select--panel.ani--leave[placement=top]{transform-origin:center bottom}.vxe-select--panel.ani--enter{opacity:1;transform:scaleY(1)}.vxe-select--panel.ani--enter>div::after{display:none}.vxe-select--panel>div::after{content:"";position:absolute;top:0;left:0;width:100%;height:100%;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select--panel-search{display:block;flex-shrink:0;padding:var(--vxe-ui-layout-padding-default)}.vxe-select--panel-search .vxe-select-search--input{width:100%}.vxe-select--panel-wrapper{display:flex;flex-direction:column;position:relative;max-height:18em;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-select--panel-body{position:relative;display:flex;flex-direction:row;flex-grow:1;overflow:hidden}.vxe-select--header-button{display:flex;flex-direction:row}.vxe-select--footer-button,.vxe-select--header-button{display:flex;flex-direction:row;white-space:nowrap;align-items:center;min-height:2em}.vxe-select--total-btns{padding-left:var(--vxe-ui-select-current-padding);flex-grow:1}.vxe-select--oper-btns,.vxe-select--total-btns{display:flex;flex-direction:row;align-items:center}.vxe-select--oper-btns{flex-shrink:0}.vxe-select--footer-button{display:flex;flex-direction:row}.vxe-select--panel-header{border-bottom:1px solid var(--vxe-ui-base-popup-border-color)}.vxe-select--panel-footer{border-top:1px solid var(--vxe-ui-base-popup-border-color)}.vxe-select--panel-footer,.vxe-select--panel-header{flex-shrink:0;padding:4px 0}.vxe-select-option--wrapper{flex-grow:1;position:relative;overflow-x:hidden;overflow-y:auto}.vxe-select--y-space{width:0;float:left}.vxe-select--body,.vxe-select-option--wrapper{padding:0;margin:0;border:0;outline:0}.vxe-select-option{position:relative;flex-direction:row;display:flex;padding:0 .6em;-webkit-user-select:none;-moz-user-select:none;user-select:none;cursor:pointer}.vxe-select-option.is--add{padding-right:2em}.vxe-select-option.is--add:hover .vxe-select-option--add-icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option.is--add .vxe-select-option--add-icon{display:block}.vxe-select-option.is--selected{color:var(--vxe-ui-font-primary-color)}.vxe-select-option:not(.is--disabled).is--hover{background-color:var(--vxe-ui-select-option-hover-background-color)}.vxe-select-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:no-drop}.vxe-select-optgroup{color:var(--vxe-ui-select-title-color);font-size:12px;cursor:default}.vxe-select-option--label{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-select-option--add-icon{display:none;position:absolute;top:0;right:.6em}.vxe-select-option--checkbox{padding-right:.4em}.vxe-select-option--checkbox{cursor:pointer}.vxe-select-option--checkbox .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-select-option--checkbox .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select-option--checkbox.is--checked,.vxe-select-option--checkbox.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox.is--checked .vxe-checkbox--icon,.vxe-select-option--checkbox.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--checkbox.is--hidden{cursor:default}.vxe-select-option--checkbox.is--readonly{cursor:auto}.vxe-select-option--checkbox.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-select-option--checkbox.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-select-option--checkbox .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-select-option--radio{padding-right:.4em}.vxe-select-option--radio{cursor:pointer}.vxe-select-option--radio .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-select-option--radio .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-select-option--radio.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-select-option--radio.is--readonly{cursor:auto}.vxe-select-option--radio.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-select-option--radio.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-select-option--radio .vxe-radio--label{padding-left:.4em;vertical-align:middle}.vxe-select--search-icon{margin-right:.5em}.vxe-select--empty-placeholder,.vxe-select--search-loading{padding:0 .6em;text-align:center;color:var(--vxe-ui-select-empty-color)}.vxe-select-option{height:var(--vxe-ui-select-current-option-height)}.vxe-select--empty-placeholder,.vxe-select--search-loading,.vxe-select-option{line-height:var(--vxe-ui-select-current-option-height)}.vxe-select--panel-body.ov-padding.overflow-x.sx-pos--top{padding-top:var(--vxe-ui-scrollbar-x-height)}.vxe-select--panel-body.ov-padding.overflow-x.sx-pos--bottom{padding-bottom:var(--vxe-ui-scrollbar-x-height)}.vxe-select--panel-body.ov-padding.overflow-y.sy-pos--left{padding-left:var(--vxe-ui-scrollbar-y-width)}.vxe-select--panel-body.ov-padding.overflow-y.sy-pos--right{padding-right:var(--vxe-ui-scrollbar-y-width)}.vxe-select--panel-body.ov-x--hidden>.vxe-select-option--wrapper{overflow-x:hidden}.vxe-select--panel-body.ov-y--hidden>.vxe-select-option--wrapper{overflow-y:hidden}.vxe-select--panel-body.is--virtual-scrollbar.ov-x--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:1}.vxe-select--panel-body.is--virtual-scrollbar.ov-x--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-select--panel-body.is--virtual-scrollbar.ov-y--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:1}.vxe-select--panel-body.is--virtual-scrollbar.ov-y--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}.vxe-select--panel-body>.vxe-scrollbar{position:unset}.vxe-select--panel-body.is--virtual-scrollbar>.vxe-select-option--wrapper{scrollbar-width:none;-ms-overflow-style:none}.vxe-select--panel-body.is--virtual-scrollbar>.vxe-select-option--wrapper::-webkit-scrollbar{display:none}