vxe-pc-ui 4.19.8 → 4.20.0

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 (60) hide show
  1. package/dist/all.esm.js +318 -19
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/icon/style.css +1 -1
  5. package/es/list/src/list.js +317 -17
  6. package/es/list/style.css +26 -0
  7. package/es/list/style.min.css +1 -1
  8. package/es/scrollbar/style.css +1 -0
  9. package/es/style.css +1 -1
  10. package/es/style.min.css +1 -1
  11. package/es/ui/index.js +1 -1
  12. package/es/ui/src/log.js +1 -1
  13. package/es/ui/src/utils.js +9 -0
  14. package/es/vxe-list/style.css +26 -0
  15. package/es/vxe-list/style.min.css +1 -1
  16. package/es/vxe-scrollbar/style.css +1 -0
  17. package/lib/icon/style/style.css +1 -1
  18. package/lib/icon/style/style.min.css +1 -1
  19. package/lib/index.umd.js +336 -18
  20. package/lib/index.umd.min.js +1 -1
  21. package/lib/list/src/list.js +328 -19
  22. package/lib/list/src/list.min.js +1 -1
  23. package/lib/list/style/style.css +26 -0
  24. package/lib/list/style/style.min.css +1 -1
  25. package/lib/scrollbar/style/style.css +1 -0
  26. package/lib/style.css +1 -1
  27. package/lib/style.min.css +1 -1
  28. package/lib/ui/index.js +1 -1
  29. package/lib/ui/index.min.js +1 -1
  30. package/lib/ui/src/log.js +1 -1
  31. package/lib/ui/src/log.min.js +1 -1
  32. package/lib/ui/src/utils.js +10 -0
  33. package/lib/ui/src/utils.min.js +1 -1
  34. package/lib/vxe-list/style/style.css +26 -0
  35. package/lib/vxe-list/style/style.min.css +1 -1
  36. package/lib/vxe-scrollbar/style/style.css +1 -0
  37. package/package.json +1 -1
  38. package/packages/list/src/list.ts +345 -17
  39. package/packages/ui/src/utils.ts +10 -0
  40. package/styles/components/list.scss +51 -0
  41. package/styles/components/scrollbar.scss +3 -0
  42. package/types/components/card.d.ts +1 -1
  43. package/types/components/layout-aside.d.ts +1 -1
  44. package/types/components/layout-body.d.ts +1 -1
  45. package/types/components/list.d.ts +24 -2
  46. package/types/components/table-plugins/extend-cell-area.d.ts +1 -1
  47. package/types/components/table.d.ts +24 -0
  48. package/types/components/tabs.d.ts +1 -1
  49. /package/es/icon/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  50. /package/es/icon/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  51. /package/es/icon/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  52. /package/es/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  53. /package/es/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  54. /package/es/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  55. /package/lib/icon/style/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  56. /package/lib/icon/style/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  57. /package/lib/icon/style/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
  58. /package/lib/{iconfont.1791862962954.ttf → iconfont.1791880413927.ttf} +0 -0
  59. /package/lib/{iconfont.1791862962954.woff → iconfont.1791880413927.woff} +0 -0
  60. /package/lib/{iconfont.1791862962954.woff2 → iconfont.1791880413927.woff2} +0 -0
package/dist/all.esm.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as core from '@vxe-ui/core';
2
- import { VxeUI, setConfig as setConfig$1, setIcon, getConfig as getConfig$4, createEvent as createEvent$1, getIcon as getIcon$2, renderEmptyElement as renderEmptyElement$1, useSize, globalEvents as globalEvents$1, usePermission, permission, renderer, getI18n as getI18n$2, globalResize as globalResize$1, menus as menus$3, GLOBAL_EVENT_KEYS, getSlotVNs as getSlotVNs$1, commands, formats, getComponent, validators } from '@vxe-ui/core';
2
+ import { VxeUI, setConfig as setConfig$1, setIcon, getConfig as getConfig$4, createEvent as createEvent$1, getIcon as getIcon$2, renderEmptyElement as renderEmptyElement$1, useSize, globalEvents as globalEvents$1, usePermission, permission, renderer, getI18n as getI18n$2, domUtils as domUtils$1, globalResize as globalResize$1, menus as menus$3, GLOBAL_EVENT_KEYS, getSlotVNs as getSlotVNs$1, commands, formats, getComponent, validators } from '@vxe-ui/core';
3
3
  export * from '@vxe-ui/core';
