vxe-pc-ui 4.20.0 → 4.20.1

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 (94) hide show
  1. package/dist/all.esm.js +594 -130
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/card/src/card.js +17 -3
  5. package/es/icon/style.css +1 -1
  6. package/es/language/fr-FR.js +29 -29
  7. package/es/layout-aside/src/layout-aside.js +8 -5
  8. package/es/layout-body/src/layout-body.js +19 -11
  9. package/es/list/src/list.js +79 -36
  10. package/es/list/style.css +25 -8
  11. package/es/list/style.min.css +1 -1
  12. package/es/scrollbar/src/scrollbar.js +59 -17
  13. package/es/style.css +1 -1
  14. package/es/style.min.css +1 -1
  15. package/es/tabs/src/tabs.js +19 -4
  16. package/es/tree/src/tree.js +393 -55
  17. package/es/tree/style.css +43 -0
  18. package/es/tree/style.min.css +1 -1
  19. package/es/ui/index.js +1 -1
  20. package/es/ui/src/log.js +1 -1
  21. package/es/ui/src/utils.js +3 -0
  22. package/es/vxe-list/style.css +25 -8
  23. package/es/vxe-list/style.min.css +1 -1
  24. package/es/vxe-tree/style.css +43 -0
  25. package/es/vxe-tree/style.min.css +1 -1
  26. package/lib/card/src/card.js +17 -3
  27. package/lib/card/src/card.min.js +1 -1
  28. package/lib/icon/style/style.css +1 -1
  29. package/lib/icon/style/style.min.css +1 -1
  30. package/lib/index.umd.js +610 -140
  31. package/lib/index.umd.min.js +1 -1
  32. package/lib/language/fr-FR.js +29 -29
  33. package/lib/language/fr-FR.min.js +1 -1
  34. package/lib/language/fr-FR.umd.js +29 -29
  35. package/lib/layout-aside/src/layout-aside.js +7 -7
  36. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  37. package/lib/layout-body/src/layout-body.js +27 -21
  38. package/lib/layout-body/src/layout-body.min.js +1 -1
  39. package/lib/list/src/list.js +70 -32
  40. package/lib/list/src/list.min.js +1 -1
  41. package/lib/list/style/style.css +25 -8
  42. package/lib/list/style/style.min.css +1 -1
  43. package/lib/scrollbar/src/scrollbar.js +67 -15
  44. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  45. package/lib/style.css +1 -1
  46. package/lib/style.min.css +1 -1
  47. package/lib/tabs/src/tabs.js +22 -10
  48. package/lib/tabs/src/tabs.min.js +1 -1
  49. package/lib/tree/src/tree.js +397 -53
  50. package/lib/tree/src/tree.min.js +1 -1
  51. package/lib/tree/style/style.css +43 -0
  52. package/lib/tree/style/style.min.css +1 -1
  53. package/lib/ui/index.js +1 -1
  54. package/lib/ui/index.min.js +1 -1
  55. package/lib/ui/src/log.js +1 -1
  56. package/lib/ui/src/log.min.js +1 -1
  57. package/lib/ui/src/utils.js +4 -0
  58. package/lib/ui/src/utils.min.js +1 -1
  59. package/lib/vxe-list/style/style.css +25 -8
  60. package/lib/vxe-list/style/style.min.css +1 -1
  61. package/lib/vxe-tree/style/style.css +43 -0
  62. package/lib/vxe-tree/style/style.min.css +1 -1
  63. package/package.json +1 -1
  64. package/packages/card/src/card.ts +18 -3
  65. package/packages/language/fr-FR.ts +903 -903
  66. package/packages/layout-aside/src/layout-aside.ts +8 -5
  67. package/packages/layout-body/src/layout-body.ts +23 -14
  68. package/packages/list/src/list.ts +87 -42
  69. package/packages/scrollbar/src/scrollbar.ts +63 -16
  70. package/packages/tabs/src/tabs.ts +19 -5
  71. package/packages/tree/src/tree.ts +432 -64
  72. package/packages/ui/src/utils.ts +4 -0
  73. package/styles/components/list.scss +35 -10
  74. package/styles/components/tree.scss +76 -0
  75. package/types/components/card.d.ts +10 -1
  76. package/types/components/layout-aside.d.ts +10 -1
  77. package/types/components/layout-body.d.ts +10 -1
  78. package/types/components/list.d.ts +10 -1
  79. package/types/components/scrollbar.d.ts +17 -2
  80. package/types/components/table.d.ts +47 -4
  81. package/types/components/tabs.d.ts +10 -1
  82. package/types/components/tree.d.ts +33 -2
  83. /package/es/icon/{iconfont.1791880413927.ttf → iconfont.1791950625324.ttf} +0 -0
  84. /package/es/icon/{iconfont.1791880413927.woff → iconfont.1791950625324.woff} +0 -0
  85. /package/es/icon/{iconfont.1791880413927.woff2 → iconfont.1791950625324.woff2} +0 -0
  86. /package/es/{iconfont.1791880413927.ttf → iconfont.1791950625324.ttf} +0 -0
  87. /package/es/{iconfont.1791880413927.woff → iconfont.1791950625324.woff} +0 -0
  88. /package/es/{iconfont.1791880413927.woff2 → iconfont.1791950625324.woff2} +0 -0
  89. /package/lib/icon/style/{iconfont.1791880413927.ttf → iconfont.1791950625324.ttf} +0 -0
  90. /package/lib/icon/style/{iconfont.1791880413927.woff → iconfont.1791950625324.woff} +0 -0
  91. /package/lib/icon/style/{iconfont.1791880413927.woff2 → iconfont.1791950625324.woff2} +0 -0
  92. /package/lib/{iconfont.1791880413927.ttf → iconfont.1791950625324.ttf} +0 -0
  93. /package/lib/{iconfont.1791880413927.woff → iconfont.1791950625324.woff} +0 -0
  94. /package/lib/{iconfont.1791880413927.woff2 → iconfont.1791950625324.woff2} +0 -0
package/dist/all.esm.js CHANGED
@@ -101,7 +101,7 @@ function checkDynamic() {
101
101
  }
102
102
 
103
103
  const { log } = VxeUI;
104
- const uiVersion = `ui v${"4.20.0"}`;
104
+ const uiVersion = `ui v${"4.20.1"}`;
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.20.0";
118
+ const version = "4.20.1";
119
119
  VxeUI.uiVersion = version;
120
120
  VxeUI.dynamicApp = dynamicApp;
