vxe-pc-ui 4.20.0 → 4.20.2

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 (128) hide show
  1. package/dist/all.esm.js +780 -173
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/card/src/card.js +19 -4
  5. package/es/drawer/src/drawer.js +59 -15
  6. package/es/drawer/style.css +13 -6
  7. package/es/drawer/style.min.css +1 -1
  8. package/es/icon/style.css +1 -1
  9. package/es/language/fr-FR.js +29 -29
  10. package/es/layout-aside/src/layout-aside.js +10 -6
  11. package/es/layout-body/src/layout-body.js +21 -12
  12. package/es/list/src/list.js +118 -49
  13. package/es/list/style.css +25 -8
  14. package/es/list/style.min.css +1 -1
  15. package/es/menu/src/menu.js +2 -2
  16. package/es/modal/src/modal.js +56 -12
  17. package/es/modal/style.css +15 -4
  18. package/es/modal/style.min.css +1 -1
  19. package/es/scrollbar/src/scrollbar.js +73 -19
  20. package/es/style.css +1 -1
  21. package/es/style.min.css +1 -1
  22. package/es/tabs/src/tabs.js +21 -6
  23. package/es/tree/src/tree.js +410 -53
  24. package/es/tree/style.css +43 -0
  25. package/es/tree/style.min.css +1 -1
  26. package/es/ui/index.js +1 -1
  27. package/es/ui/src/log.js +1 -1
  28. package/es/ui/src/utils.js +3 -0
  29. package/es/vxe-drawer/style.css +13 -6
  30. package/es/vxe-drawer/style.min.css +1 -1
  31. package/es/vxe-list/style.css +25 -8
  32. package/es/vxe-list/style.min.css +1 -1
  33. package/es/vxe-modal/style.css +15 -4
  34. package/es/vxe-modal/style.min.css +1 -1
  35. package/es/vxe-tree/style.css +43 -0
  36. package/es/vxe-tree/style.min.css +1 -1
  37. package/lib/card/src/card.js +19 -4
  38. package/lib/card/src/card.min.js +1 -1
  39. package/lib/drawer/src/drawer.js +64 -11
  40. package/lib/drawer/src/drawer.min.js +1 -1
  41. package/lib/drawer/style/style.css +13 -6
  42. package/lib/drawer/style/style.min.css +1 -1
  43. package/lib/icon/style/style.css +1 -1
  44. package/lib/icon/style/style.min.css +1 -1
  45. package/lib/index.umd.js +887 -183
  46. package/lib/index.umd.min.js +1 -1
  47. package/lib/language/fr-FR.js +29 -29
  48. package/lib/language/fr-FR.min.js +1 -1
  49. package/lib/language/fr-FR.umd.js +29 -29
  50. package/lib/layout-aside/src/layout-aside.js +9 -8
  51. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  52. package/lib/layout-body/src/layout-body.js +29 -22
  53. package/lib/layout-body/src/layout-body.min.js +1 -1
  54. package/lib/list/src/list.js +110 -47
  55. package/lib/list/src/list.min.js +1 -1
  56. package/lib/list/style/style.css +25 -8
  57. package/lib/list/style/style.min.css +1 -1
  58. package/lib/menu/src/menu.js +1 -1
  59. package/lib/menu/src/menu.min.js +1 -1
  60. package/lib/modal/src/modal.js +61 -10
  61. package/lib/modal/src/modal.min.js +1 -1
  62. package/lib/modal/style/style.css +15 -4
  63. package/lib/modal/style/style.min.css +1 -1
  64. package/lib/scrollbar/src/scrollbar.js +81 -17
  65. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  66. package/lib/style.css +1 -1
  67. package/lib/style.min.css +1 -1
  68. package/lib/tabs/src/tabs.js +23 -11
  69. package/lib/tabs/src/tabs.min.js +1 -1
  70. package/lib/tree/src/tree.js +412 -50
  71. package/lib/tree/src/tree.min.js +1 -1
  72. package/lib/tree/style/style.css +43 -0
  73. package/lib/tree/style/style.min.css +1 -1
  74. package/lib/ui/index.js +1 -1
  75. package/lib/ui/index.min.js +1 -1
  76. package/lib/ui/src/log.js +1 -1
  77. package/lib/ui/src/log.min.js +1 -1
  78. package/lib/ui/src/utils.js +4 -0
  79. package/lib/ui/src/utils.min.js +1 -1
  80. package/lib/vxe-drawer/style/style.css +13 -6
  81. package/lib/vxe-drawer/style/style.min.css +1 -1
  82. package/lib/vxe-list/style/style.css +25 -8
  83. package/lib/vxe-list/style/style.min.css +1 -1
  84. package/lib/vxe-modal/style/style.css +15 -4
  85. package/lib/vxe-modal/style/style.min.css +1 -1
  86. package/lib/vxe-tree/style/style.css +43 -0
  87. package/lib/vxe-tree/style/style.min.css +1 -1
  88. package/package.json +2 -2
  89. package/packages/card/src/card.ts +20 -4
  90. package/packages/drawer/src/drawer.ts +73 -16
  91. package/packages/language/fr-FR.ts +903 -903
  92. package/packages/layout-aside/src/layout-aside.ts +10 -6
  93. package/packages/layout-body/src/layout-body.ts +25 -15
  94. package/packages/list/src/list.ts +130 -55
  95. package/packages/menu/src/menu.ts +2 -2
  96. package/packages/modal/src/modal.ts +71 -14
  97. package/packages/scrollbar/src/scrollbar.ts +79 -18
  98. package/packages/tabs/src/tabs.ts +21 -7
  99. package/packages/tree/src/tree.ts +452 -62
  100. package/packages/ui/src/utils.ts +4 -0
  101. package/styles/components/drawer.scss +13 -6
  102. package/styles/components/list.scss +35 -10
  103. package/styles/components/modal.scss +12 -4
  104. package/styles/components/tree.scss +76 -0
  105. package/types/components/card.d.ts +10 -1
  106. package/types/components/drawer.d.ts +20 -0
  107. package/types/components/gantt-module/gantt-view.d.ts +24 -1
  108. package/types/components/gantt.d.ts +2 -0
  109. package/types/components/layout-aside.d.ts +10 -1
  110. package/types/components/layout-body.d.ts +10 -1
  111. package/types/components/list.d.ts +13 -2
  112. package/types/components/modal.d.ts +20 -0
  113. package/types/components/scrollbar.d.ts +17 -2
  114. package/types/components/table.d.ts +80 -6
  115. package/types/components/tabs.d.ts +10 -1
  116. package/types/components/tree.d.ts +35 -2
  117. /package/es/icon/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  118. /package/es/icon/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  119. /package/es/icon/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  120. /package/es/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  121. /package/es/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  122. /package/es/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  123. /package/lib/icon/style/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  124. /package/lib/icon/style/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  125. /package/lib/icon/style/{iconfont.1791880413927.woff2 → iconfont.1792034967421.woff2} +0 -0
  126. /package/lib/{iconfont.1791880413927.ttf → iconfont.1792034967421.ttf} +0 -0
  127. /package/lib/{iconfont.1791880413927.woff → iconfont.1792034967421.woff} +0 -0
  128. /package/lib/{iconfont.1791880413927.woff2 → iconfont.1792034967421.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.2"}`;
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.2";
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: {
@@ -6536,8 +6548,8 @@ var VxeScrollbarComponent = defineVxeComponent({
6536
6548
  const internalData = createInternalData$m();
6537
6549
  const computeWrapperStyle = computed(() => {
6538
6550
  const { width, height, minWidth, minHeight, maxWidth, maxHeight } = props;
6539
- const xOpts = computeXOpts.value;
6540
- const yOpts = computeYOpts.value;
6551
+ const barWidth = computeYWidth.value;
6552
+ const barHeight = computeXHeight.value;
6541
6553
  const stys = {};
6542
6554
  if (width) {
6543
6555
  stys.width = toCssUnit(width);
@@ -6557,33 +6569,61 @@ var VxeScrollbarComponent = defineVxeComponent({
6557
6569
  if (maxHeight) {
6558
6570
  stys.maxHeight = toCssUnit(maxHeight);
6559
6571
  }
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);
6572
+ if (barWidth || barHeight) {
6573
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
6574
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
6565
6575
  }
6566
6576
  return stys;
6567
6577
  });
6578
+ const computeXHeight = computed(() => {
6579
+ const xOpts = computeXOpts.value;
6580
+ return xOpts.height;
6581
+ });
6582
+ const computeYWidth = computed(() => {
6583
+ const yOpts = computeYOpts.value;
6584
+ return yOpts.width;
6585
+ });
6586
+ const computeXVisible = computed(() => {
6587
+ const { visible } = props;
6588
+ const xOpts = computeXOpts.value;
6589
+ return getDefaultConfig(xOpts.visible, visible);
6590
+ });
6591
+ const computeYVisible = computed(() => {
6592
+ const { visible } = props;
6593
+ const yOpts = computeYOpts.value;
6594
+ return getDefaultConfig(yOpts.visible, visible);
6595
+ });
6596
+ const computeXAutoHide = computed(() => {
6597
+ const { autoHide } = props;
6598
+ const xOpts = computeXOpts.value;
6599
+ return getDefaultConfig(xOpts.autoHide, autoHide);
6600
+ });
6601
+ const computeYAutoHide = computed(() => {
6602
+ const { autoHide } = props;
6603
+ const yOpts = computeYOpts.value;
6604
+ return getDefaultConfig(yOpts.autoHide, autoHide);
6605
+ });
6568
6606
  const computeWrapperClss = computed(() => {
6569
6607
  const { native, className, padding } = props;
6570
6608
  const { yThumbHeight, xThumbWidth } = reactData;
6571
- const xOpts = computeXOpts.value;
6572
- const yOpts = computeYOpts.value;
6573
6609
  const xToTop = computeXToTop.value;
6574
6610
  const yToLeft = computeYToLeft.value;
6611
+ const xVisible = computeXVisible.value;
6612
+ const yVisible = computeYVisible.value;
6613
+ const xAutoHide = computeXAutoHide.value;
6614
+ const yAutoHide = computeYAutoHide.value;
6575
6615
  return domUtils.buildClass([
6576
6616
  'vxe-scrollbar',
6577
- `ov-x--${xOpts.visible || 'visible'}`,
6578
- `ov-y--${yOpts.visible || 'visible'}`,
6617
+ `ov-x--${xVisible === false ? 'hidden' : 'visible'}`,
6618
+ `ov-y--${yVisible === false ? 'hidden' : 'visible'}`,
6579
6619
  `sx-pos--${xToTop ? 'top' : 'bottom'}`,
6580
6620
  `sy-pos--${yToLeft ? 'left' : 'right'}`,
6581
6621
  native ? 'is--native' : 'is--virtual',
6582
6622
  className
6583
6623
  ], {
6584
6624
  'is--padding': padding,
6585
- 'ov-x--auto-hide': xOpts.autoHide,
6586
- 'ov-y--auto-hide': yOpts.autoHide,
6625
+ 'ov-x--auto-hide': xAutoHide,
6626
+ 'ov-y--auto-hide': yAutoHide,
6587
6627
  'overflow-y': yThumbHeight,
6588
6628
  'overflow-x': xThumbWidth
6589
6629
  });
@@ -6923,13 +6963,13 @@ var VxeScrollbarComponent = defineVxeComponent({
6923
6963
  const scrollbarPrivateMethods = {};
6924
6964
  Object.assign($xeScrollbar, scrollbarMethods, scrollbarPrivateMethods);
6925
6965
  const renderVN = () => {
6926
- const { id, native, loading, viewAttrs } = props;
6966
+ const { id, native, loading, viewId, viewAttrs } = props;
6927
6967
  const wrapperStyle = computeWrapperStyle.value;
6928
6968
  const wrapperClss = computeWrapperClss.value;
6929
6969
  const viewClss = computeViewClss.value;
6930
6970
  const viewInnerClss = computeViewInnerClss.value;
6931
- const xOpts = computeXOpts.value;
6932
- const yOpts = computeYOpts.value;
6971
+ const xVisible = computeXVisible.value;
6972
+ const yVisible = computeYVisible.value;
6933
6973
  const defaultSlot = slots.default;
6934
6974
  return h('div', {
6935
6975
  ref: refElem,
@@ -6937,14 +6977,14 @@ var VxeScrollbarComponent = defineVxeComponent({
6937
6977
  class: wrapperClss,
6938
6978
  style: wrapperStyle
6939
6979
  }, [
6940
- h('div', Object.assign({ ref: refViewElem, class: viewClss, onScroll: scrollEvent }, viewAttrs), [
6980
+ h('div', Object.assign({ ref: refViewElem, class: viewClss, onScroll: scrollEvent, id: viewId || null }, viewAttrs), [
6941
6981
  h('div', {
6942
6982
  key: 'vi',
6943
6983
  ref: refViewInnerElem,
6944
6984
  class: viewInnerClss
6945
6985
  }, defaultSlot ? defaultSlot({}) : [])
6946
6986
  ]),
6947
- native || xOpts.visible === 'hidden'
6987
+ native || xVisible === false
6948
6988
  ? renderEmptyElement($xeScrollbar)
6949
6989
  : h('div', {
6950
6990
  ref: refTrackXElem,
@@ -6961,7 +7001,7 @@ var VxeScrollbarComponent = defineVxeComponent({
6961
7001
  onLostpointercapture: cleatPointerThumbEvent
6962
7002
  })
6963
7003
  ]),
6964
- native || yOpts.visible === 'hidden'
7004
+ native || yVisible === false
6965
7005
  ? renderEmptyElement($xeScrollbar)
6966
7006
  : h('div', {
6967
7007
  ref: refTrackYElem,
@@ -7009,6 +7049,22 @@ var VxeScrollbarComponent = defineVxeComponent({
7009
7049
  watch(() => props.syncResize, () => {
7010
7050
  reFlag.value++;
7011
7051
  });
7052
+ watch(computeYWidth, () => {
7053
+ reFlag.value++;
7054
+ });
7055
+ watch(computeXHeight, () => {
7056
+ reFlag.value++;
7057
+ });
7058
+ watch(computeXVisible, () => {
7059
+ nextTick(() => {
7060
+ reFlag.value++;
7061
+ });
7062
+ });
7063
+ watch(computeYVisible, () => {
7064
+ nextTick(() => {
7065
+ reFlag.value++;
7066
+ });
7067
+ });
7012
7068
  watch(reFlag, () => {
7013
7069
  $xeScrollbar.recalculate().then(() => {
7014
7070
  $xeScrollbar.recalculate();
@@ -7090,7 +7146,7 @@ var VxeCardComponent = defineVxeComponent({
7090
7146
  },
7091
7147
  useScrollbar: {
7092
7148
  type: Boolean,
7093
- default: () => getConfig$4().card.useScrollbar
7149
+ default: () => getDefaultConfig(getConfig$4().card.useScrollbar, getConfig$4().useScrollbar)
7094
7150
  },
7095
7151
  scrollbarConfig: Object
7096
7152
  },
@@ -7118,6 +7174,19 @@ var VxeCardComponent = defineVxeComponent({
7118
7174
  const computeScrollbarOpts = computed(() => {
7119
7175
  return Object.assign({}, getConfig$4().card.scrollbarConfig, props.scrollbarConfig);
7120
7176
  });
7177
+ const computeScrollbarProps = computed(() => {
7178
+ const scrollbarOpts = computeScrollbarOpts.value;
7179
+ return {
7180
+ width: scrollbarOpts.width,
7181
+ height: scrollbarOpts.height,
7182
+ autoHide: scrollbarOpts.autoHide,
7183
+ visible: scrollbarOpts.visible,
7184
+ xConfig: scrollbarOpts.xConfig,
7185
+ yConfig: scrollbarOpts.yConfig,
7186
+ className: scrollbarOpts.className,
7187
+ viewAttrs: scrollbarOpts.viewAttrs
7188
+ };
7189
+ });
7121
7190
  const computeMaps = {
7122
7191
  computeSize
7123
7192
  };
@@ -7149,6 +7218,7 @@ var VxeCardComponent = defineVxeComponent({
7149
7218
  const vSize = computeSize.value;
7150
7219
  const cardStyle = computeCardStyle.value;
7151
7220
  const scrollbarOpts = computeScrollbarOpts.value;
7221
+ const scrollbarProps = computeScrollbarProps.value;
7152
7222
  const { viewClassName, viewInnerClassName } = scrollbarOpts;
7153
7223
  return h('div', {
7154
7224
  ref: refElem,
@@ -7183,7 +7253,7 @@ var VxeCardComponent = defineVxeComponent({
7183
7253
  }, [
7184
7254
  leftSlot
7185
7255
  ? (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' }), {
7256
+ ? 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
7257
  default: () => getSlotVNs(leftSlot({}))
7188
7258
  })
7189
7259
  : h('div', {
@@ -7191,7 +7261,7 @@ var VxeCardComponent = defineVxeComponent({
7191
7261
  }, getSlotVNs(leftSlot({}))))
7192
7262
  : renderEmptyElement$1($xeCard),
7193
7263
  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) : '') }), {
7264
+ ? 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
7265
  default: () => defaultSlot ? getSlotVNs(defaultSlot({})) : []
7196
7266
  })
7197
7267
  : h('div', {
@@ -7199,7 +7269,7 @@ var VxeCardComponent = defineVxeComponent({
7199
7269
  }, defaultSlot ? getSlotVNs(defaultSlot({})) : []),
7200
7270
  rightSlot
7201
7271
  ? (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' }), {
7272
+ ? 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
7273
  default: () => getSlotVNs(rightSlot({}))
7204
7274
  })
7205
7275
  : h('div', {
@@ -7803,8 +7873,9 @@ function createInternalData$l() {
7803
7873
  afterList: [],
7804
7874
  fullKeyMaps: {},
7805
7875
  rowMaps: {},
7806
- // 滚动条
7807
7876
  // resizeObserver: undefined,
7877
+ // 滚动条
7878
+ // scrollObserver: undefined,
7808
7879
  // isThumbDrag: false,
7809
7880
  thumbDragOffset: 0,
7810
7881
  yThumbTop: 0,
@@ -7867,7 +7938,7 @@ var VxeListComponent = defineVxeComponent({
7867
7938
  scrollY: Object,
7868
7939
  useScrollbar: {
7869
7940
  type: Boolean,
7870
- default: () => getConfig$4().list.useScrollbar
7941
+ default: () => getDefaultConfig(getConfig$4().list.useScrollbar, getConfig$4().useScrollbar)
7871
7942
  },
7872
7943
  scrollbarConfig: Object
7873
7944
  },
@@ -7902,7 +7973,6 @@ var VxeListComponent = defineVxeComponent({
7902
7973
  const refFooterElem = ref();
7903
7974
  const refVirtualWrapper = ref();
7904
7975
  const refVirtualBody = ref();
7905
- const refViewInnerElem = ref();
7906
7976
  const refTrackXElem = ref();
7907
7977
  const refTrackYElem = ref();
7908
7978
  const refThumbXElem = ref();
@@ -7955,17 +8025,15 @@ var VxeListComponent = defineVxeComponent({
7955
8025
  });
7956
8026
  const computeWrapperStyles = computed(() => {
7957
8027
  const rowHeight = computeRowHeight.value;
7958
- const scrollbarXOpts = computeScrollbarXOpts.value;
7959
- const scrollbarYOpts = computeScrollbarYOpts.value;
8028
+ const barWidth = computeScrollYWidth.value;
8029
+ const barHeight = computeScrollXHeight.value;
7960
8030
  const stys = {};
7961
8031
  if (rowHeight) {
7962
8032
  stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
7963
8033
  }
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);
8034
+ if (barWidth || barHeight) {
8035
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
8036
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
7969
8037
  }
7970
8038
  return stys;
7971
8039
  });
@@ -7993,24 +8061,49 @@ var VxeListComponent = defineVxeComponent({
7993
8061
  const scrollbarOpts = computeScrollbarOpts.value;
7994
8062
  return Object.assign({}, getConfig$4().scrollbar.yConfig, scrollbarOpts.yConfig);
7995
8063
  });
7996
- const computeScrollbarWrapperClss = computed(() => {
8064
+ const computeScrollXHeight = computed(() => {
7997
8065
  const scrollbarOpts = computeScrollbarOpts.value;
7998
- const { padding } = scrollbarOpts;
7999
- const { yThumbHeight, xThumbWidth } = reactData;
8000
8066
  const scrollbarXOpts = computeScrollbarXOpts.value;
8067
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig$4().scrollbar.height);
8068
+ });
8069
+ const computeScrollYWidth = computed(() => {
8070
+ const scrollbarOpts = computeScrollbarOpts.value;
8071
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8072
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig$4().scrollbar.width);
8073
+ });
8074
+ const computeScrollXVisible = computed(() => {
8075
+ const scrollbarOpts = computeScrollbarOpts.value;
8076
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8077
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
8078
+ });
8079
+ const computeScrollYVisible = computed(() => {
8080
+ const scrollbarOpts = computeScrollbarOpts.value;
8001
8081
  const scrollbarYOpts = computeScrollbarYOpts.value;
8082
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
8083
+ });
8084
+ const computeScrollXAutoHide = computed(() => {
8085
+ const scrollbarOpts = computeScrollbarOpts.value;
8086
+ const scrollbarXOpts = computeScrollbarXOpts.value;
8087
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig$4().scrollbar.autoHide);
8088
+ });
8089
+ const computeScrollYAutoHide = computed(() => {
8090
+ const scrollbarOpts = computeScrollbarOpts.value;
8091
+ const scrollbarYOpts = computeScrollbarYOpts.value;
8092
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig$4().scrollbar.autoHide);
8093
+ });
8094
+ const computeScrollbarWrapperClss = computed(() => {
8095
+ const { yThumbHeight, xThumbWidth } = reactData;
8002
8096
  const scrollbarXToTop = computeScrollbarXToTop.value;
8003
8097
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
8098
+ const scrollXVisible = computeScrollXVisible.value;
8099
+ const scrollYVisible = computeScrollYVisible.value;
8004
8100
  return domUtils$1.buildClass([
8005
8101
  'vxe-scrollbar is--virtual',
8006
- `ov-x--${scrollbarXOpts.visible || 'visible'}`,
8007
- `ov-y--${scrollbarYOpts.visible || 'visible'}`,
8102
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
8103
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
8008
8104
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
8009
8105
  `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
8010
8106
  ], {
8011
- 'is--padding': padding,
8012
- 'ov-x--auto-hide': scrollbarXOpts.autoHide,
8013
- 'ov-y--auto-hide': scrollbarYOpts.autoHide,
8014
8107
  'overflow-y': yThumbHeight,
8015
8108
  'overflow-x': xThumbWidth
8016
8109
  });
@@ -8036,6 +8129,10 @@ var VxeListComponent = defineVxeComponent({
8036
8129
  const keyField = computeKeyField.value;
8037
8130
  return getRowIdByField(row, keyField);
8038
8131
  };
8132
+ const getParentElem = () => {
8133
+ const el = refElem.value;
8134
+ return el ? el.parentElement : null;
8135
+ };
8039
8136
  const calcTableHeight = (key) => {
8040
8137
  const { parentHeight } = reactData;
8041
8138
  const val = props[key];
@@ -9889,7 +9986,7 @@ var VxeListComponent = defineVxeComponent({
9889
9986
  };
9890
9987
  const renderVN = () => {
9891
9988
  const { showCheckbox, className, loading, useScrollbar } = props;
9892
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
9989
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
9893
9990
  const defaultSlot = slots.default;
9894
9991
  const headerSlot = slots.header;
9895
9992
  const footerSlot = slots.footer;
@@ -9904,22 +10001,38 @@ var VxeListComponent = defineVxeComponent({
9904
10001
  const rowOpts = computeRowOpts.value;
9905
10002
  const { isHover, padding } = rowOpts;
9906
10003
  const isDrag = computeIsDrag.value;
9907
- const scrollbarXOpts = computeScrollbarXOpts.value;
9908
- const scrollbarYOpts = computeScrollbarYOpts.value;
10004
+ const scrollbarOpts = computeScrollbarOpts.value;
10005
+ const scrollXVisible = computeScrollXVisible.value;
10006
+ const scrollYVisible = computeScrollYVisible.value;
10007
+ const scrollbarXToTop = computeScrollbarXToTop.value;
10008
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
10009
+ const scrollXAutoHide = computeScrollXAutoHide.value;
10010
+ const scrollYAutoHide = computeScrollYAutoHide.value;
9909
10011
  const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
9910
10012
  const showDefChekboxHead = showCheckbox && showHeader !== false;
9911
10013
  const leOns = {};
9912
10014
  if (isCrossListDrag && !rowList.length) {
9913
10015
  leOns.onDragover = $xeList.handleCrossListRowDragoverEmptyEvent;
9914
10016
  }
9915
- return h('div', Object.assign({ ref: refElem, class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
10017
+ return h('div', Object.assign({ ref: refElem, class: [
10018
+ 'vxe-list',
10019
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
10020
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
10021
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
10022
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
10023
+ className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
10024
+ {
9916
10025
  [`size--${vSize}`]: vSize,
9917
10026
  'is--virtual-scrollbar': useScrollbar,
9918
- 'ov-x--auto-hide': useScrollbar && scrollbarXOpts.autoHide,
9919
- 'ov-y--auto-hide': useScrollbar && scrollbarYOpts.autoHide,
10027
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
10028
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
10029
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
10030
+ 'overflow-y': yThumbHeight,
10031
+ 'overflow-x': xThumbWidth,
9920
10032
  'is--drag': isDrag,
9921
10033
  'is--loading': loading
9922
- }], style: wrapperStyles }, leOns), [
10034
+ }
10035
+ ], style: wrapperStyles }, leOns), [
9923
10036
  headerSlot || showDefChekboxHead
9924
10037
  ? h('div', {
9925
10038
  ref: refHeaderElem,
@@ -9976,15 +10089,7 @@ var VxeListComponent = defineVxeComponent({
9976
10089
  style: {
9977
10090
  marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
9978
10091
  }
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
- ])
10092
+ }, defaultSlot ? defaultSlot({ items: rowList, $list: $xeList }) : rowList.map((row, i) => renderRow(row, i)))
9988
10093
  ]),
9989
10094
  footerSlot
9990
10095
  ? h('div', {
@@ -9999,7 +10104,7 @@ var VxeListComponent = defineVxeComponent({
9999
10104
  ? h('div', {
10000
10105
  class: scrollbarWrapperClss
10001
10106
  }, [
10002
- scrollbarXOpts.visible === 'hidden'
10107
+ scrollXVisible === false
10003
10108
  ? renderEmptyElement$1($xeList)
10004
10109
  : h('div', {
10005
10110
  ref: refTrackXElem,
@@ -10016,7 +10121,7 @@ var VxeListComponent = defineVxeComponent({
10016
10121
  onLostpointercapture: cleatPointerThumbEvent
10017
10122
  })
10018
10123
  ]),
10019
- scrollbarYOpts.visible === 'hidden'
10124
+ scrollYVisible === false
10020
10125
  ? renderEmptyElement$1($xeList)
10021
10126
  : h('div', {
10022
10127
  ref: refTrackYElem,
@@ -10068,11 +10173,30 @@ var VxeListComponent = defineVxeComponent({
10068
10173
  watch(() => props.syncResize, () => {
10069
10174
  reFlag.value++;
10070
10175
  });
10176
+ watch(() => props.useScrollbar, () => {
10177
+ reFlag.value++;
10178
+ });
10071
10179
  watch(computeRowHeight, () => {
10072
10180
  reFlag.value++;
10073
10181
  });
10074
- watch(reFlag, () => {
10182
+ watch(computeScrollYWidth, () => {
10183
+ reFlag.value++;
10184
+ });
10185
+ watch(computeScrollXHeight, () => {
10186
+ reFlag.value++;
10187
+ });
10188
+ watch(computeScrollXVisible, () => {
10189
+ nextTick(() => {
10190
+ reFlag.value++;
10191
+ });
10192
+ });
10193
+ watch(computeScrollYVisible, () => {
10075
10194
  nextTick(() => {
10195
+ reFlag.value++;
10196
+ });
10197
+ });
10198
+ watch(reFlag, () => {
10199
+ recalculate().then(() => {
10076
10200
  recalculate();
10077
10201
  });
10078
10202
  });
@@ -10120,20 +10244,32 @@ var VxeListComponent = defineVxeComponent({
10120
10244
  if (useKey && !keyField) {
10121
10245
  errLog$j('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
10122
10246
  }
10123
- if (useScrollbar || autoResize) {
10124
- const el = refElem.value;
10125
- const viewInnerEl = refViewInnerElem.value;
10126
- const resizeObserver = globalResize$1.create(() => {
10247
+ const el = refElem.value;
10248
+ if (useScrollbar) {
10249
+ const viewInnerEl = refVirtualBody.value;
10250
+ const scrollObserver = globalResize$1.create(() => {
10127
10251
  reFlag.value++;
10128
10252
  });
10129
- resizeObserver.observe(el);
10130
- if (autoResize) {
10131
- if (el) {
10132
- resizeObserver.observe(el.parentElement);
10133
- }
10253
+ if (el) {
10254
+ scrollObserver.observe(el);
10134
10255
  }
10135
10256
  if (viewInnerEl) {
10136
- resizeObserver.observe(viewInnerEl);
10257
+ scrollObserver.observe(viewInnerEl);
10258
+ }
10259
+ internalData.scrollObserver = scrollObserver;
10260
+ }
10261
+ if (autoResize) {
10262
+ const parentEl = getParentElem();
10263
+ const resizeObserver = globalResize$1.create(() => {
10264
+ if (props.autoResize) {
10265
+ reFlag.value++;
10266
+ }
10267
+ });
10268
+ if (el) {
10269
+ resizeObserver.observe(el);
10270
+ }
10271
+ if (parentEl) {
10272
+ resizeObserver.observe(parentEl);
10137
10273
  }
10138
10274
  internalData.resizeObserver = resizeObserver;
10139
10275
  }
@@ -10143,10 +10279,13 @@ var VxeListComponent = defineVxeComponent({
10143
10279
  });
10144
10280
  });
10145
10281
  onBeforeUnmount(() => {
10146
- const { resizeObserver } = internalData;
10282
+ const { scrollObserver, resizeObserver } = internalData;
10147
10283
  if (resizeObserver) {
10148
10284
  resizeObserver.disconnect();
10149
10285
  }
10286
+ if (scrollObserver) {
10287
+ scrollObserver.disconnect();
10288
+ }
10150
10289
  globalEvents$1.off($xeList, 'resize');
10151
10290
  XEUtils.assign(reactData, createReactData$m());
10152
10291
  XEUtils.assign(internalData, createInternalData$l());
@@ -24910,7 +25049,12 @@ var VxeDrawerComponent = defineVxeComponent({
24910
25049
  default: () => getConfig$4().drawer.size || getConfig$4().size
24911
25050
  },
24912
25051
  beforeHideMethod: Function,
24913
- slots: Object
25052
+ slots: Object,
25053
+ useScrollbar: {
25054
+ type: Boolean,
25055
+ default: () => getDefaultConfig(getConfig$4().drawer.useScrollbar, getConfig$4().useScrollbar)
25056
+ },
25057
+ scrollbarConfig: Object
24914
25058
  },
24915
25059
  emits: [
24916
25060
  'update:modelValue',
@@ -24971,6 +25115,25 @@ var VxeDrawerComponent = defineVxeComponent({
24971
25115
  }
24972
25116
  return 'wl';
24973
25117
  });
25118
+ const computeScrollbarOpts = computed(() => {
25119
+ return Object.assign({}, getConfig$4().modal.scrollbarConfig, props.scrollbarConfig);
25120
+ });
25121
+ const computeScrollbarProps = computed(() => {
25122
+ const scrollbarOpts = computeScrollbarOpts.value;
25123
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
25124
+ return {
25125
+ width: scrollbarOpts.width,
25126
+ height: scrollbarOpts.height,
25127
+ autoHide: scrollbarOpts.autoHide,
25128
+ visible: scrollbarOpts.visible,
25129
+ xConfig: scrollbarOpts.xConfig,
25130
+ yConfig: scrollbarOpts.yConfig,
25131
+ className: scrollbarOpts.className,
25132
+ viewAttrs: scrollbarOpts.viewAttrs,
25133
+ viewClassName: 'vxe-drawer--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
25134
+ viewInnerClassName: 'vxe-drawer--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
25135
+ };
25136
+ });
24974
25137
  const computeMaps = {};
24975
25138
  const $xeDrawer = {
24976
25139
  xID,
@@ -25271,10 +25434,40 @@ var VxeDrawerComponent = defineVxeComponent({
25271
25434
  return renderEmptyElement$1($xeDrawer);
25272
25435
  };
25273
25436
  const renderBody = () => {
25274
- const { slots: propSlots = {}, content, useHtml } = props;
25437
+ const { slots: propSlots = {}, content, useScrollbar, useHtml } = props;
25438
+ const scrollbarProps = computeScrollbarProps.value;
25275
25439
  const defaultSlot = slots.default || propSlots.default;
25276
25440
  const leftSlot = slots.left || propSlots.left;
25277
25441
  const rightSlot = slots.right || propSlots.right;
25442
+ const contVNs = [];
25443
+ if (useHtml && !defaultSlot) {
25444
+ contVNs.push(useScrollbar
25445
+ ? h(VxeScrollbar, Object.assign({ key: 'shc', class: 'vxe-drawer--scrollbar-content' }, scrollbarProps), {
25446
+ default() {
25447
+ return [
25448
+ h('div', {
25449
+ class: 'vxe-drawer--scrollbar-content-html',
25450
+ innerHTML: getFuncText(content)
25451
+ })
25452
+ ];
25453
+ }
25454
+ })
25455
+ : h('div', {
25456
+ key: 'hc',
25457
+ class: 'vxe-drawer--content',
25458
+ innerHTML: getFuncText(content)
25459
+ }));
25460
+ }
25461
+ else {
25462
+ contVNs.push(useScrollbar
25463
+ ? h(VxeScrollbar, Object.assign({ key: 'sdc', class: 'vxe-drawer--scrollbar-content' }, scrollbarProps), {
25464
+ default: () => defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content)
25465
+ })
25466
+ : h('div', {
25467
+ key: 'dc',
25468
+ class: 'vxe-drawer--content'
25469
+ }, defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content)));
25470
+ }
25278
25471
  return h('div', {
25279
25472
  class: 'vxe-drawer--body'
25280
25473
  }, [
@@ -25285,18 +25478,7 @@ var VxeDrawerComponent = defineVxeComponent({
25285
25478
  : renderEmptyElement$1($xeDrawer),
25286
25479
  h('div', {
25287
25480
  class: 'vxe-drawer--body-default'
25288
- }, [
25289
- useHtml && !defaultSlot
25290
- ? h('div', {
25291
- key: 'hc',
25292
- class: 'vxe-drawer--content',
25293
- innerHTML: getFuncText(content)
25294
- })
25295
- : h('div', {
25296
- key: 'dc',
25297
- class: 'vxe-drawer--content'
25298
- }, defaultSlot ? getSlotVNs(defaultSlot({ $drawer: $xeDrawer })) : getFuncText(content))
25299
- ]),
25481
+ }, contVNs),
25300
25482
  rightSlot
25301
25483
  ? h('div', {
25302
25484
  class: 'vxe-drawer--body-right'
@@ -29796,7 +29978,7 @@ var VxeLayoutAsideComponent = defineVxeComponent({
29796
29978
  collapseConfig: Object,
29797
29979
  useScrollbar: {
29798
29980
  type: Boolean,
29799
- default: () => getConfig$4().layoutAside.useScrollbar
29981
+ default: () => getDefaultConfig(getConfig$4().layoutAside.useScrollbar, getConfig$4().useScrollbar)
29800
29982
  },
29801
29983
  scrollbarConfig: Object,
29802
29984
  size: {
@@ -29857,7 +30039,7 @@ var VxeLayoutAsideComponent = defineVxeComponent({
29857
30039
  const vSize = computeSize.value;
29858
30040
  const collapseOpts = computeCollapseOpts.value;
29859
30041
  const scrollbarOpts = computeScrollbarOpts.value;
29860
- const { native, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
30042
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
29861
30043
  const defaultSlot = slots.default;
29862
30044
  return h('aside', {
29863
30045
  ref: refElem,
@@ -29872,13 +30054,16 @@ var VxeLayoutAsideComponent = defineVxeComponent({
29872
30054
  }, [
29873
30055
  useScrollbar
29874
30056
  ? h(VxeScrollbar, {
29875
- native,
30057
+ width: scrollbarOpts.width,
30058
+ height: scrollbarOpts.height,
30059
+ autoHide: scrollbarOpts.autoHide,
30060
+ visible: scrollbarOpts.visible,
29876
30061
  xConfig: {
29877
- visible: 'hidden'
30062
+ visible: false
29878
30063
  },
29879
- yConfig,
30064
+ yConfig: scrollbarOpts.yConfig,
29880
30065
  className: 'vxe-layout-aside--scrollbar' + (className ? (' ' + className) : ''),
29881
- viewAttrs,
30066
+ viewAttrs: scrollbarOpts.viewAttrs,
29882
30067
  viewClassName: 'vxe-layout-aside--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
29883
30068
  viewInnerClassName: 'vxe-layout-aside--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
29884
30069
  }, {
@@ -29932,7 +30117,7 @@ var VxeLayoutBodyComponent = defineVxeComponent({
29932
30117
  backtopConfig: Object,
29933
30118
  useScrollbar: {
29934
30119
  type: Boolean,
29935
- default: () => getConfig$4().layoutBody.useScrollbar
30120
+ default: () => getDefaultConfig(getConfig$4().layoutBody.useScrollbar, getConfig$4().useScrollbar)
29936
30121
  },
29937
30122
  scrollbarConfig: Object,
29938
30123
  size: {
@@ -29960,6 +30145,23 @@ var VxeLayoutBodyComponent = defineVxeComponent({
29960
30145
  const computeScrollbarOpts = computed(() => {
29961
30146
  return Object.assign({}, getConfig$4().layoutBody.scrollbarConfig, props.scrollbarConfig);
29962
30147
  });
30148
+ const computeScrollbarProps = computed(() => {
30149
+ const { showBacktop } = props;
30150
+ const scrollbarOpts = computeScrollbarOpts.value;
30151
+ const { className, viewClassName, viewInnerClassName } = scrollbarOpts;
30152
+ return {
30153
+ width: scrollbarOpts.width,
30154
+ height: scrollbarOpts.height,
30155
+ autoHide: scrollbarOpts.autoHide,
30156
+ visible: scrollbarOpts.visible,
30157
+ xConfig: scrollbarOpts.xConfig,
30158
+ yConfig: scrollbarOpts.yConfig,
30159
+ className: 'vxe-layout-body--scrollbar' + (className ? (' ' + className) : ''),
30160
+ viewAttrs: Object.assign(Object.assign({}, scrollbarOpts.viewAttrs), { id: showBacktop ? (backtopId || null) : null }),
30161
+ viewClassName: 'vxe-layout-body--scrollbar-view' + (viewClassName ? (' ' + viewClassName) : ''),
30162
+ viewInnerClassName: 'vxe-layout-body--scrollbar-inner' + (viewInnerClassName ? (' ' + viewInnerClassName) : '')
30163
+ };
30164
+ });
29963
30165
  const computeMaps = {
29964
30166
  computeSize
29965
30167
  };
@@ -29983,8 +30185,7 @@ var VxeLayoutBodyComponent = defineVxeComponent({
29983
30185
  const renderVN = () => {
29984
30186
  const { loading, padding, showBacktop, useScrollbar } = props;
29985
30187
  const backtopOpts = computeBacktopOpts.value;
29986
- const scrollbarOpts = computeScrollbarOpts.value;
29987
- const { native, xConfig, yConfig, className, viewAttrs, viewClassName, viewInnerClassName } = scrollbarOpts;
30188
+ const scrollbarProps = computeScrollbarProps.value;
29988
30189
  const vSize = computeSize.value;
29989
30190
  const defaultSlot = slots.default;
29990
30191
  const backtopSlot = slots.backtop;
@@ -30009,15 +30210,7 @@ var VxeLayoutBodyComponent = defineVxeComponent({
30009
30210
  }]
30010
30211
  }, [
30011
30212
  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
- }, {
30213
+ ? h(VxeScrollbar, scrollbarProps, {
30021
30214
  default: () => defaultSlot ? defaultSlot({}) : []
30022
30215
  })
30023
30216
  : h('div', {
@@ -30438,7 +30631,7 @@ var VxeMenuComponent = defineVxeComponent({
30438
30631
  menuConfig: Object,
30439
30632
  useScrollbar: {
30440
30633
  type: Boolean,
30441
- default: () => getConfig$1().menu.useScrollbar
30634
+ default: () => getDefaultConfig(getConfig$1().menu.useScrollbar, getConfig$1().useScrollbar)
30442
30635
  },
30443
30636
  scrollbarConfig: Object,
30444
30637
  appendTo: {
@@ -31340,6 +31533,11 @@ var VxeModalComponent = defineVxeComponent({
31340
31533
  },
31341
31534
  beforeHideMethod: Function,
31342
31535
  slots: Object,
31536
+ useScrollbar: {
31537
+ type: Boolean,
31538
+ default: () => getDefaultConfig(getConfig$4().modal.useScrollbar, getConfig$4().useScrollbar)
31539
+ },
31540
+ scrollbarConfig: Object,
31343
31541
  /**
31344
31542
  * 已废弃
31345
31543
  * @deprecated
@@ -31413,6 +31611,25 @@ var VxeModalComponent = defineVxeComponent({
31413
31611
  const computeZoomOpts = computed(() => {
31414
31612
  return Object.assign({}, getConfig$4().modal.zoomConfig, props.zoomConfig);
31415
31613
  });
31614
+ const computeScrollbarOpts = computed(() => {
31615
+ return Object.assign({}, getConfig$4().modal.scrollbarConfig, props.scrollbarConfig);
31616
+ });
31617
+ const computeScrollbarProps = computed(() => {
31618
+ const scrollbarOpts = computeScrollbarOpts.value;
31619
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
31620
+ return {
31621
+ width: scrollbarOpts.width,
31622
+ height: scrollbarOpts.height,
31623
+ autoHide: scrollbarOpts.autoHide,
31624
+ visible: scrollbarOpts.visible,
31625
+ xConfig: scrollbarOpts.xConfig,
31626
+ yConfig: scrollbarOpts.yConfig,
31627
+ className: scrollbarOpts.className,
31628
+ viewAttrs: scrollbarOpts.viewAttrs,
31629
+ viewClassName: 'vxe-modal--scrollbar-content-view' + (viewClassName ? (' ' + viewClassName) : ''),
31630
+ viewInnerClassName: 'vxe-modal--scrollbar-content-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
31631
+ };
31632
+ });
31416
31633
  const computeMaps = {
31417
31634
  computeSize,
31418
31635
  computeZoomOpts
@@ -32431,9 +32648,10 @@ var VxeModalComponent = defineVxeComponent({
32431
32648
  return renderEmptyElement$1($xeModal);
32432
32649
  };
32433
32650
  const renderBody = () => {
32434
- const { slots: propSlots = {}, status, message, iconStatus, useHtml } = props;
32651
+ const { slots: propSlots = {}, status, message, iconStatus, useScrollbar, useHtml } = props;
32435
32652
  const content = props.content || message;
32436
32653
  const isMsg = computeIsMsg.value;
32654
+ const scrollbarProps = computeScrollbarProps.value;
32437
32655
  const defaultSlot = slots.default || propSlots.default;
32438
32656
  const leftSlot = slots.left || propSlots.left;
32439
32657
  const rightSlot = slots.right || propSlots.right;
@@ -32447,16 +32665,34 @@ var VxeModalComponent = defineVxeComponent({
32447
32665
  })
32448
32666
  ]));
32449
32667
  }
32450
- contVNs.push(useHtml && !defaultSlot
32451
- ? h('div', {
32452
- key: 'hc',
32453
- class: 'vxe-modal--content',
32454
- innerHTML: getFuncText(content)
32455
- })
32456
- : h('div', {
32457
- key: 'dc',
32458
- class: 'vxe-modal--content'
32459
- }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)));
32668
+ if (useHtml && !defaultSlot) {
32669
+ contVNs.push(useScrollbar
32670
+ ? h(VxeScrollbar, Object.assign({ key: 'shc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
32671
+ default() {
32672
+ return [
32673
+ h('div', {
32674
+ class: 'vxe-modal--scrollbar-content-html',
32675
+ innerHTML: getFuncText(content)
32676
+ })
32677
+ ];
32678
+ }
32679
+ })
32680
+ : h('div', {
32681
+ key: 'hc',
32682
+ class: 'vxe-modal--content',
32683
+ innerHTML: getFuncText(content)
32684
+ }));
32685
+ }
32686
+ else {
32687
+ contVNs.push(useScrollbar
32688
+ ? h(VxeScrollbar, Object.assign({ key: 'sdc', class: 'vxe-modal--scrollbar-content' }, scrollbarProps), {
32689
+ default: () => defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)
32690
+ })
32691
+ : h('div', {
32692
+ key: 'dc',
32693
+ class: 'vxe-modal--content'
32694
+ }, defaultSlot ? getSlotVNs(defaultSlot({ $modal: $xeModal })) : getFuncText(content)));
32695
+ }
32460
32696
  return h('div', {
32461
32697
  class: 'vxe-modal--body'
32462
32698
  }, [
@@ -41278,7 +41514,7 @@ var VxeTabsComponent = defineVxeComponent({
41278
41514
  },
41279
41515
  useScrollbar: {
41280
41516
  type: Boolean,
41281
- default: () => getConfig$4().tabs.useScrollbar
41517
+ default: () => getDefaultConfig(getConfig$4().tabs.useScrollbar, getConfig$4().useScrollbar)
41282
41518
  },
41283
41519
  scrollbarConfig: Object,
41284
41520
  // 已废弃
@@ -41379,6 +41615,22 @@ var VxeTabsComponent = defineVxeComponent({
41379
41615
  const computeScrollbarOpts = computed(() => {
41380
41616
  return Object.assign({}, getConfig$4().tabs.scrollbarConfig, props.scrollbarConfig);
41381
41617
  });
41618
+ const computeScrollbarProps = computed(() => {
41619
+ const scrollbarOpts = computeScrollbarOpts.value;
41620
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
41621
+ return {
41622
+ width: scrollbarOpts.width,
41623
+ height: scrollbarOpts.height,
41624
+ autoHide: scrollbarOpts.autoHide,
41625
+ visible: scrollbarOpts.visible,
41626
+ xConfig: scrollbarOpts.xConfig,
41627
+ yConfig: scrollbarOpts.yConfig,
41628
+ className: scrollbarOpts.className,
41629
+ viewAttrs: scrollbarOpts.viewAttrs,
41630
+ viewClassName: 'vxe-tabs-pane--scrollbar-item-view' + (viewClassName ? (' ' + viewClassName) : ''),
41631
+ viewInnerClassName: 'vxe-tabs-pane--scrollbar-item-inner' + (viewClassName ? (' ' + viewInnerClassName) : '')
41632
+ };
41633
+ });
41382
41634
  const computeMaps = {};
41383
41635
  const $xeTabs = {
41384
41636
  xID,
@@ -41958,13 +42210,12 @@ var VxeTabsComponent = defineVxeComponent({
41958
42210
  const { initNames, activeName } = reactData;
41959
42211
  const { name, slots } = item;
41960
42212
  const defaultSlot = slots ? slots.default : null;
41961
- const scrollbarOpts = computeScrollbarOpts.value;
41962
- const { viewClassName, viewInnerClassName } = scrollbarOpts;
42213
+ const scrollbarProps = computeScrollbarProps.value;
41963
42214
  if (name && initNames.includes(name)) {
41964
42215
  return useScrollbar
41965
- ? h(VxeScrollbar, Object.assign(Object.assign({ key: `${name}`, class: ['vxe-tabs-pane--scrollbar-item', {
42216
+ ? h(VxeScrollbar, Object.assign({ key: `${name}`, class: ['vxe-tabs-pane--scrollbar-item', {
41966
42217
  'is--visible': activeName === name
41967
- }] }, scrollbarOpts), { viewClassName: 'vxe-tabs-pane--scrollbar-item-view' + (viewClassName ? (' ' + viewClassName) : ''), viewInnerClassName: 'vxe-tabs-pane--scrollbar-item-inner' + (viewClassName ? (' ' + viewInnerClassName) : '') }), {
42218
+ }] }, scrollbarProps), {
41968
42219
  default: () => defaultSlot ? callSlot(defaultSlot, { name }) : []
41969
42220
  })
41970
42221
  : h('div', {
@@ -43456,6 +43707,34 @@ const { menus, getConfig, getI18n, getIcon } = VxeUI;
43456
43707
  function getNodeUniqueId() {
43457
43708
  return XEUtils.uniqueId('node_');
43458
43709
  }
43710
+ function createReactData$2() {
43711
+ return {
43712
+ parentHeight: 0,
43713
+ customHeight: 0,
43714
+ customMinHeight: 0,
43715
+ customMaxHeight: 0,
43716
+ currentNode: null,
43717
+ scrollYLoad: false,
43718
+ bodyHeight: 0,
43719
+ topSpaceHeight: 0,
43720
+ selectRadioKey: null,
43721
+ treeList: [],
43722
+ updateExpandedFlag: 1,
43723
+ updateCheckboxFlag: 1,
43724
+ // 滚动条
43725
+ yThumbHeight: 0,
43726
+ xThumbWidth: 0,
43727
+ insertNodeFlag: 1,
43728
+ removeNodeFlag: 1,
43729
+ dragNode: null,
43730
+ dragTipText: '',
43731
+ isCrossDragNode: false,
43732
+ tooltipStore: {
43733
+ visible: false,
43734
+ node: null
43735
+ }
43736
+ };
43737
+ }
43459
43738
  function createInternalData$2() {
43460
43739
  return {
43461
43740
  // initialized: false,
@@ -43468,8 +43747,15 @@ function createInternalData$2() {
43468
43747
  indeterminateNodeMaps: {},
43469
43748
  treeExpandedMaps: {},
43470
43749
  treeExpandLazyLoadedMaps: {},
43471
- lastScrollLeft: 0,
43750
+ // resizeObserver: undefined,
43751
+ // 滚动条
43752
+ // scrollObserver: undefined,
43753
+ // isThumbDrag: false,
43754
+ thumbDragOffset: 0,
43755
+ yThumbTop: 0,
43756
+ xThumbLeft: 0,
43472
43757
  lastScrollTop: 0,
43758
+ lastScrollLeft: 0,
43473
43759
  scrollYStore: {
43474
43760
  startIndex: 0,
43475
43761
  endIndex: 0,
@@ -43486,31 +43772,6 @@ function createInternalData$2() {
43486
43772
  // hpTimeout: undefined
43487
43773
  };
43488
43774
  }
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
43775
  let crossTreeDragNodeObj = null;
43515
43776
  var VxeTreeComponent = defineVxeComponent({
43516
43777
  name: 'VxeTree',
@@ -43641,7 +43902,12 @@ var VxeTreeComponent = defineVxeComponent({
43641
43902
  type: String,
43642
43903
  default: () => getConfig().tree.size || getConfig().size
43643
43904
  },
43644
- virtualYConfig: Object
43905
+ virtualYConfig: Object,
43906
+ useScrollbar: {
43907
+ type: Boolean,
43908
+ default: () => getDefaultConfig(getConfig().tree.useScrollbar, getConfig().useScrollbar)
43909
+ },
43910
+ scrollbarConfig: Object
43645
43911
  },
43646
43912
  emits: [
43647
43913
  'update:modelValue',
@@ -43673,6 +43939,10 @@ var VxeTreeComponent = defineVxeComponent({
43673
43939
  const refFooterWrapperElem = ref();
43674
43940
  const refVirtualWrapper = ref();
43675
43941
  const refVirtualBody = ref();
43942
+ const refTrackXElem = ref();
43943
+ const refTrackYElem = ref();
43944
+ const refThumbXElem = ref();
43945
+ const refThumbYElem = ref();
43676
43946
  const refDragNodeLineElem = ref();
43677
43947
  const refDragTipElem = ref();
43678
43948
  const refTooltip = ref();
@@ -43744,6 +44014,16 @@ var VxeTreeComponent = defineVxeComponent({
43744
44014
  const computeMenuOpts = computed(() => {
43745
44015
  return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig);
43746
44016
  });
44017
+ const computeWrapperStyles = computed(() => {
44018
+ const barWidth = computeScrollYWidth.value;
44019
+ const barHeight = computeScrollXHeight.value;
44020
+ const stys = {};
44021
+ if (barWidth || barHeight) {
44022
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
44023
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
44024
+ }
44025
+ return stys;
44026
+ });
43747
44027
  const computeTreeStyle = computed(() => {
43748
44028
  const { indent } = props;
43749
44029
  const { customHeight, customMinHeight, customMaxHeight } = reactData;
@@ -43776,6 +44056,74 @@ var VxeTreeComponent = defineVxeComponent({
43776
44056
  const computeFilterOpts = computed(() => {
43777
44057
  return Object.assign({}, getConfig().tree.filterConfig, props.filterConfig);
43778
44058
  });
44059
+ const computeScrollbarOpts = computed(() => {
44060
+ return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
44061
+ });
44062
+ const computeScrollbarXOpts = computed(() => {
44063
+ const scrollbarOpts = computeScrollbarOpts.value;
44064
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
44065
+ visible: false
44066
+ });
44067
+ });
44068
+ const computeScrollbarYOpts = computed(() => {
44069
+ const scrollbarOpts = computeScrollbarOpts.value;
44070
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
44071
+ });
44072
+ const computeScrollXHeight = computed(() => {
44073
+ const scrollbarOpts = computeScrollbarOpts.value;
44074
+ const scrollbarXOpts = computeScrollbarXOpts.value;
44075
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
44076
+ });
44077
+ const computeScrollYWidth = computed(() => {
44078
+ const scrollbarOpts = computeScrollbarOpts.value;
44079
+ const scrollbarYOpts = computeScrollbarYOpts.value;
44080
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
44081
+ });
44082
+ const computeScrollXVisible = computed(() => {
44083
+ const scrollbarOpts = computeScrollbarOpts.value;
44084
+ const scrollbarXOpts = computeScrollbarXOpts.value;
44085
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
44086
+ });
44087
+ const computeScrollYVisible = computed(() => {
44088
+ const scrollbarOpts = computeScrollbarOpts.value;
44089
+ const scrollbarYOpts = computeScrollbarYOpts.value;
44090
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
44091
+ });
44092
+ const computeScrollXAutoHide = computed(() => {
44093
+ const scrollbarOpts = computeScrollbarOpts.value;
44094
+ const scrollbarXOpts = computeScrollbarXOpts.value;
44095
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
44096
+ });
44097
+ const computeScrollYAutoHide = computed(() => {
44098
+ const scrollbarOpts = computeScrollbarOpts.value;
44099
+ const scrollbarYOpts = computeScrollbarYOpts.value;
44100
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
44101
+ });
44102
+ const computeScrollbarWrapperClss = computed(() => {
44103
+ const { yThumbHeight, xThumbWidth } = reactData;
44104
+ const scrollbarXToTop = computeScrollbarXToTop.value;
44105
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
44106
+ const scrollXVisible = computeScrollXVisible.value;
44107
+ const scrollYVisible = computeScrollYVisible.value;
44108
+ return domUtils$1.buildClass([
44109
+ 'vxe-scrollbar is--virtual',
44110
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
44111
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
44112
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
44113
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
44114
+ ], {
44115
+ 'overflow-y': yThumbHeight,
44116
+ 'overflow-x': xThumbWidth
44117
+ });
44118
+ });
44119
+ const computeScrollbarXToTop = computed(() => {
44120
+ const scrollbarXOpts = computeScrollbarXOpts.value;
44121
+ return scrollbarXOpts.position === 'top';
44122
+ });
44123
+ const computeScrollbarYToLeft = computed(() => {
44124
+ const scrollbarYOpts = computeScrollbarYOpts.value;
44125
+ return scrollbarYOpts.position === 'left';
44126
+ });
43779
44127
  const computeMaps = {
43780
44128
  computeKeyField,
43781
44129
  computeParentField,
@@ -44293,6 +44641,10 @@ var VxeTreeComponent = defineVxeComponent({
44293
44641
  }
44294
44642
  });
44295
44643
  };
44644
+ const updateScrollbar = () => {
44645
+ updateThumbSize();
44646
+ updateThumbOffset();
44647
+ };
44296
44648
  /**
44297
44649
  * 重新计算列表
44298
44650
  */
@@ -44314,6 +44666,7 @@ var VxeTreeComponent = defineVxeComponent({
44314
44666
  const parentPaddingSize = getPaddingTopBottomSize(parentEl);
44315
44667
  reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
44316
44668
  }
44669
+ updateScrollbar();
44317
44670
  updateHeight();
44318
44671
  return computeScrollLoad().then(() => {
44319
44672
  updateHeight();
@@ -44347,6 +44700,7 @@ var VxeTreeComponent = defineVxeComponent({
44347
44700
  const scrollLeft = scrollBodyElem.scrollLeft;
44348
44701
  const isX = scrollLeft !== internalData.lastScrollLeft;
44349
44702
  const isY = scrollTop !== internalData.lastScrollTop;
44703
+ updateThumbOffset();
44350
44704
  internalData.lastScrollTop = scrollTop;
44351
44705
  internalData.lastScrollLeft = scrollLeft;
44352
44706
  if (reactData.scrollYLoad) {
@@ -44891,13 +45245,6 @@ var VxeTreeComponent = defineVxeComponent({
44891
45245
  emitRadioMode(value);
44892
45246
  dispatchEvent('radio-change', { node, value, checked: isChecked }, evnt);
44893
45247
  };
44894
- const handleGlobalResizeEvent = () => {
44895
- const el = refElem.value;
44896
- if (!el || !el.clientWidth) {
44897
- return;
44898
- }
44899
- recalculate();
44900
- };
44901
45248
  const insertTreeNode = (newRecords, isAppend) => {
44902
45249
  const { treeFullData, nodeMaps } = internalData;
44903
45250
  const keyField = computeKeyField.value;
@@ -46331,6 +46678,162 @@ var VxeTreeComponent = defineVxeComponent({
46331
46678
  hideDropTip();
46332
46679
  }
46333
46680
  };
46681
+ const updateThumbSize = () => {
46682
+ const viewEl = refVirtualWrapper.value;
46683
+ if (!viewEl) {
46684
+ return;
46685
+ }
46686
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
46687
+ return;
46688
+ }
46689
+ const trackXEl = refTrackXElem.value;
46690
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
46691
+ const thumbXElem = refThumbXElem.value;
46692
+ if (thumbXElem) {
46693
+ thumbXElem.style.width = xThumbWidth + 'px';
46694
+ }
46695
+ reactData.xThumbWidth = xThumbWidth;
46696
+ const trackYEl = refTrackYElem.value;
46697
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
46698
+ const thumbYElem = refThumbYElem.value;
46699
+ if (thumbYElem) {
46700
+ thumbYElem.style.height = yThumbHeight + 'px';
46701
+ }
46702
+ reactData.yThumbHeight = yThumbHeight;
46703
+ };
46704
+ const updateThumbOffset = () => {
46705
+ const viewEl = refVirtualWrapper.value;
46706
+ if (!viewEl) {
46707
+ return;
46708
+ }
46709
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
46710
+ return;
46711
+ }
46712
+ const { xThumbWidth, yThumbHeight } = reactData;
46713
+ const trackXEl = refTrackXElem.value;
46714
+ const thumbXElem = refThumbXElem.value;
46715
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
46716
+ internalData.xThumbLeft = xThumbLeft;
46717
+ if (thumbXElem && xThumbWidth) {
46718
+ thumbXElem.style.width = xThumbWidth + 'px';
46719
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
46720
+ }
46721
+ const trackYEl = refTrackYElem.value;
46722
+ const thumbYElem = refThumbYElem.value;
46723
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
46724
+ internalData.yThumbTop = yThumbTop;
46725
+ if (thumbYElem && yThumbHeight) {
46726
+ thumbYElem.style.height = yThumbHeight + 'px';
46727
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
46728
+ }
46729
+ };
46730
+ const clickTrackXEvent = (evnt) => {
46731
+ const trackEl = evnt.currentTarget;
46732
+ if (trackEl !== evnt.target) {
46733
+ return;
46734
+ }
46735
+ const viewEl = refVirtualWrapper.value;
46736
+ if (!viewEl) {
46737
+ return;
46738
+ }
46739
+ const { xThumbWidth } = reactData;
46740
+ const trackRect = trackEl.getBoundingClientRect();
46741
+ viewEl.scrollTo({
46742
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
46743
+ behavior: 'auto'
46744
+ });
46745
+ };
46746
+ const clickTrackYEvent = (evnt) => {
46747
+ const trackEl = evnt.currentTarget;
46748
+ if (trackEl !== evnt.target) {
46749
+ return;
46750
+ }
46751
+ const viewEl = refVirtualWrapper.value;
46752
+ if (!viewEl) {
46753
+ return;
46754
+ }
46755
+ const { yThumbHeight } = reactData;
46756
+ const trackRect = trackEl.getBoundingClientRect();
46757
+ viewEl.scrollTo({
46758
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
46759
+ behavior: 'auto'
46760
+ });
46761
+ };
46762
+ const pointerdownThumbXEvent = (evnt) => {
46763
+ const thumbEl = evnt.currentTarget;
46764
+ internalData.isThumbDrag = true;
46765
+ thumbEl.setPointerCapture(evnt.pointerId);
46766
+ const viewEl = refVirtualWrapper.value;
46767
+ if (!viewEl) {
46768
+ return;
46769
+ }
46770
+ const { xThumbWidth } = reactData;
46771
+ const trackEl = thumbEl.parentElement;
46772
+ const trackRect = trackEl.getBoundingClientRect();
46773
+ const pointerPosition = evnt.clientX - trackRect.left;
46774
+ // 记录 thumb 的偏移
46775
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
46776
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
46777
+ };
46778
+ const pointermoveThumbXEvent = (evnt) => {
46779
+ const thumbEl = evnt.currentTarget;
46780
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
46781
+ return;
46782
+ }
46783
+ const { isThumbDrag, thumbDragOffset } = internalData;
46784
+ if (isThumbDrag) {
46785
+ const viewEl = refVirtualWrapper.value;
46786
+ if (!viewEl) {
46787
+ return;
46788
+ }
46789
+ const { xThumbWidth } = reactData;
46790
+ const thumbEl = evnt.currentTarget;
46791
+ const trackEl = thumbEl.parentElement;
46792
+ const trackRect = trackEl.getBoundingClientRect();
46793
+ // 更新偏移
46794
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
46795
+ }
46796
+ };
46797
+ const cleatPointerThumbEvent = (evnt) => {
46798
+ const thumbEl = evnt.currentTarget;
46799
+ thumbEl.releasePointerCapture(evnt.pointerId);
46800
+ internalData.isThumbDrag = false;
46801
+ };
46802
+ const pointerdownThumbYEvent = (evnt) => {
46803
+ const thumbEl = evnt.currentTarget;
46804
+ internalData.isThumbDrag = true;
46805
+ thumbEl.setPointerCapture(evnt.pointerId);
46806
+ const viewEl = refVirtualWrapper.value;
46807
+ if (!viewEl) {
46808
+ return;
46809
+ }
46810
+ const { yThumbHeight } = reactData;
46811
+ const trackEl = thumbEl.parentElement;
46812
+ const trackRect = trackEl.getBoundingClientRect();
46813
+ const pointerPosition = evnt.clientY - trackRect.top;
46814
+ // 记录 thumb 的偏移
46815
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
46816
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
46817
+ };
46818
+ const pointermoveThumbYEvent = (evnt) => {
46819
+ const thumbEl = evnt.currentTarget;
46820
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
46821
+ return;
46822
+ }
46823
+ const { isThumbDrag, thumbDragOffset } = internalData;
46824
+ if (isThumbDrag) {
46825
+ const viewEl = refVirtualWrapper.value;
46826
+ if (!viewEl) {
46827
+ return;
46828
+ }
46829
+ const { yThumbHeight } = reactData;
46830
+ const thumbEl = evnt.currentTarget;
46831
+ const trackEl = thumbEl.parentElement;
46832
+ const trackRect = trackEl.getBoundingClientRect();
46833
+ // 更新偏移
46834
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
46835
+ }
46836
+ };
46334
46837
  Object.assign($xeTree, treeMethods, treePrivateMethods);
46335
46838
  const renderDragIcon = (node, nodeid) => {
46336
46839
  const { drag, transform } = props;
@@ -46640,13 +47143,14 @@ var VxeTreeComponent = defineVxeComponent({
46640
47143
  return renderEmptyElement$1($xeTree);
46641
47144
  };
46642
47145
  const renderVN = () => {
46643
- const { loading, trigger, showLine } = props;
46644
- const { bodyHeight, topSpaceHeight, treeList, tooltipStore } = reactData;
47146
+ const { loading, trigger, showLine, useScrollbar } = props;
47147
+ const { bodyHeight, topSpaceHeight, treeList, tooltipStore, xThumbWidth, yThumbHeight } = reactData;
46645
47148
  const vSize = computeSize.value;
46646
47149
  const radioOpts = computeRadioOpts.value;
46647
47150
  const checkboxOpts = computeCheckboxOpts.value;
46648
47151
  const loadingOpts = computeLoadingOpts.value;
46649
47152
  const isNodeHover = computeIsNodeHover.value;
47153
+ const wrapperStyles = computeWrapperStyles.value;
46650
47154
  const treeStyle = computeTreeStyle.value;
46651
47155
  const dragOpts = computeDragOpts.value;
46652
47156
  const tooltipOpts = computeTooltipOpts.value;
@@ -46654,19 +47158,40 @@ var VxeTreeComponent = defineVxeComponent({
46654
47158
  const headerSlot = slots.header;
46655
47159
  const footerSlot = slots.footer;
46656
47160
  const tooltipSlot = slots.tooltip;
47161
+ const scrollbarOpts = computeScrollbarOpts.value;
47162
+ const scrollXVisible = computeScrollXVisible.value;
47163
+ const scrollYVisible = computeScrollYVisible.value;
47164
+ const scrollbarXToTop = computeScrollbarXToTop.value;
47165
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
47166
+ const scrollXAutoHide = computeScrollXAutoHide.value;
47167
+ const scrollYAutoHide = computeScrollYAutoHide.value;
47168
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
46657
47169
  const teOns = {};
46658
47170
  if (dragOpts.isCrossTreeDrag && !treeList.length) {
46659
47171
  teOns.onDragover = $xeTree.handleCrossTreeNodeDragoverEmptyEvent;
46660
47172
  }
46661
- return h('div', Object.assign({ ref: refElem, class: ['vxe-tree', {
47173
+ return h('div', Object.assign({ ref: refElem, class: [
47174
+ 'vxe-tree',
47175
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
47176
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
47177
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
47178
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
47179
+ {
46662
47180
  [`size--${vSize}`]: vSize,
46663
47181
  'show--line': showLine,
47182
+ 'is--virtual-scrollbar': useScrollbar,
47183
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
47184
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
47185
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
47186
+ 'overflow-y': yThumbHeight,
47187
+ 'overflow-x': xThumbWidth,
46664
47188
  'checkbox--highlight': checkboxOpts.highlight,
46665
47189
  'radio--highlight': radioOpts.highlight,
46666
47190
  'node--hover': isNodeHover,
46667
47191
  'node--trigger': trigger === 'node',
46668
47192
  'is--loading': loading
46669
- }] }, teOns), [
47193
+ }
47194
+ ], style: wrapperStyles }, teOns), [
46670
47195
  headerSlot
46671
47196
  ? h('div', {
46672
47197
  ref: refHeaderWrapperElem,
@@ -46699,6 +47224,49 @@ var VxeTreeComponent = defineVxeComponent({
46699
47224
  class: 'vxe-tree--footer-wrapper'
46700
47225
  }, footerSlot({ $tree: $xeTree }))
46701
47226
  : renderEmptyElement$1($xeTree),
47227
+ /**
47228
+ * 滚动条
47229
+ */
47230
+ useScrollbar
47231
+ ? h('div', {
47232
+ class: scrollbarWrapperClss
47233
+ }, [
47234
+ scrollXVisible === false
47235
+ ? renderEmptyElement$1($xeTree)
47236
+ : h('div', {
47237
+ ref: refTrackXElem,
47238
+ class: 'vxe-scrollbar--track-x',
47239
+ onClick: clickTrackXEvent
47240
+ }, [
47241
+ h('div', {
47242
+ ref: refThumbXElem,
47243
+ class: 'vxe-scrollbar--thumb-x',
47244
+ onPointerdown: pointerdownThumbXEvent,
47245
+ onPointermove: pointermoveThumbXEvent,
47246
+ onPointerup: cleatPointerThumbEvent,
47247
+ onPointercancel: cleatPointerThumbEvent,
47248
+ onLostpointercapture: cleatPointerThumbEvent
47249
+ })
47250
+ ]),
47251
+ scrollYVisible === false
47252
+ ? renderEmptyElement$1($xeTree)
47253
+ : h('div', {
47254
+ ref: refTrackYElem,
47255
+ class: 'vxe-scrollbar--track-y',
47256
+ onClick: clickTrackYEvent
47257
+ }, [
47258
+ h('div', {
47259
+ ref: refThumbYElem,
47260
+ class: 'vxe-scrollbar--thumb-y',
47261
+ onPointerdown: pointerdownThumbYEvent,
47262
+ onPointermove: pointermoveThumbYEvent,
47263
+ onPointerup: cleatPointerThumbEvent,
47264
+ onPointercancel: cleatPointerThumbEvent,
47265
+ onLostpointercapture: cleatPointerThumbEvent
47266
+ })
47267
+ ])
47268
+ ])
47269
+ : renderEmptyElement$1($xeTree),
46702
47270
  /**
46703
47271
  * 拖拽提示
46704
47272
  */
@@ -46782,21 +47350,42 @@ var VxeTreeComponent = defineVxeComponent({
46782
47350
  watch(() => props.filterValue, () => {
46783
47351
  triggerSearchEvent(new Event('filter'));
46784
47352
  });
46785
- const hFlag = ref(0);
47353
+ const reFlag = ref(0);
46786
47354
  watch(() => props.height, () => {
46787
- hFlag.value++;
47355
+ reFlag.value++;
46788
47356
  });
46789
47357
  watch(() => props.minHeight, () => {
46790
- hFlag.value++;
47358
+ reFlag.value++;
46791
47359
  });
46792
47360
  watch(() => props.maxHeight, () => {
46793
- hFlag.value++;
47361
+ reFlag.value++;
46794
47362
  });
46795
- watch(hFlag, () => {
46796
- recalculate();
47363
+ watch(() => props.useScrollbar, () => {
47364
+ reFlag.value++;
47365
+ });
47366
+ watch(computeScrollYWidth, () => {
47367
+ reFlag.value++;
47368
+ });
47369
+ watch(computeScrollXHeight, () => {
47370
+ reFlag.value++;
47371
+ });
47372
+ watch(computeScrollXVisible, () => {
47373
+ nextTick(() => {
47374
+ reFlag.value++;
47375
+ });
47376
+ });
47377
+ watch(computeScrollYVisible, () => {
47378
+ nextTick(() => {
47379
+ reFlag.value++;
47380
+ });
47381
+ });
47382
+ watch(reFlag, () => {
47383
+ recalculate().then(() => {
47384
+ recalculate();
47385
+ });
46797
47386
  });
46798
47387
  onMounted(() => {
46799
- const { transform, drag, menuConfig, showOverflow, lazy, loadMethod } = props;
47388
+ const { transform, drag, menuConfig, showOverflow, lazy, loadMethod, autoResize, useScrollbar } = props;
46800
47389
  const dragOpts = computeDragOpts.value;
46801
47390
  if (!showOverflow) {
46802
47391
  errLog$2('vxe.error.errProp', ['show-overflow=false', 'show-overflow=true']);
@@ -46817,12 +47406,25 @@ var VxeTreeComponent = defineVxeComponent({
46817
47406
  if (menuConfig && !VxeUIContextMenu) {
46818
47407
  errLog$2('vxe.error.reqComp', ['vxe-context-menu']);
46819
47408
  }
46820
- if (props.autoResize) {
46821
- const el = refElem.value;
47409
+ const el = refElem.value;
47410
+ if (useScrollbar || autoResize) {
47411
+ const viewInnerEl = refVirtualBody.value;
47412
+ const scrollObserver = globalResize$1.create(() => {
47413
+ updateScrollbar();
47414
+ });
47415
+ if (el) {
47416
+ scrollObserver.observe(el);
47417
+ }
47418
+ if (viewInnerEl) {
47419
+ scrollObserver.observe(viewInnerEl);
47420
+ }
47421
+ internalData.scrollObserver = scrollObserver;
47422
+ }
47423
+ if (autoResize) {
46822
47424
  const parentEl = getParentElem();
46823
47425
  const resizeObserver = globalResize$1.create(() => {
46824
47426
  if (props.autoResize) {
46825
- recalculate();
47427
+ reFlag.value++;
46826
47428
  }
46827
47429
  });
46828
47430
  if (el) {
@@ -46833,14 +47435,19 @@ var VxeTreeComponent = defineVxeComponent({
46833
47435
  }
46834
47436
  internalData.resizeObserver = resizeObserver;
46835
47437
  }
46836
- recalculate();
46837
- globalEvents$1.on($xeTree, 'resize', handleGlobalResizeEvent);
47438
+ reFlag.value++;
47439
+ globalEvents$1.on($xeTree, 'resize', () => {
47440
+ reFlag.value++;
47441
+ });
46838
47442
  });
46839
47443
  onBeforeUnmount(() => {
46840
- const { resizeObserver } = internalData;
47444
+ const { scrollObserver, resizeObserver } = internalData;
46841
47445
  if (resizeObserver) {
46842
47446
  resizeObserver.disconnect();
46843
47447
  }
47448
+ if (scrollObserver) {
47449
+ scrollObserver.disconnect();
47450
+ }
46844
47451
  globalEvents$1.off($xeTree, 'resize');
46845
47452
  XEUtils.assign(reactData, createReactData$2());
46846
47453
  XEUtils.assign(internalData, createInternalData$2());