4
4
  import { defineComponent, ref, reactive, h, createCommentVNode, createApp, inject, computed, watch, onMounted, onUnmounted, provide, nextTick, onBeforeUnmount, resolveComponent, Teleport, onActivated, onDeactivated, TransitionGroup } from 'vue';
5
5
  import XEUtils from 'xe-utils';
@@ -101,7 +101,7 @@ function checkDynamic() {
101
101
  }
102
102
 
103
103
  const { log } = VxeUI;
104
- const uiVersion = `ui v${"4.19.8"}`;
104
+ const uiVersion = `ui v${"4.20.0"}`;
105
105
  function createComponentLog(name) {
106
106
  const tableVersion = VxeUI.tableVersion ? `table v${VxeUI.tableVersion}` : '';
107
107
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -115,7 +115,7 @@ function createComponentLog(name) {
115
115
  const warnLog$j = log.create('warn', uiVersion);
116
116
  log.create('error', uiVersion);
117
117
 
118
- const version = "4.19.8";
118
+ const version = "4.20.0";
119
119
  VxeUI.uiVersion = version;
120
120
  VxeUI.dynamicApp = dynamicApp;
121
121
  function config(options) {
@@ -7787,6 +7787,9 @@ function createReactData$m() {
7787
7787
  updateCheckboxFlag: 1,
7788
7788
  isAllChecked: false,
7789
7789
  isAllIndeterminate: false,
7790
+ // 滚动条
7791
+ yThumbHeight: 0,
7792
+ xThumbWidth: 0,
7790
7793
  insertRowFlag: 1,
7791
7794
  removeRowFlag: 1,
7792
7795
  dragRow: null,
@@ -7796,13 +7799,18 @@ function createReactData$m() {
7796
7799
  }
7797
7800
  function createInternalData$l() {
7798
7801
  return {
7799
- resizeObserver: undefined,
7800
7802
  fullData: [],
7801
7803
  afterList: [],
7802
7804
  fullKeyMaps: {},
7803
7805
  rowMaps: {},
7804
- lastScrollLeft: 0,
7806
+ // 滚动条
7807
+ // resizeObserver: undefined,
7808
+ // isThumbDrag: false,
7809
+ thumbDragOffset: 0,
7810
+ yThumbTop: 0,
7811
+ xThumbLeft: 0,
7805
7812
  lastScrollTop: 0,
7813
+ lastScrollLeft: 0,
7806
7814
  scrollYStore: {
7807
7815
  startIndex: 0,
7808
7816
  endIndex: 0,
@@ -7856,7 +7864,12 @@ var VxeListComponent = defineVxeComponent({
7856
7864
  dragConfig: Object,
7857
7865
  menuConfig: Object,
7858
7866
  virtualYConfig: Object,
7859
- scrollY: Object
7867
+ scrollY: Object,
7868
+ useScrollbar: {
7869
+ type: Boolean,
7870
+ default: () => getConfig$4().list.useScrollbar
7871
+ },
7872
+ scrollbarConfig: Object
7860
7873
  },
7861
7874
  emits: [
7862
7875
  'update:checkRowKey',
@@ -7889,6 +7902,11 @@ var VxeListComponent = defineVxeComponent({
7889
7902
  const refFooterElem = ref();
7890
7903
  const refVirtualWrapper = ref();
7891
7904
  const refVirtualBody = ref();
7905
+ const refViewInnerElem = ref();
7906
+ const refTrackXElem = ref();
7907
+ const refTrackYElem = ref();
7908
+ const refThumbXElem = ref();
7909
+ const refThumbYElem = ref();
7892
7910
  const refDragRowLineElem = ref();
7893
7911
  const refDragTipElem = ref();
7894
7912
  const refMaps = {
@@ -7937,11 +7955,19 @@ var VxeListComponent = defineVxeComponent({
7937
7955
  });
7938
7956
  const computeWrapperStyles = computed(() => {
7939
7957
  const rowHeight = computeRowHeight.value;
7940
- const style = {};
7958
+ const scrollbarXOpts = computeScrollbarXOpts.value;
7959
+ const scrollbarYOpts = computeScrollbarYOpts.value;
7960
+ const stys = {};
7941
7961
  if (rowHeight) {
7942
- style['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
7962
+ stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
7943
7963
  }
7944
- return style;
7964
+ if (scrollbarYOpts.width) {
7965
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(scrollbarYOpts.width);
7966
+ }
7967
+ if (scrollbarXOpts.height) {
7968
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(scrollbarXOpts.height);
7969
+ }
7970
+ return stys;
7945
7971
  });
7946
7972
  const computeVirtualStyles = computed(() => {
7947
7973
  const { height, maxHeight } = props;
@@ -7956,6 +7982,47 @@ var VxeListComponent = defineVxeComponent({
7956
7982
  }
7957
7983
  return style;
7958
7984
  });
7985
+ const computeScrollbarOpts = computed(() => {
7986
+ return Object.assign({}, getConfig$4().list.scrollbarConfig, props.scrollbarConfig);
7987
+ });
7988
+ const computeScrollbarXOpts = computed(() => {
7989
+ const scrollbarOpts = computeScrollbarOpts.value;
7990
+ return Object.assign({}, getConfig$4().scrollbar.xConfig, scrollbarOpts.xConfig);
7991
+ });
7992
+ const computeScrollbarYOpts = computed(() => {
7993
+ const scrollbarOpts = computeScrollbarOpts.value;
7994
+ return Object.assign({}, getConfig$4().scrollbar.yConfig, scrollbarOpts.yConfig);
7995
+ });
7996
+ const computeScrollbarWrapperClss = computed(() => {
7997
+ const scrollbarOpts = computeScrollbarOpts.value;
7998
+ const { padding } = scrollbarOpts;
7999
+ const { yThumbHeight, xThumbWidth } = reactData;
8000
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8001
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8002
+ const scrollbarXToTop = computeScrollbarXToTop.value;
8003
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
8004
+ return domUtils$1.buildClass([
8005
+ 'vxe-scrollbar is--virtual',
8006
+ `ov-x--${scrollbarXOpts.visible || 'visible'}`,
8007
+ `ov-y--${scrollbarYOpts.visible || 'visible'}`,
8008
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
8009
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
8010
+ ], {
8011
+ 'is--padding': padding,
8012
+ 'ov-x--auto-hide': scrollbarXOpts.autoHide,
8013
+ 'ov-y--auto-hide': scrollbarYOpts.autoHide,
8014
+ 'overflow-y': yThumbHeight,
8015
+ 'overflow-x': xThumbWidth
8016
+ });
8017
+ });
8018
+ const computeScrollbarXToTop = computed(() => {
8019
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8020
+ return scrollbarXOpts.position === 'top';
8021
+ });
8022
+ const computeScrollbarYToLeft = computed(() => {
8023
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8024
+ return scrollbarYOpts.position === 'left';
8025
+ });
7959
8026
  const dispatchEvent = (type, params, evnt) => {
7960
8027
  emit(type, createEvent$1(evnt, { $list: $xeList }, params));
7961
8028
  };
@@ -8112,6 +8179,7 @@ var VxeListComponent = defineVxeComponent({
8112
8179
  */
8113
8180
  const refreshScroll = () => {
8114
8181
  const { lastScrollLeft, lastScrollTop } = internalData;
8182
+ updateScrollbar();
8115
8183
  return clearScroll().then(() => {
8116
8184
  if (lastScrollLeft || lastScrollTop) {
8117
8185
  internalData.lastScrollLeft = 0;
@@ -8120,6 +8188,10 @@ var VxeListComponent = defineVxeComponent({
8120
8188
  }
8121
8189
  });
8122
8190
  };
8191
+ const updateScrollbar = () => {
8192
+ updateThumbSize();
8193
+ updateThumbOffset();
8194
+ };
8123
8195
  /**
8124
8196
  * 重新计算列表
8125
8197
  */
@@ -8137,6 +8209,7 @@ var VxeListComponent = defineVxeComponent({
8137
8209
  parentHeight = parentEl.clientHeight - Math.ceil(XEUtils.toNumber(parentStyle.paddingLeft) + XEUtils.toNumber(parentStyle.paddingRight));
8138
8210
  }
8139
8211
  reactData.parentHeight = parentHeight;
8212
+ updateScrollbar();
8140
8213
  updateHeight();
8141
8214
  if (el.clientWidth && el.clientHeight) {
8142
8215
  return computeScrollLoad();
@@ -8166,6 +8239,7 @@ var VxeListComponent = defineVxeComponent({
8166
8239
  const scrollLeft = scrollBodyElem.scrollLeft;
8167
8240
  const isX = scrollLeft !== internalData.lastScrollLeft;
8168
8241
  const isY = scrollTop !== internalData.lastScrollTop;
8242
+ updateThumbOffset();
8169
8243
  internalData.lastScrollTop = scrollTop;
8170
8244
  internalData.lastScrollLeft = scrollLeft;
8171
8245
  if (reactData.scrollYLoad) {
@@ -9462,6 +9536,162 @@ var VxeListComponent = defineVxeComponent({
9462
9536
  hideDropTip();
9463
9537
  }
9464
9538
  };
9539
+ const updateThumbSize = () => {
9540
+ const viewEl = refVirtualWrapper.value;
9541
+ if (!viewEl) {
9542
+ return;
9543
+ }
9544
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
9545
+ return;
9546
+ }
9547
+ const trackXEl = refTrackXElem.value;
9548
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
9549
+ const thumbXElem = refThumbXElem.value;
9550
+ if (thumbXElem) {
9551
+ thumbXElem.style.width = xThumbWidth + 'px';
9552
+ }
9553
+ reactData.xThumbWidth = xThumbWidth;
9554
+ const trackYEl = refTrackYElem.value;
9555
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
9556
+ const thumbYElem = refThumbYElem.value;
9557
+ if (thumbYElem) {
9558
+ thumbYElem.style.height = yThumbHeight + 'px';
9559
+ }
9560
+ reactData.yThumbHeight = yThumbHeight;
9561
+ };
9562
+ const updateThumbOffset = () => {
9563
+ const viewEl = refVirtualWrapper.value;
9564
+ if (!viewEl) {
9565
+ return;
9566
+ }
9567
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
9568
+ return;
9569
+ }
9570
+ const { xThumbWidth, yThumbHeight } = reactData;
9571
+ const trackXEl = refTrackXElem.value;
9572
+ const thumbXElem = refThumbXElem.value;
9573
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
9574
+ internalData.xThumbLeft = xThumbLeft;
9575
+ if (thumbXElem && xThumbWidth) {
9576
+ thumbXElem.style.width = xThumbWidth + 'px';
9577
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
9578
+ }
9579
+ const trackYEl = refTrackYElem.value;
9580
+ const thumbYElem = refThumbYElem.value;
9581
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
9582
+ internalData.yThumbTop = yThumbTop;
9583
+ if (thumbYElem && yThumbHeight) {
9584
+ thumbYElem.style.height = yThumbHeight + 'px';
9585
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
9586
+ }
9587
+ };
9588
+ const clickTrackXEvent = (evnt) => {
9589
+ const trackEl = evnt.currentTarget;
9590
+ if (trackEl !== evnt.target) {
9591
+ return;
9592
+ }
9593
+ const viewEl = refVirtualWrapper.value;
9594
+ if (!viewEl) {
9595
+ return;
9596
+ }
9597
+ const { xThumbWidth } = reactData;
9598
+ const trackRect = trackEl.getBoundingClientRect();
9599
+ viewEl.scrollTo({
9600
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
9601
+ behavior: 'auto'
9602
+ });
9603
+ };
9604
+ const clickTrackYEvent = (evnt) => {
9605
+ const trackEl = evnt.currentTarget;
9606
+ if (trackEl !== evnt.target) {
9607
+ return;
9608
+ }
9609
+ const viewEl = refVirtualWrapper.value;
9610
+ if (!viewEl) {
9611
+ return;
9612
+ }
9613
+ const { yThumbHeight } = reactData;
9614
+ const trackRect = trackEl.getBoundingClientRect();
9615
+ viewEl.scrollTo({
9616
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
9617
+ behavior: 'auto'
9618
+ });
9619
+ };
9620
+ const pointerdownThumbXEvent = (evnt) => {
9621
+ const thumbEl = evnt.currentTarget;
9622
+ internalData.isThumbDrag = true;
9623
+ thumbEl.setPointerCapture(evnt.pointerId);
9624
+ const viewEl = refVirtualWrapper.value;
9625
+ if (!viewEl) {
9626
+ return;
9627
+ }
9628
+ const { xThumbWidth } = reactData;
9629
+ const trackEl = thumbEl.parentElement;
9630
+ const trackRect = trackEl.getBoundingClientRect();
9631
+ const pointerPosition = evnt.clientX - trackRect.left;
9632
+ // 记录 thumb 的偏移
9633
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
9634
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
9635
+ };
9636
+ const pointermoveThumbXEvent = (evnt) => {
9637
+ const thumbEl = evnt.currentTarget;
9638
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
9639
+ return;
9640
+ }
9641
+ const { isThumbDrag, thumbDragOffset } = internalData;
9642
+ if (isThumbDrag) {
9643
+ const viewEl = refVirtualWrapper.value;
9644
+ if (!viewEl) {
9645
+ return;
9646
+ }
9647
+ const { xThumbWidth } = reactData;
9648
+ const thumbEl = evnt.currentTarget;
9649
+ const trackEl = thumbEl.parentElement;
9650
+ const trackRect = trackEl.getBoundingClientRect();
9651
+ // 更新偏移
9652
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
9653
+ }
9654
+ };
9655
+ const cleatPointerThumbEvent = (evnt) => {
9656
+ const thumbEl = evnt.currentTarget;
9657
+ thumbEl.releasePointerCapture(evnt.pointerId);
9658
+ internalData.isThumbDrag = false;
9659
+ };
9660
+ const pointerdownThumbYEvent = (evnt) => {
9661
+ const thumbEl = evnt.currentTarget;
9662
+ internalData.isThumbDrag = true;
9663
+ thumbEl.setPointerCapture(evnt.pointerId);
9664
+ const viewEl = refVirtualWrapper.value;
9665
+ if (!viewEl) {
9666
+ return;
9667
+ }
9668
+ const { yThumbHeight } = reactData;
9669
+ const trackEl = thumbEl.parentElement;
9670
+ const trackRect = trackEl.getBoundingClientRect();
9671
+ const pointerPosition = evnt.clientY - trackRect.top;
9672
+ // 记录 thumb 的偏移
9673
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
9674
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
9675
+ };
9676
+ const pointermoveThumbYEvent = (evnt) => {
9677
+ const thumbEl = evnt.currentTarget;
9678
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
9679
+ return;
9680
+ }
9681
+ const { isThumbDrag, thumbDragOffset } = internalData;
9682
+ if (isThumbDrag) {
9683
+ const viewEl = refVirtualWrapper.value;
9684
+ if (!viewEl) {
9685
+ return;
9686
+ }
9687
+ const { yThumbHeight } = reactData;
9688
+ const thumbEl = evnt.currentTarget;
9689
+ const trackEl = thumbEl.parentElement;
9690
+ const trackRect = trackEl.getBoundingClientRect();
9691
+ // 更新偏移
9692
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
9693
+ }
9694
+ };
9465
9695
  Object.assign($xeList, listMethods, listPrivateMethods);
9466
9696
  const renderDragTip = () => {
9467
9697
  const { dragRow, dragTipText } = reactData;
@@ -9658,7 +9888,7 @@ var VxeListComponent = defineVxeComponent({
9658
9888
  }], rowid: hasKey && keyField ? rowid : undefined }, rowOns), ctVNs);
9659
9889
  };
9660
9890
  const renderVN = () => {
9661
- const { showCheckbox, className, loading } = props;
9891
+ const { showCheckbox, className, loading, useScrollbar } = props;
9662
9892
  const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
9663
9893
  const defaultSlot = slots.default;
9664
9894
  const headerSlot = slots.header;
@@ -9674,6 +9904,9 @@ var VxeListComponent = defineVxeComponent({
9674
9904
  const rowOpts = computeRowOpts.value;
9675
9905
  const { isHover, padding } = rowOpts;
9676
9906
  const isDrag = computeIsDrag.value;
9907
+ const scrollbarXOpts = computeScrollbarXOpts.value;
9908
+ const scrollbarYOpts = computeScrollbarYOpts.value;
9909
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
9677
9910
  const showDefChekboxHead = showCheckbox && showHeader !== false;
9678
9911
  const leOns = {};
9679
9912
  if (isCrossListDrag && !rowList.length) {
@@ -9681,6 +9914,9 @@ var VxeListComponent = defineVxeComponent({
9681
9914
  }
9682
9915
  return h('div', Object.assign({ ref: refElem, class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
9683
9916
  [`size--${vSize}`]: vSize,
9917
+ 'is--virtual-scrollbar': useScrollbar,
9918
+ 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
9919
+ 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
9684
9920
  'is--drag': isDrag,
9685
9921
  'is--loading': loading
9686
9922
  }], style: wrapperStyles }, leOns), [
@@ -9740,7 +9976,15 @@ var VxeListComponent = defineVxeComponent({
9740
9976
  style: {
9741
9977
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
9742
9978
  }
9743
- }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
9979
+ }, useScrollbar
9980
+ ? (defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
9981
+ : [
9982
+ h('div', {
9983
+ key: 'vi',
9984
+ ref: refViewInnerElem,
9985
+ class: 'vxe-scrollbar--view-inner'
9986
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
9987
+ ])
9744
9988
  ]),
9745
9989
  footerSlot
9746
9990
  ? h('div', {
@@ -9748,6 +9992,49 @@ var VxeListComponent = defineVxeComponent({
9748
9992
  class: 'vxe-list--footer-wrapper'
9749
9993
  }, footerSlot({ items: rowList, $list: $xeList }))
9750
9994
  : renderEmptyElement$1($xeList),
9995
+ /**
9996
+ * 滚动条
9997
+ */
9998
+ useScrollbar
9999
+ ? h('div', {
10000
+ class: scrollbarWrapperClss
10001
+ }, [
10002
+ scrollbarXOpts.visible === 'hidden'
10003
+ ? renderEmptyElement$1($xeList)
10004
+ : h('div', {
10005
+ ref: refTrackXElem,
10006
+ class: 'vxe-scrollbar--track-x',
10007
+ onClick: clickTrackXEvent
10008
+ }, [
10009
+ h('div', {
10010
+ ref: refThumbXElem,
10011
+ class: 'vxe-scrollbar--thumb-x',
10012
+ onPointerdown: pointerdownThumbXEvent,
10013
+ onPointermove: pointermoveThumbXEvent,
10014
+ onPointerup: cleatPointerThumbEvent,
10015
+ onPointercancel: cleatPointerThumbEvent,
10016
+ onLostpointercapture: cleatPointerThumbEvent
10017
+ })
10018
+ ]),
10019
+ scrollbarYOpts.visible === 'hidden'
10020
+ ? renderEmptyElement$1($xeList)
10021
+ : h('div', {
10022
+ ref: refTrackYElem,
10023
+ class: 'vxe-scrollbar--track-y',
10024
+ onClick: clickTrackYEvent
10025
+ }, [
10026
+ h('div', {
10027
+ ref: refThumbYElem,
10028
+ class: 'vxe-scrollbar--thumb-y',
10029
+ onPointerdown: pointerdownThumbYEvent,
10030
+ onPointermove: pointermoveThumbYEvent,
10031
+ onPointerup: cleatPointerThumbEvent,
10032
+ onPointercancel: cleatPointerThumbEvent,
10033
+ onLostpointercapture: cleatPointerThumbEvent
10034
+ })
10035
+ ])
10036
+ ])
10037
+ : renderEmptyElement$1($xeList),
9751
10038
  /**
9752
10039
  * 拖拽提示
9753
10040
  */
@@ -9803,13 +10090,15 @@ var VxeListComponent = defineVxeComponent({
9803
10090
  updateCheckboxModeValue();
9804
10091
  });
9805
10092
  onActivated(() => {
9806
- recalculate().then(() => refreshScroll());
10093
+ recalculate().then(() => {
10094
+ refreshScroll();
10095
+ });
9807
10096
  });
9808
10097
  nextTick(() => {
9809
10098
  loadData(props.data || []);
9810
10099
  });
9811
10100
  onMounted(() => {
9812
- const { showSeq, showRadio, showCheckbox } = props;
10101
+ const { showSeq, showRadio, showCheckbox, autoResize, useScrollbar } = props;
9813
10102
  const rowOpts = computeRowOpts.value;
9814
10103
  const { useKey } = rowOpts;
9815
10104
  const isDrag = computeIsDrag.value;
@@ -9831,17 +10120,27 @@ var VxeListComponent = defineVxeComponent({
9831
10120
  if (useKey && !keyField) {
9832
10121
  errLog$j('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
9833
10122
  }
9834
- if (props.autoResize) {
10123
+ if (useScrollbar || autoResize) {
9835
10124
  const el = refElem.value;
9836
- const resizeObserver = globalResize$1.create(() => recalculate());
10125
+ const viewInnerEl = refViewInnerElem.value;
10126
+ const resizeObserver = globalResize$1.create(() => {
10127
+ reFlag.value++;
10128
+ });
9837
10129
  resizeObserver.observe(el);
9838
- if (el) {
9839
- resizeObserver.observe(el.parentElement);
10130
+ if (autoResize) {
10131
+ if (el) {
10132
+ resizeObserver.observe(el.parentElement);
10133
+ }
10134
+ }
10135
+ if (viewInnerEl) {
10136
+ resizeObserver.observe(viewInnerEl);
9840
10137
  }
9841
10138
  internalData.resizeObserver = resizeObserver;
9842
10139
  }
9843
- recalculate();
9844
- globalEvents$1.on($xeList, 'resize', recalculate);
10140
+ reFlag.value++;
10141
+ globalEvents$1.on($xeList, 'resize', () => {
10142
+ reFlag.value++;
10143
+ });
9845
10144
  });
9846
10145
  onBeforeUnmount(() => {
9847
10146
  const { resizeObserver } = internalData;