121
121
  function config(options) {
@@ -2694,6 +2694,9 @@ function enModelValue(nodeid) {
2694
2694
  function deModelValue(nodeid) {
2695
2695
  return nodeid ? decodeURIComponent(`${nodeid}`) : nodeid;
2696
2696
  }
2697
+ function getDefaultConfig(val1, def1) {
2698
+ return XEUtils.eqNull(val1) ? def1 : val1;
2699
+ }
2697
2700
 
2698
2701
  function createReactData$p() {
2699
2702
  return {
@@ -6479,6 +6482,7 @@ var VxeScrollbarComponent = defineVxeComponent({
6479
6482
  name: 'VxeScrollbar',
6480
6483
  props: {
6481
6484
  id: [String, Number],
6485
+ viewId: [String, Number],
6482
6486
  width: [String, Number],
6483
6487
  height: [String, Number],
6484
6488
  minWidth: [String, Number],
@@ -6494,6 +6498,14 @@ var VxeScrollbarComponent = defineVxeComponent({
6494
6498
  type: Boolean,
6495
6499
  default: () => getConfig$2().scrollbar.padding
6496
6500
  },
6501
+ autoHide: {
6502
+ type: Boolean,
6503
+ default: () => getConfig$2().scrollbar.autoHide
6504
+ },
6505
+ visible: {
6506
+ type: Boolean,
6507
+ default: () => getConfig$2().scrollbar.visible
6508
+ },
6497
6509
  xConfig: Object,
6498
6510
  yConfig: Object,
6499
6511
  className: {
@@ -6538,6 +6550,8 @@ var VxeScrollbarComponent = defineVxeComponent({
6538
6550
  const { width, height, minWidth, minHeight, maxWidth, maxHeight } = props;
6539
6551
  const xOpts = computeXOpts.value;
6540
6552
  const yOpts = computeYOpts.value;
6553
+ const barWidth = yOpts.width;
6554
+ const barHeight = xOpts.height;
6541
6555
  const stys = {};
6542
6556
  if (width) {
6543
6557
  stys.width = toCssUnit(width);
@@ -6557,33 +6571,53 @@ var VxeScrollbarComponent = defineVxeComponent({
6557
6571
  if (maxHeight) {
6558
6572
  stys.maxHeight = toCssUnit(maxHeight);
6559
6573
  }
6560
- if (yOpts.width) {
6561
- stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(yOpts.width);
6562
- }
6563
- if (xOpts.height) {
6564
- stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(xOpts.height);
6574
+ if (barWidth || barHeight) {
6575
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
6576
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
6565
6577
  }
6566
6578
  return stys;
6567
6579
  });
6580
+ const computeXVisible = computed(() => {
6581
+ const { visible } = props;
6582
+ const xOpts = computeXOpts.value;
6583
+ return getDefaultConfig(xOpts.visible, visible);
6584
+ });
6585
+ const computeYVisible = computed(() => {
6586
+ const { visible } = props;
6587
+ const yOpts = computeYOpts.value;
6588
+ return getDefaultConfig(yOpts.visible, visible);
6589
+ });
6590
+ const computeXAutoHide = computed(() => {
6591
+ const { autoHide } = props;
6592
+ const xOpts = computeXOpts.value;
6593
+ return getDefaultConfig(xOpts.autoHide, autoHide);
6594
+ });
6595
+ const computeYAutoHide = computed(() => {
6596
+ const { autoHide } = props;
6597
+ const yOpts = computeYOpts.value;
6598
+ return getDefaultConfig(yOpts.autoHide, autoHide);
6599
+ });
6568
6600
  const computeWrapperClss = computed(() => {
6569
6601
  const { native, className, padding } = props;
6570
6602
  const { yThumbHeight, xThumbWidth } = reactData;
6571
- const xOpts = computeXOpts.value;
6572
- const yOpts = computeYOpts.value;
6573
6603
  const xToTop = computeXToTop.value;
6574
6604
  const yToLeft = computeYToLeft.value;
6605
+ const xVisible = computeXVisible.value;
6606
+ const yVisible = computeYVisible.value;
6607
+ const xAutoHide = computeXAutoHide.value;
6608
+ const yAutoHide = computeYAutoHide.value;
6575
6609
  return domUtils.buildClass([
6576
6610
  'vxe-scrollbar',
6577
- `ov-x--${xOpts.visible || 'visible'}`,
6578
- `ov-y--${yOpts.visible || 'visible'}`,
6611
+ `ov-x--${xVisible === false ? 'hidden' : 'visible'}`,
6612
+ `ov-y--${yVisible === false ? 'hidden' : 'visible'}`,
6579
6613
  `sx-pos--${xToTop ? 'top' : 'bottom'}`,
6580
6614
  `sy-pos--${yToLeft ? 'left' : 'right'}`,
6581
6615
  native ? 'is--native' : 'is--virtual',
6582
6616
  className
6583
6617
  ], {
6584
6618
  'is--padding': padding,
6585
- 'ov-x--auto-hide': xOpts.autoHide,
6586
- 'ov-y--auto-hide': yOpts.autoHide,
6619
+ 'ov-x--auto-hide': xAutoHide,
6620
+ 'ov-y--auto-hide': yAutoHide,
6587
6621
  'overflow-y': yThumbHeight,
6588
6622
  'overflow-x': xThumbWidth
6589
6623
  });
@@ -6923,13 +6957,13 @@ var VxeScrollbarComponent = defineVxeComponent({
6923
6957
  const scrollbarPrivateMethods = {};
6924
6958
  Object.assign($xeScrollbar, scrollbarMethods, scrollbarPrivateMethods);
6925
6959
  const renderVN = () => {
6926
- const { id, native, loading, viewAttrs } = props;
6960
+ const { id, native, loading, viewId, viewAttrs } = props;
6927
6961
  const wrapperStyle = computeWrapperStyle.value;
6928
6962
  const wrapperClss = computeWrapperClss.value;
6929
6963
  const viewClss = computeViewClss.value;
6930
6964
  const viewInnerClss = computeViewInnerClss.value;
6931
- const xOpts = computeXOpts.value;
6932
- const yOpts = computeYOpts.value;
6965
+ const xVisible = computeXVisible.value;
6966
+ const yVisible = computeYVisible.value;
6933
6967
  const defaultSlot = slots.default;
6934
6968
  return h('div', {
6935
6969
  ref: refElem,
@@ -6937,14 +6971,14 @@ var VxeScrollbarComponent = defineVxeComponent({
6937
6971
  class: wrapperClss,
6938
6972
  style: wrapperStyle
6939
6973
  }, [
6940
- h('div', Object.assign({ ref: refViewElem, class: viewClss, onScroll: scrollEvent }, viewAttrs), [
6974
+ h('div', Object.assign({ ref: refViewElem, class: viewClss, onScroll: scrollEvent, id: viewId || null }, viewAttrs), [
6941
6975
  h('div', {
6942
6976
  key: 'vi',
6943
6977
  ref: refViewInnerElem,
6944
6978
  class: viewInnerClss
6945
6979
  }, defaultSlot ? defaultSlot({}) : [])
6946
6980
  ]),
6947
- native || xOpts.visible === 'hidden'
6981
+ native || xVisible === false
6948
6982
  ? renderEmptyElement($xeScrollbar)
6949
6983
  : h('div', {
6950
6984
  ref: refTrackXElem,
@@ -6961,7 +6995,7 @@ var VxeScrollbarComponent = defineVxeComponent({
6961
6995
  onLostpointercapture: cleatPointerThumbEvent
6962
6996
  })
6963
6997
  ]),
6964
- native || yOpts.visible === 'hidden'
6998
+ native || yVisible === false
6965
6999
  ? renderEmptyElement($xeScrollbar)
6966
7000
  : h('div', {
6967
7001
  ref: refTrackYElem,
@@ -7009,6 +7043,16 @@ var VxeScrollbarComponent = defineVxeComponent({
7009
7043
  watch(() => props.syncResize, () => {
7010
7044
  reFlag.value++;
7011
7045
  });
7046
+ watch(computeXVisible, () => {
7047
+ nextTick(() => {
7048
+ reFlag.value++;
7049
+ });
7050
+ });
7051
+ watch(computeYVisible, () => {
7052
+ nextTick(() => {
7053
+ reFlag.value++;
7054
+ });
7055
+ });
7012
7056
  watch(reFlag, () => {
7013
7057
  $xeScrollbar.recalculate().then(() => {
7014
7058
  $xeScrollbar.recalculate();
@@ -7118,6 +7162,19 @@ var VxeCardComponent = defineVxeComponent({
7118
7162
  const computeScrollbarOpts = computed(() => {
7119
7163
  return Object.assign({}, getConfig$4().card.scrollbarConfig, props.scrollbarConfig);
7120
7164
  });
7165
+ const computeScrollbarProps = computed(() => {
7166
+ const scrollbarOpts = computeScrollbarOpts.value;
7167
+ return {
7168
+ width: scrollbarOpts.width,
7169
+ height: scrollbarOpts.height,
7170
+ autoHide: scrollbarOpts.autoHide,
7171
+ visible: scrollbarOpts.visible,
7172
+ xConfig: scrollbarOpts.xConfig,
7173
+ yConfig: scrollbarOpts.yConfig,
7174
+ className: scrollbarOpts.className,
7175
+ viewAttrs: scrollbarOpts.viewAttrs
7176
+ };
7177
+ });
7121
7178
  const computeMaps = {
7122
7179
  computeSize
7123
7180
  };
@@ -7149,6 +7206,7 @@ var VxeCardComponent = defineVxeComponent({
7149
7206
  const vSize = computeSize.value;
7150
7207
  const cardStyle = computeCardStyle.value;
7151
7208
  const scrollbarOpts = computeScrollbarOpts.value;
7209
+ const scrollbarProps = computeScrollbarProps.value;
7152
7210
  const { viewClassName, viewInnerClassName } = scrollbarOpts;
7153
7211
  return h('div', {
7154
7212
  ref: refElem,
@@ -7183,7 +7241,7 @@ var VxeCardComponent = defineVxeComponent({
7183
7241
  }, [
7184
7242
  leftSlot
7185
7243
  ? (useScrollbar
7186
- ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-left' }, scrollbarOpts), { viewClassName: 'vxe-card--body-scrollbar-left-view', viewInnerClassName: 'vxe-card--body-scrollbar-left-inner' }), {
7244
+ ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-left' }, scrollbarProps), { viewClassName: 'vxe-card--body-scrollbar-left-view', viewInnerClassName: 'vxe-card--body-scrollbar-left-inner' }), {
7187
7245
  default: () => getSlotVNs(leftSlot({}))
7188
7246
  })
7189
7247
  : h('div', {
@@ -7191,7 +7249,7 @@ var VxeCardComponent = defineVxeComponent({
7191
7249
  }, getSlotVNs(leftSlot({}))))
7192
7250
  : renderEmptyElement$1($xeCard),
7193
7251
  useScrollbar
7194
- ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-content' }, scrollbarOpts), { viewClassName: 'vxe-card--body-scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''), viewInnerClassName: 'vxe-card--body-scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '') }), {
7252
+ ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-content' }, scrollbarProps), { viewClassName: 'vxe-card--body-scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''), viewInnerClassName: 'vxe-card--body-scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '') }), {
7195
7253
  default: () => defaultSlot ? getSlotVNs(defaultSlot({})) : []
7196
7254
  })
7197
7255
  : h('div', {
@@ -7199,7 +7257,7 @@ var VxeCardComponent = defineVxeComponent({
7199
7257
  }, defaultSlot ? getSlotVNs(defaultSlot({})) : []),
7200
7258
  rightSlot
7201
7259
  ? (useScrollbar
7202
- ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-right' }, scrollbarOpts), { viewClassName: 'vxe-card--body-scrollbar-right-view', viewInnerClassName: 'vxe-card--body-scrollbar-right-inner' }), {
7260
+ ? h(VxeScrollbar, Object.assign(Object.assign({ class: 'vxe-card--body-scrollbar-right' }, scrollbarProps), { viewClassName: 'vxe-card--body-scrollbar-right-view', viewInnerClassName: 'vxe-card--body-scrollbar-right-inner' }), {
7203
7261
  default: () => getSlotVNs(rightSlot({}))
7204
7262
  })
7205
7263
  : h('div', {
@@ -7902,7 +7960,6 @@ var VxeListComponent = defineVxeComponent({
7902
7960
  const refFooterElem = ref();
7903
7961
  const refVirtualWrapper = ref();
7904
7962
  const refVirtualBody = ref();
7905
- const refViewInnerElem = ref();
7906
7963
  const refTrackXElem = ref();
7907
7964
  const refTrackYElem = ref();
7908
7965
  const refThumbXElem = ref();
@@ -7955,17 +8012,18 @@ var VxeListComponent = defineVxeComponent({
7955
8012
  });
7956
8013
  const computeWrapperStyles = computed(() => {
7957
8014
  const rowHeight = computeRowHeight.value;
8015
+ const scrollbarOpts = computeScrollbarOpts.value;
7958
8016
  const scrollbarXOpts = computeScrollbarXOpts.value;
7959
8017
  const scrollbarYOpts = computeScrollbarYOpts.value;
8018
+ const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig$4().scrollbar.width);
8019
+ const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig$4().scrollbar.height);
7960
8020
  const stys = {};
7961
8021
  if (rowHeight) {
7962
8022
  stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
7963
8023
  }
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);
8024
+ if (barWidth || barHeight) {
8025
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
8026
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
7969
8027
  }
7970
8028
  return stys;
7971
8029
  });
@@ -7993,24 +8051,46 @@ var VxeListComponent = defineVxeComponent({
7993
8051
  const scrollbarOpts = computeScrollbarOpts.value;
7994
8052
  return Object.assign({}, getConfig$4().scrollbar.yConfig, scrollbarOpts.yConfig);
7995
8053
  });
8054
+ const computeScrollXVisible = computed(() => {
8055
+ const scrollbarOpts = computeScrollbarOpts.value;
8056
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8057
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
8058
+ });
8059
+ const computeScrollYVisible = computed(() => {
8060
+ const scrollbarOpts = computeScrollbarOpts.value;
8061
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8062
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
8063
+ });
8064
+ const computeScrollXAutoHide = computed(() => {
8065
+ const scrollbarOpts = computeScrollbarOpts.value;
8066
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8067
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig$4().scrollbar.autoHide);
8068
+ });
8069
+ const computeScrollYAutoHide = computed(() => {
8070
+ const scrollbarOpts = computeScrollbarOpts.value;
8071
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8072
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig$4().scrollbar.autoHide);
8073
+ });
7996
8074
  const computeScrollbarWrapperClss = computed(() => {
7997
8075
  const scrollbarOpts = computeScrollbarOpts.value;
7998
8076
  const { padding } = scrollbarOpts;
7999
8077
  const { yThumbHeight, xThumbWidth } = reactData;
8000
- const scrollbarXOpts = computeScrollbarXOpts.value;
8001
- const scrollbarYOpts = computeScrollbarYOpts.value;
8002
8078
  const scrollbarXToTop = computeScrollbarXToTop.value;
8003
8079
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
8080
+ const scrollXVisible = computeScrollXVisible.value;
8081
+ const scrollYVisible = computeScrollYVisible.value;
8082
+ const scrollXAutoHide = computeScrollXAutoHide.value;
8083
+ const scrollYAutoHide = computeScrollYAutoHide.value;
8004
8084
  return domUtils$1.buildClass([
8005
8085
  'vxe-scrollbar is--virtual',
8006
- `ov-x--${scrollbarXOpts.visible || 'visible'}`,
8007
- `ov-y--${scrollbarYOpts.visible || 'visible'}`,
8086
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
8087
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
8008
8088
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
8009
8089
  `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
8010
8090
  ], {
8011
8091
  'is--padding': padding,
8012
- 'ov-x--auto-hide': scrollbarXOpts.autoHide,
8013
- 'ov-y--auto-hide': scrollbarYOpts.autoHide,
8092
+ 'ov-x--auto-hide': scrollXAutoHide,
8093
+ 'ov-y--auto-hide': scrollYAutoHide,
8014
8094
  'overflow-y': yThumbHeight,
8015
8095
  'overflow-x': xThumbWidth
8016
8096
  });
@@ -9889,7 +9969,7 @@ var VxeListComponent = defineVxeComponent({
9889
9969
  };
9890
9970
  const renderVN = () => {
9891
9971
  const { showCheckbox, className, loading, useScrollbar } = props;
9892
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
9972
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
9893
9973
  const defaultSlot = slots.default;
9894
9974
  const headerSlot = slots.header;
9895
9975
  const footerSlot = slots.footer;
@@ -9904,22 +9984,38 @@ var VxeListComponent = defineVxeComponent({
9904
9984
  const rowOpts = computeRowOpts.value;
9905
9985
  const { isHover, padding } = rowOpts;
9906
9986
  const isDrag = computeIsDrag.value;
9907
- const scrollbarXOpts = computeScrollbarXOpts.value;
9908
- const scrollbarYOpts = computeScrollbarYOpts.value;
9987
+ const scrollbarOpts = computeScrollbarOpts.value;
9988
+ const scrollXVisible = computeScrollXVisible.value;
9989
+ const scrollYVisible = computeScrollYVisible.value;
9990
+ const scrollbarXToTop = computeScrollbarXToTop.value;
9991
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
9992
+ const scrollXAutoHide = computeScrollXAutoHide.value;
9993
+ const scrollYAutoHide = computeScrollYAutoHide.value;
9909
9994
  const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
9910
9995
  const showDefChekboxHead = showCheckbox && showHeader !== false;
9911
9996
  const leOns = {};
9912
9997
  if (isCrossListDrag && !rowList.length) {
9913
9998
  leOns.onDragover = $xeList.handleCrossListRowDragoverEmptyEvent;
9914
9999
  }
9915
- return h('div', Object.assign({ ref: refElem, class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
10000
+ return h('div', Object.assign({ ref: refElem, class: [
10001
+ 'vxe-list',
10002
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
10003
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
10004
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
10005
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
10006
+ className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
10007
+ {
9916
10008
  [`size--${vSize}`]: vSize,
9917
10009
  'is--virtual-scrollbar': useScrollbar,
9918
- 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
9919
- 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
10010
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
10011
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
10012
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
10013
+ 'overflow-y': yThumbHeight,
10014
+ 'overflow-x': xThumbWidth,
9920
10015
  'is--drag': isDrag,
9921
10016
  'is--loading': loading
9922
- }], style: wrapperStyles }, leOns), [
10017
+ }
10018
+ ], style: wrapperStyles }, leOns), [
9923
10019
  headerSlot || showDefChekboxHead
9924
10020
  ? h('div', {
9925
10021
  ref: refHeaderElem,
@@ -9976,15 +10072,7 @@ var VxeListComponent = defineVxeComponent({
9976
10072
  style: {
9977
10073
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
9978
10074
  }
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
- ])
10075
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
9988
10076
  ]),
9989
10077
  footerSlot
9990
10078
  ? h('div', {
@@ -9999,7 +10087,7 @@ var VxeListComponent = defineVxeComponent({
9999
10087
  ? h('div', {
10000
10088
  class: scrollbarWrapperClss
10001
10089
  }, [
10002
- scrollbarXOpts.visible === 'hidden'
10090
+ scrollXVisible === false
10003
10091
  ? renderEmptyElement$1($xeList)
10004
10092
  : h('div', {
10005
10093
  ref: refTrackXElem,
@@ -10016,7 +10104,7 @@ var VxeListComponent = defineVxeComponent({
10016
10104
  onLostpointercapture: cleatPointerThumbEvent
10017
10105
  })
10018
10106
  ]),
10019
- scrollbarYOpts.visible === 'hidden'
10107
+ scrollYVisible === false
10020
10108
  ? renderEmptyElement$1($xeList)
10021
10109
  : h('div', {
10022
10110
  ref: refTrackYElem,
@@ -10068,11 +10156,24 @@ var VxeListComponent = defineVxeComponent({
10068
10156
  watch(() => props.syncResize, () => {
10069
10157
  reFlag.value++;
10070
10158
  });
10159
+ watch(() => props.useScrollbar, () => {
10160
+ reFlag.value++;
10161
+ });
10071
10162
  watch(computeRowHeight, () => {
10072
10163
  reFlag.value++;
10073
10164
  });
10074
- watch(reFlag, () => {
10165
+ watch(computeScrollXVisible, () => {
10166
+ nextTick(() => {
10167
+ reFlag.value++;
10168
+ });
10169
+ });
10170
+ watch(computeScrollYVisible, () => {
10075
10171
  nextTick(() => {
10172
+ reFlag.value++;
10173
+ });
10174
+ });
10175
+ watch(reFlag, () => {
10176
+ recalculate().then(() => {
10076
10177
  recalculate();
10077
10178
  });
10078
10179
  });
@@ -10122,13 +10223,13 @@ var VxeListComponent = defineVxeComponent({
10122
10223
  }
10123
10224
  if (useScrollbar || autoResize) {
10124
10225
  const el = refElem.value;
10125
- const viewInnerEl = refViewInnerElem.value;
10226
+ const viewInnerEl = refVirtualBody.value;
10126
10227
  const resizeObserver = globalResize$1.create(() => {
10127
10228
  reFlag.value++;
10128
10229
  });
10129
- resizeObserver.observe(el);
10130
- if (autoResize) {
10131
- if (el) {
10230
+ if (el) {
10231
+ resizeObserver.observe(el);
10232
+ if (autoResize) {
10132
10233
  resizeObserver.observe(el.parentElement);
10133
10234
  }
10134
10235
  }
@@ -29857,7 +29958,7 @@ var VxeLayoutAsideComponent = defineVxeComponent({
29857
29958
  const vSize = computeSize.value;
29858
29959
  const collapseOpts = computeCollapseOpts.value;
29859
29960
  const scrollbarOpts = computeScrollbarOpts.value;
29860
- const { native, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
29961
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
29861
29962
  const defaultSlot = slots.default;
29862
29963
  return h('aside', {
29863
29964
  ref: refElem,
@@ -29872,13 +29973,16 @@ var VxeLayoutAsideComponent = defineVxeComponent({
29872
29973
  }, [
29873
29974
  useScrollbar
29874
29975
  ? h(VxeScrollbar, {
29875
- native,
29976
+ width: scrollbarOpts.width,
29977
+ height: scrollbarOpts.height,
29978
+ autoHide: scrollbarOpts.autoHide,
29979
+ visible: scrollbarOpts.visible,
29876
29980
  xConfig: {
29877
- visible: 'hidden'
29981
+ visible: false
29878
29982
  },
29879
- yConfig,
29983
+ yConfig: scrollbarOpts.yConfig,
29880
29984
  className: 'vxe-layout-aside--scrollbar' + (className ? (' ' + className) : ''),
29881
- viewAttrs,
29985
+ viewAttrs: scrollbarOpts.viewAttrs,
29882
29986
  viewClassName: 'vxe-layout-aside--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
29883
29987
  viewInnerClassName: 'vxe-layout-aside--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
29884
29988
  }, {
@@ -29960,6 +30064,23 @@ var VxeLayoutBodyComponent = defineVxeComponent({
29960
30064
  const computeScrollbarOpts = computed(() => {
29961
30065
  return Object.assign({}, getConfig$4().layoutBody.scrollbarConfig, props.scrollbarConfig);
29962
30066
  });
30067
+ const computeScrollbarProps = computed(() => {
30068
+ const { showBacktop } = props;
30069
+ const scrollbarOpts = computeScrollbarOpts.value;
30070
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
30071
+ return {
30072
+ width: scrollbarOpts.width,
30073
+ height: scrollbarOpts.height,
30074
+ autoHide: scrollbarOpts.autoHide,
30075
+ visible: scrollbarOpts.visible,
30076
+ xConfig: scrollbarOpts.xConfig,
30077
+ yConfig: scrollbarOpts.yConfig,
30078
+ className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
30079
+ viewAttrs: Object.assign(Object.assign({}, scrollbarOpts.viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
30080
+ viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
30081
+ viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
30082
+ };
30083
+ });
29963
30084
  const computeMaps = {
29964
30085
  computeSize
29965
30086
  };
@@ -29983,8 +30104,7 @@ var VxeLayoutBodyComponent = defineVxeComponent({
29983
30104
  const renderVN = () => {
29984
30105
  const { loading, padding, showBacktop, useScrollbar } = props;
29985
30106
  const backtopOpts = computeBacktopOpts.value;
29986
- const scrollbarOpts = computeScrollbarOpts.value;
29987
- const { native, xConfig, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
30107
+ const scrollbarProps = computeScrollbarProps.value;
29988
30108
  const vSize = computeSize.value;
29989
30109
  const defaultSlot = slots.default;
29990
30110
  const backtopSlot = slots.backtop;
@@ -30009,15 +30129,7 @@ var VxeLayoutBodyComponent = defineVxeComponent({
30009
30129
  }]
30010
30130
  }, [
30011
30131
  useScrollbar
30012
- ? h(VxeScrollbar, {
30013
- native,
30014
- xConfig,
30015
- yConfig,
30016
- className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
30017
- viewAttrs: Object.assign(Object.assign({}, viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
30018
- viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
30019
- viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
30020
- }, {
30132
+ ? h(VxeScrollbar, scrollbarProps, {
30021
30133
  default: () => defaultSlot ? defaultSlot({}) : []
30022
30134
  })
30023
30135
  : h('div', {
@@ -41379,6 +41491,22 @@ var VxeTabsComponent = defineVxeComponent({
41379
41491
  const computeScrollbarOpts = computed(() => {
41380
41492
  return Object.assign({}, getConfig$4().tabs.scrollbarConfig, props.scrollbarConfig);
41381
41493
  });
41494
+ const computeScrollbarProps = computed(() => {
41495
+ const scrollbarOpts = computeScrollbarOpts.value;
41496
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
41497
+ return {
41498
+ width: scrollbarOpts.width,
41499
+ height: scrollbarOpts.height,
41500
+ autoHide: scrollbarOpts.autoHide,
41501
+ visible: scrollbarOpts.visible,
41502
+ xConfig: scrollbarOpts.xConfig,
41503
+ yConfig: scrollbarOpts.yConfig,
41504
+ className: scrollbarOpts.className,
41505
+ viewAttrs: scrollbarOpts.viewAttrs,
41506
+ viewClassName: 'vxe-tabs-pane--scrollbar-item-view' + (viewClassName ? (' ' + viewClassName) : ''),
41507
+ viewInnerClassName: 'vxe-tabs-pane--scrollbar-item-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
41508
+ };
41509
+ });
41382
41510
  const computeMaps = {};
41383
41511
  const $xeTabs = {
41384
41512
  xID,
@@ -41958,13 +42086,12 @@ var VxeTabsComponent = defineVxeComponent({
41958
42086
  const { initNames, activeName } = reactData;
41959
42087
  const { name, slots } = item;
41960
42088
  const defaultSlot = slots ? slots.default : null;
41961
- const scrollbarOpts = computeScrollbarOpts.value;
41962
- const { viewClassName, viewInnerClassName } = scrollbarOpts;
42089
+ const scrollbarProps = computeScrollbarProps.value;
41963
42090
  if (name && initNames.includes(name)) {
41964
42091
  return useScrollbar
41965
- ? h(VxeScrollbar, Object.assign(Object.assign({ key: `${name}`, class: ['vxe-tabs-pane--scrollbar-item', {
42092
+ ? h(VxeScrollbar, Object.assign({ key: `${name}`, class: ['vxe-tabs-pane--scrollbar-item', {
41966
42093
  'is--visible': activeName === name
41967
- }] }, scrollbarOpts), { viewClassName: 'vxe-tabs-pane--scrollbar-item-view' + (viewClassName ? (' ' + viewClassName) : ''), viewInnerClassName: 'vxe-tabs-pane--scrollbar-item-inner' + (viewClassName ? (' ' + viewInnerClassName) : '') }), {
42094
+ }] }, scrollbarProps), {
41968
42095
  default: () => defaultSlot ? callSlot(defaultSlot, { name }) : []
41969
42096
  })
41970
42097
  : h('div', {
@@ -43456,6 +43583,34 @@ const { menus, getConfig, getI18n, getIcon } = VxeUI;
43456
43583
  function getNodeUniqueId() {
43457
43584
  return XEUtils.uniqueId('node_');
43458
43585
  }
43586
+ function createReactData$2() {
43587
+ return {
43588
+ parentHeight: 0,
43589
+ customHeight: 0,
43590
+ customMinHeight: 0,
43591
+ customMaxHeight: 0,
43592
+ currentNode: null,
43593
+ scrollYLoad: false,
43594
+ bodyHeight: 0,
43595
+ topSpaceHeight: 0,
43596
+ selectRadioKey: null,
43597
+ treeList: [],
43598
+ updateExpandedFlag: 1,
43599
+ updateCheckboxFlag: 1,
43600
+ // 滚动条
43601
+ yThumbHeight: 0,
43602
+ xThumbWidth: 0,
43603
+ insertNodeFlag: 1,
43604
+ removeNodeFlag: 1,
43605
+ dragNode: null,
43606
+ dragTipText: '',
43607
+ isCrossDragNode: false,
43608
+ tooltipStore: {
43609
+ visible: false,
43610
+ node: null
43611
+ }
43612
+ };
43613
+ }
43459
43614
  function createInternalData$2() {
43460
43615
  return {
43461
43616
  // initialized: false,
@@ -43468,8 +43623,14 @@ function createInternalData$2() {
43468
43623
  indeterminateNodeMaps: {},
43469
43624
  treeExpandedMaps: {},
43470
43625
  treeExpandLazyLoadedMaps: {},
43471
- lastScrollLeft: 0,
43626
+ // 滚动条
43627
+ // resizeObserver: undefined,
43628
+ // isThumbDrag: false,
43629
+ thumbDragOffset: 0,
43630
+ yThumbTop: 0,
43631
+ xThumbLeft: 0,
43472
43632
  lastScrollTop: 0,
43633
+ lastScrollLeft: 0,
43473
43634
  scrollYStore: {
43474
43635
  startIndex: 0,
43475
43636
  endIndex: 0,
@@ -43486,31 +43647,6 @@ function createInternalData$2() {
43486
43647
  // hpTimeout: undefined
43487
43648
  };
43488
43649
  }
43489
- function createReactData$2() {
43490
- return {
43491
- parentHeight: 0,
43492
- customHeight: 0,
43493
- customMinHeight: 0,
43494
- customMaxHeight: 0,
43495
- currentNode: null,
43496
- scrollYLoad: false,
43497
- bodyHeight: 0,
43498
- topSpaceHeight: 0,
43499
- selectRadioKey: null,
43500
- treeList: [],
43501
- updateExpandedFlag: 1,
43502
- updateCheckboxFlag: 1,
43503
- insertNodeFlag: 1,
43504
- removeNodeFlag: 1,
43505
- dragNode: null,
43506
- dragTipText: '',
43507
- isCrossDragNode: false,
43508
- tooltipStore: {
43509
- visible: false,
43510
- node: null
43511
- }
43512
- };
43513
- }
43514
43650
  let crossTreeDragNodeObj = null;
43515
43651
  var VxeTreeComponent = defineVxeComponent({
43516
43652
  name: 'VxeTree',
@@ -43641,7 +43777,12 @@ var VxeTreeComponent = defineVxeComponent({
43641
43777
  type: String,
43642
43778
  default: () => getConfig().tree.size || getConfig().size
43643
43779
  },
43644
- virtualYConfig: Object
43780
+ virtualYConfig: Object,
43781
+ useScrollbar: {
43782
+ type: Boolean,
43783
+ default: () => getConfig().tree.useScrollbar
43784
+ },
43785
+ scrollbarConfig: Object
43645
43786
  },
43646
43787
  emits: [
43647
43788
  'update:modelValue',
@@ -43673,6 +43814,10 @@ var VxeTreeComponent = defineVxeComponent({
43673
43814
  const refFooterWrapperElem = ref();
43674
43815
  const refVirtualWrapper = ref();
43675
43816
  const refVirtualBody = ref();
43817
+ const refTrackXElem = ref();
43818
+ const refTrackYElem = ref();
43819
+ const refThumbXElem = ref();
43820
+ const refThumbYElem = ref();
43676
43821
  const refDragNodeLineElem = ref();
43677
43822
  const refDragTipElem = ref();
43678
43823
  const refTooltip = ref();
@@ -43744,6 +43889,19 @@ var VxeTreeComponent = defineVxeComponent({
43744
43889
  const computeMenuOpts = computed(() => {
43745
43890
  return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig);
43746
43891
  });
43892
+ const computeWrapperStyles = computed(() => {
43893
+ const scrollbarOpts = computeScrollbarOpts.value;
43894
+ const scrollbarXOpts = computeScrollbarXOpts.value;
43895
+ const scrollbarYOpts = computeScrollbarYOpts.value;
43896
+ const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
43897
+ const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
43898
+ const stys = {};
43899
+ if (barWidth || barHeight) {
43900
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
43901
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
43902
+ }
43903
+ return stys;
43904
+ });
43747
43905
  const computeTreeStyle = computed(() => {
43748
43906
  const { indent } = props;
43749
43907
  const { customHeight, customMinHeight, customMaxHeight } = reactData;
@@ -43776,6 +43934,71 @@ var VxeTreeComponent = defineVxeComponent({
43776
43934
  const computeFilterOpts = computed(() => {
43777
43935
  return Object.assign({}, getConfig().tree.filterConfig, props.filterConfig);
43778
43936
  });
43937
+ const computeScrollbarOpts = computed(() => {
43938
+ return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
43939
+ });
43940
+ const computeScrollbarXOpts = computed(() => {
43941
+ const scrollbarOpts = computeScrollbarOpts.value;
43942
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
43943
+ visible: false
43944
+ });
43945
+ });
43946
+ const computeScrollbarYOpts = computed(() => {
43947
+ const scrollbarOpts = computeScrollbarOpts.value;
43948
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
43949
+ });
43950
+ const computeScrollXVisible = computed(() => {
43951
+ const scrollbarOpts = computeScrollbarOpts.value;
43952
+ const scrollbarXOpts = computeScrollbarXOpts.value;
43953
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
43954
+ });
43955
+ const computeScrollYVisible = computed(() => {
43956
+ const scrollbarOpts = computeScrollbarOpts.value;
43957
+ const scrollbarYOpts = computeScrollbarYOpts.value;
43958
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
43959
+ });
43960
+ const computeScrollXAutoHide = computed(() => {
43961
+ const scrollbarOpts = computeScrollbarOpts.value;
43962
+ const scrollbarXOpts = computeScrollbarXOpts.value;
43963
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
43964
+ });
43965
+ const computeScrollYAutoHide = computed(() => {
43966
+ const scrollbarOpts = computeScrollbarOpts.value;
43967
+ const scrollbarYOpts = computeScrollbarYOpts.value;
43968
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
43969
+ });
43970
+ const computeScrollbarWrapperClss = computed(() => {
43971
+ const scrollbarOpts = computeScrollbarOpts.value;
43972
+ const { padding } = scrollbarOpts;
43973
+ const { yThumbHeight, xThumbWidth } = reactData;
43974
+ const scrollbarXToTop = computeScrollbarXToTop.value;
43975
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
43976
+ const scrollXVisible = computeScrollXVisible.value;
43977
+ const scrollYVisible = computeScrollYVisible.value;
43978
+ const scrollXAutoHide = computeScrollXAutoHide.value;
43979
+ const scrollYAutoHide = computeScrollYAutoHide.value;
43980
+ return domUtils$1.buildClass([
43981
+ 'vxe-scrollbar is--virtual',
43982
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
43983
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
43984
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
43985
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
43986
+ ], {
43987
+ 'is--padding': padding,
43988
+ 'ov-x--auto-hide': scrollXAutoHide,
43989
+ 'ov-y--auto-hide': scrollYAutoHide,
43990
+ 'overflow-y': yThumbHeight,
43991
+ 'overflow-x': xThumbWidth
43992
+ });
43993
+ });
43994
+ const computeScrollbarXToTop = computed(() => {
43995
+ const scrollbarXOpts = computeScrollbarXOpts.value;
43996
+ return scrollbarXOpts.position === 'top';
43997
+ });
43998
+ const computeScrollbarYToLeft = computed(() => {
43999
+ const scrollbarYOpts = computeScrollbarYOpts.value;
44000
+ return scrollbarYOpts.position === 'left';
44001
+ });
43779
44002
  const computeMaps = {
43780
44003
  computeKeyField,
43781
44004
  computeParentField,
@@ -44293,6 +44516,10 @@ var VxeTreeComponent = defineVxeComponent({
44293
44516
  }
44294
44517
  });
44295
44518
  };
44519
+ const updateScrollbar = () => {
44520
+ updateThumbSize();
44521
+ updateThumbOffset();
44522
+ };
44296
44523
  /**
44297
44524
  * 重新计算列表
44298
44525
  */
@@ -44314,6 +44541,7 @@ var VxeTreeComponent = defineVxeComponent({
44314
44541
  const parentPaddingSize = getPaddingTopBottomSize(parentEl);
44315
44542
  reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
44316
44543
  }
44544
+ updateScrollbar();
44317
44545
  updateHeight();
44318
44546
  return computeScrollLoad().then(() => {
44319
44547
  updateHeight();
@@ -44347,6 +44575,7 @@ var VxeTreeComponent = defineVxeComponent({
44347
44575
  const scrollLeft = scrollBodyElem.scrollLeft;
44348
44576
  const isX = scrollLeft !== internalData.lastScrollLeft;
44349
44577
  const isY = scrollTop !== internalData.lastScrollTop;
44578
+ updateThumbOffset();
44350
44579
  internalData.lastScrollTop = scrollTop;
44351
44580
  internalData.lastScrollLeft = scrollLeft;
44352
44581
  if (reactData.scrollYLoad) {
@@ -44891,13 +45120,6 @@ var VxeTreeComponent = defineVxeComponent({
44891
45120
  emitRadioMode(value);
44892
45121
  dispatchEvent('radio-change', { node, value, checked: isChecked }, evnt);
44893
45122
  };
44894
- const handleGlobalResizeEvent = () => {
44895
- const el = refElem.value;
44896
- if (!el || !el.clientWidth) {
44897
- return;
44898
- }
44899
- recalculate();
44900
- };
44901
45123
  const insertTreeNode = (newRecords, isAppend) => {
44902
45124
  const { treeFullData, nodeMaps } = internalData;
44903
45125
  const keyField = computeKeyField.value;
@@ -46331,6 +46553,162 @@ var VxeTreeComponent = defineVxeComponent({
46331
46553
  hideDropTip();
46332
46554
  }
46333
46555
  };
46556
+ const updateThumbSize = () => {
46557
+ const viewEl = refVirtualWrapper.value;
46558
+ if (!viewEl) {
46559
+ return;
46560
+ }
46561
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
46562
+ return;
46563
+ }
46564
+ const trackXEl = refTrackXElem.value;
46565
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
46566
+ const thumbXElem = refThumbXElem.value;
46567
+ if (thumbXElem) {
46568
+ thumbXElem.style.width = xThumbWidth + 'px';
46569
+ }
46570
+ reactData.xThumbWidth = xThumbWidth;
46571
+ const trackYEl = refTrackYElem.value;
46572
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
46573
+ const thumbYElem = refThumbYElem.value;
46574
+ if (thumbYElem) {
46575
+ thumbYElem.style.height = yThumbHeight + 'px';
46576
+ }
46577
+ reactData.yThumbHeight = yThumbHeight;
46578
+ };
46579
+ const updateThumbOffset = () => {
46580
+ const viewEl = refVirtualWrapper.value;
46581
+ if (!viewEl) {
46582
+ return;
46583
+ }
46584
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
46585
+ return;
46586
+ }
46587
+ const { xThumbWidth, yThumbHeight } = reactData;
46588
+ const trackXEl = refTrackXElem.value;
46589
+ const thumbXElem = refThumbXElem.value;
46590
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
46591
+ internalData.xThumbLeft = xThumbLeft;
46592
+ if (thumbXElem && xThumbWidth) {
46593
+ thumbXElem.style.width = xThumbWidth + 'px';
46594
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
46595
+ }
46596
+ const trackYEl = refTrackYElem.value;
46597
+ const thumbYElem = refThumbYElem.value;
46598
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
46599
+ internalData.yThumbTop = yThumbTop;
46600
+ if (thumbYElem && yThumbHeight) {
46601
+ thumbYElem.style.height = yThumbHeight + 'px';
46602
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
46603
+ }
46604
+ };
46605
+ const clickTrackXEvent = (evnt) => {
46606
+ const trackEl = evnt.currentTarget;
46607
+ if (trackEl !== evnt.target) {
46608
+ return;
46609
+ }
46610
+ const viewEl = refVirtualWrapper.value;
46611
+ if (!viewEl) {
46612
+ return;
46613
+ }
46614
+ const { xThumbWidth } = reactData;
46615
+ const trackRect = trackEl.getBoundingClientRect();
46616
+ viewEl.scrollTo({
46617
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
46618
+ behavior: 'auto'
46619
+ });
46620
+ };
46621
+ const clickTrackYEvent = (evnt) => {
46622
+ const trackEl = evnt.currentTarget;
46623
+ if (trackEl !== evnt.target) {
46624
+ return;
46625
+ }
46626
+ const viewEl = refVirtualWrapper.value;
46627
+ if (!viewEl) {
46628
+ return;
46629
+ }
46630
+ const { yThumbHeight } = reactData;
46631
+ const trackRect = trackEl.getBoundingClientRect();
46632
+ viewEl.scrollTo({
46633
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
46634
+ behavior: 'auto'
46635
+ });
46636
+ };
46637
+ const pointerdownThumbXEvent = (evnt) => {
46638
+ const thumbEl = evnt.currentTarget;
46639
+ internalData.isThumbDrag = true;
46640
+ thumbEl.setPointerCapture(evnt.pointerId);
46641
+ const viewEl = refVirtualWrapper.value;
46642
+ if (!viewEl) {
46643
+ return;
46644
+ }
46645
+ const { xThumbWidth } = reactData;
46646
+ const trackEl = thumbEl.parentElement;
46647
+ const trackRect = trackEl.getBoundingClientRect();
46648
+ const pointerPosition = evnt.clientX - trackRect.left;
46649
+ // 记录 thumb 的偏移
46650
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
46651
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
46652
+ };
46653
+ const pointermoveThumbXEvent = (evnt) => {
46654
+ const thumbEl = evnt.currentTarget;
46655
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
46656
+ return;
46657
+ }
46658
+ const { isThumbDrag, thumbDragOffset } = internalData;
46659
+ if (isThumbDrag) {
46660
+ const viewEl = refVirtualWrapper.value;
46661
+ if (!viewEl) {
46662
+ return;
46663
+ }
46664
+ const { xThumbWidth } = reactData;
46665
+ const thumbEl = evnt.currentTarget;
46666
+ const trackEl = thumbEl.parentElement;
46667
+ const trackRect = trackEl.getBoundingClientRect();
46668
+ // 更新偏移
46669
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
46670
+ }
46671
+ };
46672
+ const cleatPointerThumbEvent = (evnt) => {
46673
+ const thumbEl = evnt.currentTarget;
46674
+ thumbEl.releasePointerCapture(evnt.pointerId);
46675
+ internalData.isThumbDrag = false;
46676
+ };
46677
+ const pointerdownThumbYEvent = (evnt) => {
46678
+ const thumbEl = evnt.currentTarget;
46679
+ internalData.isThumbDrag = true;
46680
+ thumbEl.setPointerCapture(evnt.pointerId);
46681
+ const viewEl = refVirtualWrapper.value;
46682
+ if (!viewEl) {
46683
+ return;
46684
+ }
46685
+ const { yThumbHeight } = reactData;
46686
+ const trackEl = thumbEl.parentElement;
46687
+ const trackRect = trackEl.getBoundingClientRect();
46688
+ const pointerPosition = evnt.clientY - trackRect.top;
46689
+ // 记录 thumb 的偏移
46690
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
46691
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
46692
+ };
46693
+ const pointermoveThumbYEvent = (evnt) => {
46694
+ const thumbEl = evnt.currentTarget;
46695
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
46696
+ return;
46697
+ }
46698
+ const { isThumbDrag, thumbDragOffset } = internalData;
46699
+ if (isThumbDrag) {
46700
+ const viewEl = refVirtualWrapper.value;
46701
+ if (!viewEl) {
46702
+ return;
46703
+ }
46704
+ const { yThumbHeight } = reactData;
46705
+ const thumbEl = evnt.currentTarget;
46706
+ const trackEl = thumbEl.parentElement;
46707
+ const trackRect = trackEl.getBoundingClientRect();
46708
+ // 更新偏移
46709
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
46710
+ }
46711
+ };
46334
46712
  Object.assign($xeTree, treeMethods, treePrivateMethods);
46335
46713
  const renderDragIcon = (node, nodeid) => {
46336
46714
  const { drag, transform } = props;
@@ -46640,13 +47018,14 @@ var VxeTreeComponent = defineVxeComponent({
46640
47018
  return renderEmptyElement$1($xeTree);
46641
47019
  };
46642
47020
  const renderVN = () => {
46643
- const { loading, trigger, showLine } = props;
46644
- const { bodyHeight, topSpaceHeight, treeList, tooltipStore } = reactData;
47021
+ const { loading, trigger, showLine, useScrollbar } = props;
47022
+ const { bodyHeight, topSpaceHeight, treeList, tooltipStore, xThumbWidth, yThumbHeight } = reactData;
46645
47023
  const vSize = computeSize.value;
46646
47024
  const radioOpts = computeRadioOpts.value;
46647
47025
  const checkboxOpts = computeCheckboxOpts.value;
46648
47026
  const loadingOpts = computeLoadingOpts.value;
46649
47027
  const isNodeHover = computeIsNodeHover.value;
47028
+ const wrapperStyles = computeWrapperStyles.value;
46650
47029
  const treeStyle = computeTreeStyle.value;
46651
47030
  const dragOpts = computeDragOpts.value;
46652
47031
  const tooltipOpts = computeTooltipOpts.value;
@@ -46654,19 +47033,40 @@ var VxeTreeComponent = defineVxeComponent({
46654
47033
  const headerSlot = slots.header;
46655
47034
  const footerSlot = slots.footer;
46656
47035
  const tooltipSlot = slots.tooltip;
47036
+ const scrollbarOpts = computeScrollbarOpts.value;
47037
+ const scrollXVisible = computeScrollXVisible.value;
47038
+ const scrollYVisible = computeScrollYVisible.value;
47039
+ const scrollbarXToTop = computeScrollbarXToTop.value;
47040
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
47041
+ const scrollXAutoHide = computeScrollXAutoHide.value;
47042
+ const scrollYAutoHide = computeScrollYAutoHide.value;
47043
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
46657
47044
  const teOns = {};
46658
47045
  if (dragOpts.isCrossTreeDrag && !treeList.length) {
46659
47046
  teOns.onDragover = $xeTree.handleCrossTreeNodeDragoverEmptyEvent;
46660
47047
  }
46661
- return h('div', Object.assign({ ref: refElem, class: ['vxe-tree', {
47048
+ return h('div', Object.assign({ ref: refElem, class: [
47049
+ 'vxe-tree',
47050
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
47051
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
47052
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
47053
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
47054
+ {
46662
47055
  [`size--${vSize}`]: vSize,
46663
47056
  'show--line': showLine,
47057
+ 'is--virtual-scrollbar': useScrollbar,
47058
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
47059
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
47060
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
47061
+ 'overflow-y': yThumbHeight,
47062
+ 'overflow-x': xThumbWidth,
46664
47063
  'checkbox--highlight': checkboxOpts.highlight,
46665
47064
  'radio--highlight': radioOpts.highlight,
46666
47065
  'node--hover': isNodeHover,
46667
47066
  'node--trigger': trigger === 'node',
46668
47067
  'is--loading': loading
46669
- }] }, teOns), [
47068
+ }
47069
+ ], style: wrapperStyles }, teOns), [
46670
47070
  headerSlot
46671
47071
  ? h('div', {
46672
47072
  ref: refHeaderWrapperElem,
@@ -46699,6 +47099,49 @@ var VxeTreeComponent = defineVxeComponent({
46699
47099
  class: 'vxe-tree--footer-wrapper'
46700
47100
  }, footerSlot({ $tree: $xeTree }))
46701
47101
  : renderEmptyElement$1($xeTree),
47102
+ /**
47103
+ * 滚动条
47104
+ */
47105
+ useScrollbar
47106
+ ? h('div', {
47107
+ class: scrollbarWrapperClss
47108
+ }, [
47109
+ scrollXVisible === false
47110
+ ? renderEmptyElement$1($xeTree)
47111
+ : h('div', {
47112
+ ref: refTrackXElem,
47113
+ class: 'vxe-scrollbar--track-x',
47114
+ onClick: clickTrackXEvent
47115
+ }, [
47116
+ h('div', {
47117
+ ref: refThumbXElem,
47118
+ class: 'vxe-scrollbar--thumb-x',
47119
+ onPointerdown: pointerdownThumbXEvent,
47120
+ onPointermove: pointermoveThumbXEvent,
47121
+ onPointerup: cleatPointerThumbEvent,
47122
+ onPointercancel: cleatPointerThumbEvent,
47123
+ onLostpointercapture: cleatPointerThumbEvent
47124
+ })
47125
+ ]),
47126
+ scrollYVisible === false
47127
+ ? renderEmptyElement$1($xeTree)
47128
+ : h('div', {
47129
+ ref: refTrackYElem,
47130
+ class: 'vxe-scrollbar--track-y',
47131
+ onClick: clickTrackYEvent
47132
+ }, [
47133
+ h('div', {
47134
+ ref: refThumbYElem,
47135
+ class: 'vxe-scrollbar--thumb-y',
47136
+ onPointerdown: pointerdownThumbYEvent,
47137
+ onPointermove: pointermoveThumbYEvent,
47138
+ onPointerup: cleatPointerThumbEvent,
47139
+ onPointercancel: cleatPointerThumbEvent,
47140
+ onLostpointercapture: cleatPointerThumbEvent
47141
+ })
47142
+ ])
47143
+ ])
47144
+ : renderEmptyElement$1($xeTree),
46702
47145
  /**
46703
47146
  * 拖拽提示
46704
47147
  */
@@ -46782,21 +47225,36 @@ var VxeTreeComponent = defineVxeComponent({
46782
47225
  watch(() => props.filterValue, () => {
46783
47226
  triggerSearchEvent(new Event('filter'));
46784
47227
  });
46785
- const hFlag = ref(0);
47228
+ const reFlag = ref(0);
46786
47229
  watch(() => props.height, () => {
46787
- hFlag.value++;
47230
+ reFlag.value++;
46788
47231
  });
46789
47232
  watch(() => props.minHeight, () => {
46790
- hFlag.value++;
47233
+ reFlag.value++;
46791
47234
  });
46792
47235
  watch(() => props.maxHeight, () => {
46793
- hFlag.value++;
47236
+ reFlag.value++;
46794
47237
  });
46795
- watch(hFlag, () => {
46796
- recalculate();
47238
+ watch(() => props.useScrollbar, () => {
47239
+ reFlag.value++;
47240
+ });
47241
+ watch(computeScrollXVisible, () => {
47242
+ nextTick(() => {
47243
+ reFlag.value++;
47244
+ });
47245
+ });
47246
+ watch(computeScrollYVisible, () => {
47247
+ nextTick(() => {
47248
+ reFlag.value++;
47249
+ });
47250
+ });
47251
+ watch(reFlag, () => {
47252
+ recalculate().then(() => {
47253
+ recalculate();
47254
+ });
46797
47255
  });
46798
47256
  onMounted(() => {
46799
- const { transform, drag, menuConfig, showOverflow, lazy, loadMethod } = props;
47257
+ const { transform, drag, menuConfig, showOverflow, lazy, loadMethod, autoResize, useScrollbar } = props;
46800
47258
  const dragOpts = computeDragOpts.value;
46801
47259
  if (!showOverflow) {
46802
47260
  errLog$2('vxe.error.errProp', ['show-overflow=false', 'show-overflow=true']);
@@ -46817,24 +47275,30 @@ var VxeTreeComponent = defineVxeComponent({
46817
47275
  if (menuConfig && !VxeUIContextMenu) {
46818
47276
  errLog$2('vxe.error.reqComp', ['vxe-context-menu']);
46819
47277
  }
46820
- if (props.autoResize) {
47278
+ if (useScrollbar || autoResize) {
46821
47279
  const el = refElem.value;
47280
+ const viewInnerEl = refVirtualBody.value;
46822
47281
  const parentEl = getParentElem();
46823
47282
  const resizeObserver = globalResize$1.create(() => {
46824
- if (props.autoResize) {
46825
- recalculate();
46826
- }
47283
+ reFlag.value++;
46827
47284
  });
46828
47285
  if (el) {
46829
47286
  resizeObserver.observe(el);
47287
+ if (autoResize) {
47288
+ if (parentEl) {
47289
+ resizeObserver.observe(parentEl);
47290
+ }
47291
+ }
46830
47292
  }
46831
- if (parentEl) {
46832
- resizeObserver.observe(parentEl);
47293
+ if (viewInnerEl) {
47294
+ resizeObserver.observe(viewInnerEl);
46833
47295
  }
46834
47296
  internalData.resizeObserver = resizeObserver;
46835
47297
  }
46836
- recalculate();
46837
- globalEvents$1.on($xeTree, 'resize', handleGlobalResizeEvent);
47298
+ reFlag.value++;
47299
+ globalEvents$1.on($xeTree, 'resize', () => {
47300
+ reFlag.value++;
47301
+ });
46838
47302
  });
46839
47303
  onBeforeUnmount(() => {
46840
47304
  const { resizeObserver } = internalData;