vxe-pc-ui 4.20.9 → 4.20.11

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 +1874 -2040
  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 +12 -165
  12. package/es/scrollbar/src/scrollbar.js +20 -173
  13. package/es/select/src/select.js +246 -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 +21 -173
  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 +827 -761
  43. package/lib/index.umd.min.js +1 -1
  44. package/lib/list/src/list.js +29 -195
  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 +318 -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 +40 -202
  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 +28 -182
  76. package/packages/scrollbar/src/scrollbar.ts +36 -188
  77. package/packages/select/src/select.ts +281 -8
  78. package/packages/tooltip/src/tooltip.ts +2 -4
  79. package/packages/tree/src/tree.ts +37 -190
  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 +16 -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 +30 -18
  90. package/types/components/tree.d.ts +7 -16
  91. /package/es/icon/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
  92. /package/es/icon/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
  93. /package/es/icon/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
  94. /package/es/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
  95. /package/es/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
  96. /package/es/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
  97. /package/lib/icon/style/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
  98. /package/lib/icon/style/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
  99. /package/lib/icon/style/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
  100. /package/lib/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
  101. /package/lib/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
  102. /package/lib/{iconfont.1792139440389.woff2 → iconfont.1792226845944.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,10 @@ export default defineVxeComponent({
1212
1311
  const scrollLeft = scrollBodyElem.scrollLeft;
1213
1312
  const isX = scrollLeft !== internalData.lastScrollLeft;
1214
1313
  const isY = scrollTop !== internalData.lastScrollTop;
1314
+ const isVScrollbar = computeIsVScrollbar.value;
1315
+ if (isVScrollbar) {
1316
+ updateThumbOffset();
1317
+ }
1215
1318
  internalData.lastScrollTop = scrollTop;
1216
1319
  internalData.lastScrollLeft = scrollLeft;
1217
1320
  if (reactData.scrollYLoad) {
@@ -1286,6 +1389,10 @@ export default defineVxeComponent({
1286
1389
  };
1287
1390
  const selectMethods = {
1288
1391
  dispatchEvent,
1392
+ getScrollViewElem() {
1393
+ const viewEl = refVirtualWrapper.value;
1394
+ return viewEl || null;
1395
+ },
1289
1396
  loadData,
1290
1397
  reloadData(datas) {
1291
1398
  internalData.isLoaded = false;
@@ -1340,6 +1447,26 @@ export default defineVxeComponent({
1340
1447
  recalculate,
1341
1448
  clearScroll
1342
1449
  };
1450
+ const bindScrollbarResize = () => {
1451
+ const isVScrollbar = computeIsVScrollbar.value;
1452
+ const { scrollObserver } = internalData;
1453
+ if (isVScrollbar) {
1454
+ if (!scrollObserver) {
1455
+ const el = refElem.value;
1456
+ const viewInnerEl = refVirtualSpaceElem.value;
1457
+ const scrollObserver = globalResize.create(() => {
1458
+ reScrollFlag.value++;
1459
+ });
1460
+ if (el) {
1461
+ scrollObserver.observe(el);
1462
+ }
1463
+ if (viewInnerEl) {
1464
+ scrollObserver.observe(viewInnerEl);
1465
+ }
1466
+ internalData.scrollObserver = scrollObserver;
1467
+ }
1468
+ }
1469
+ };
1343
1470
  Object.assign($xeSelect, selectMethods);
1344
1471
  const renderRadio = (option, isOptGroup, isChecked, isDisabled) => {
1345
1472
  const radioOpts = computeRadioOpts.value;
@@ -1513,8 +1640,9 @@ export default defineVxeComponent({
1513
1640
  };
1514
1641
  const renderVN = () => {
1515
1642
  const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton } = props;
1516
- const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData;
1643
+ const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData;
1517
1644
  const vSize = computeSize.value;
1645
+ const isVScrollbar = computeIsVScrollbar.value;
1518
1646
  const isDisabled = computeIsDisabled.value;
1519
1647
  const selectLabel = computeSelectLabel.value;
1520
1648
  const fullLabel = computeFullLabel.value;
@@ -1546,6 +1674,14 @@ export default defineVxeComponent({
1546
1674
  const prefixSlot = slots.prefix;
1547
1675
  const { appendTo } = popupOpts;
1548
1676
  const ppClassName = popupOpts.className || props.popupClassName;
1677
+ const scrollbarOpts = computeScrollbarOpts.value;
1678
+ const scrollXVisible = computeScrollXVisible.value;
1679
+ const scrollYVisible = computeScrollYVisible.value;
1680
+ const scrollbarXToTop = computeScrollbarXToTop.value;
1681
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
1682
+ const scrollXAutoHide = computeScrollXAutoHide.value;
1683
+ const scrollYAutoHide = computeScrollYAutoHide.value;
1684
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
1549
1685
  return h('div', {
1550
1686
  ref: refElem,
1551
1687
  class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className) : '', {
@@ -1656,7 +1792,21 @@ export default defineVxeComponent({
1656
1792
  ])
1657
1793
  : renderEmptyElement($xeSelect),
1658
1794
  h('div', {
1659
- class: 'vxe-select--panel-body'
1795
+ class: [
1796
+ 'vxe-select--panel-body',
1797
+ isVScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
1798
+ isVScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
1799
+ isVScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
1800
+ isVScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
1801
+ {
1802
+ 'is--virtual-scrollbar': isVScrollbar,
1803
+ 'ov-padding': isVScrollbar && scrollbarOpts.padding,
1804
+ 'ov-x--auto-hide': isVScrollbar && scrollXAutoHide,
1805
+ 'ov-y--auto-hide': isVScrollbar && scrollYAutoHide,
1806
+ 'overflow-y': yThumbHeight,
1807
+ 'overflow-x': xThumbWidth
1808
+ }
1809
+ ]
1660
1810
  }, [
1661
1811
  h('div', {
1662
1812
  ref: refVirtualWrapper,
@@ -1664,6 +1814,7 @@ export default defineVxeComponent({
1664
1814
  onScroll: scrollEvent
1665
1815
  }, [
1666
1816
  h('div', {
1817
+ ref: refVirtualSpaceElem,
1667
1818
  class: 'vxe-select--y-space',
1668
1819
  style: {
1669
1820
  height: bodyHeight ? `${bodyHeight}px` : ''
@@ -1676,7 +1827,50 @@ export default defineVxeComponent({
1676
1827
  marginTop: `${topSpaceHeight}px`
1677
1828
  }
1678
1829
  }, renderOpts())
1679
- ])
1830
+ ]),
1831
+ /**
1832
+ * 滚动条
1833
+ */
1834
+ isVScrollbar
1835
+ ? h('div', {
1836
+ class: scrollbarWrapperClss
1837
+ }, [
1838
+ scrollXVisible === false
1839
+ ? renderEmptyElement($xeSelect)
1840
+ : h('div', {
1841
+ ref: refTrackXElem,
1842
+ class: 'vxe-scrollbar--track-x',
1843
+ onClick: clickTrackXEvent
1844
+ }, [
1845
+ h('div', {
1846
+ ref: refThumbXElem,
1847
+ class: 'vxe-scrollbar--thumb-x',
1848
+ onPointerdown: pointerdownThumbXEvent,
1849
+ onPointermove: pointermoveThumbXEvent,
1850
+ onPointerup: cleatPointerThumbEvent,
1851
+ onPointercancel: cleatPointerThumbEvent,
1852
+ onLostpointercapture: cleatPointerThumbEvent
1853
+ })
1854
+ ]),
1855
+ scrollYVisible === false
1856
+ ? renderEmptyElement($xeSelect)
1857
+ : h('div', {
1858
+ ref: refTrackYElem,
1859
+ class: 'vxe-scrollbar--track-y',
1860
+ onClick: clickTrackYEvent
1861
+ }, [
1862
+ h('div', {
1863
+ ref: refThumbYElem,
1864
+ class: 'vxe-scrollbar--thumb-y',
1865
+ onPointerdown: pointerdownThumbYEvent,
1866
+ onPointermove: pointermoveThumbYEvent,
1867
+ onPointerup: cleatPointerThumbEvent,
1868
+ onPointercancel: cleatPointerThumbEvent,
1869
+ onLostpointercapture: cleatPointerThumbEvent
1870
+ })
1871
+ ])
1872
+ ])
1873
+ : renderEmptyElement($xeSelect)
1680
1874
  ]),
1681
1875
  footerSlot || showTotalButton || (showCloseButton && multiple)
1682
1876
  ? h('div', {
@@ -1721,6 +1915,42 @@ export default defineVxeComponent({
1721
1915
  watch(() => props.optionGroups, (val) => {
1722
1916
  loadData(val || []);
1723
1917
  });
1918
+ const reScrollFlag = ref(0);
1919
+ const reLayoutFlag = ref(0);
1920
+ watch(computeIsVScrollbar, () => {
1921
+ nextTick(() => {
1922
+ bindScrollbarResize();
1923
+ nextTick(() => {
1924
+ reLayoutFlag.value++;
1925
+ });
1926
+ });
1927
+ });
1928
+ watch(computeScrollYWidth, () => {
1929
+ reLayoutFlag.value++;
1930
+ });
1931
+ watch(computeScrollXHeight, () => {
1932
+ reLayoutFlag.value++;
1933
+ });
1934
+ watch(computeScrollXVisible, () => {
1935
+ nextTick(() => {
1936
+ reLayoutFlag.value++;
1937
+ });
1938
+ });
1939
+ watch(computeScrollYVisible, () => {
1940
+ nextTick(() => {
1941
+ reLayoutFlag.value++;
1942
+ });
1943
+ });
1944
+ watch(reLayoutFlag, () => {
1945
+ recalculate().then(() => {
1946
+ recalculate();
1947
+ });
1948
+ });
1949
+ watch(reScrollFlag, () => {
1950
+ updateScrollbar().then(() => {
1951
+ updateScrollbar();
1952
+ });
1953
+ });
1724
1954
  onMounted(() => {
1725
1955
  nextTick(() => {
1726
1956
  const { options, optionGroups } = props;
@@ -1731,12 +1961,20 @@ export default defineVxeComponent({
1731
1961
  loadData(options);
1732
1962
  }
1733
1963
  });
1964
+ reLayoutFlag.value++;
1965
+ bindScrollbarResize();
1734
1966
  globalEvents.on($xeSelect, 'mousedown', handleGlobalMousedownEvent);
1735
1967
  globalEvents.on($xeSelect, 'keydown', handleGlobalKeydownEvent);
1736
1968
  globalEvents.on($xeSelect, 'blur', handleGlobalBlurEvent);
1737
1969
  globalEvents.on($xeSelect, 'resize', handleGlobalResizeEvent);
1738
1970
  globalEvents.on($xeSelect, 'scroll', handleGlobalScrollEvent);
1739
1971
  });
1972
+ onBeforeUnmount(() => {
1973
+ const { scrollObserver } = internalData;
1974
+ if (scrollObserver) {
1975
+ scrollObserver.disconnect();
1976
+ }
1977
+ });
1740
1978
  onUnmounted(() => {
1741
1979
  globalEvents.off($xeSelect, 'mousedown');
1742
1980
  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}