vxe-pc-ui 4.20.11 → 4.20.13

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 (74) hide show
  1. package/dist/all.esm.js +43 -12
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/icon/style.css +1 -1
  5. package/es/list/src/list.js +7 -1
  6. package/es/scrollbar/src/scrollbar.js +6 -1
  7. package/es/scrollbar/style.css +25 -12
  8. package/es/scrollbar/style.min.css +1 -1
  9. package/es/select/src/select.js +7 -1
  10. package/es/style.css +1 -1
  11. package/es/style.min.css +1 -1
  12. package/es/tabs/src/tabs.js +14 -6
  13. package/es/tree/src/tree.js +7 -1
  14. package/es/ui/index.js +1 -1
  15. package/es/ui/src/log.js +1 -1
  16. package/es/vxe-scrollbar/style.css +25 -12
  17. package/es/vxe-scrollbar/style.min.css +1 -1
  18. package/lib/icon/style/style.css +1 -1
  19. package/lib/icon/style/style.min.css +1 -1
  20. package/lib/index.umd.js +46 -18
  21. package/lib/index.umd.min.js +1 -1
  22. package/lib/list/src/list.js +7 -2
  23. package/lib/list/src/list.min.js +1 -1
  24. package/lib/scrollbar/src/scrollbar.js +7 -2
  25. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  26. package/lib/scrollbar/style/style.css +25 -12
  27. package/lib/scrollbar/style/style.min.css +1 -1
  28. package/lib/select/src/select.js +7 -2
  29. package/lib/select/src/select.min.js +1 -1
  30. package/lib/style.css +1 -1
  31. package/lib/style.min.css +1 -1
  32. package/lib/tabs/src/tabs.js +14 -6
  33. package/lib/tabs/src/tabs.min.js +1 -1
  34. package/lib/tree/src/tree.js +7 -2
  35. package/lib/tree/src/tree.min.js +1 -1
  36. package/lib/ui/index.js +1 -1
  37. package/lib/ui/index.min.js +1 -1
  38. package/lib/ui/src/log.js +1 -1
  39. package/lib/ui/src/log.min.js +1 -1
  40. package/lib/vxe-scrollbar/style/style.css +25 -12
  41. package/lib/vxe-scrollbar/style/style.min.css +1 -1
  42. package/package.json +3 -3
  43. package/packages/list/src/list.ts +7 -1
  44. package/packages/scrollbar/src/scrollbar.ts +6 -1
  45. package/packages/select/src/select.ts +7 -1
  46. package/packages/tabs/src/tabs.ts +14 -6
  47. package/packages/tree/src/tree.ts +7 -1
  48. package/styles/components/scrollbar.scss +30 -12
  49. package/styles/theme/base.scss +4 -0
  50. package/types/components/card.d.ts +1 -1
  51. package/types/components/drawer.d.ts +1 -1
  52. package/types/components/icon-picker.d.ts +1 -1
  53. package/types/components/layout-aside.d.ts +2 -2
  54. package/types/components/layout-body.d.ts +1 -1
  55. package/types/components/list.d.ts +1 -1
  56. package/types/components/menu.d.ts +10 -1
  57. package/types/components/modal.d.ts +1 -1
  58. package/types/components/scrollbar.d.ts +5 -0
  59. package/types/components/select.d.ts +1 -1
  60. package/types/components/table.d.ts +4 -0
  61. package/types/components/tooltip.d.ts +1 -1
  62. package/types/components/tree.d.ts +1 -1
  63. /package/es/icon/{iconfont.1792226845944.ttf → iconfont.1792480474156.ttf} +0 -0
  64. /package/es/icon/{iconfont.1792226845944.woff → iconfont.1792480474156.woff} +0 -0
  65. /package/es/icon/{iconfont.1792226845944.woff2 → iconfont.1792480474156.woff2} +0 -0
  66. /package/es/{iconfont.1792226845944.ttf → iconfont.1792480474156.ttf} +0 -0
  67. /package/es/{iconfont.1792226845944.woff → iconfont.1792480474156.woff} +0 -0
  68. /package/es/{iconfont.1792226845944.woff2 → iconfont.1792480474156.woff2} +0 -0
  69. /package/lib/icon/style/{iconfont.1792226845944.ttf → iconfont.1792480474156.ttf} +0 -0
  70. /package/lib/icon/style/{iconfont.1792226845944.woff → iconfont.1792480474156.woff} +0 -0
  71. /package/lib/icon/style/{iconfont.1792226845944.woff2 → iconfont.1792480474156.woff2} +0 -0
  72. /package/lib/{iconfont.1792226845944.ttf → iconfont.1792480474156.ttf} +0 -0
  73. /package/lib/{iconfont.1792226845944.woff → iconfont.1792480474156.woff} +0 -0
  74. /package/lib/{iconfont.1792226845944.woff2 → iconfont.1792480474156.woff2} +0 -0
@@ -1 +1 @@
1
- .vxe-scrollbar{position:relative}.vxe-scrollbar.is--virtual>.vxe-scrollbar--view{scrollbar-width:none;-ms-overflow-style:none}.vxe-scrollbar.is--virtual>.vxe-scrollbar--view::-webkit-scrollbar{display:none}.vxe-scrollbar.is--virtual.ov-x--auto-hide:hover>.vxe-scrollbar--track-x{opacity:1}.vxe-scrollbar.is--virtual.ov-x--auto-hide>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-scrollbar.is--virtual.ov-y--auto-hide:hover>.vxe-scrollbar--track-y{opacity:1}.vxe-scrollbar.is--virtual.ov-y--auto-hide>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar{width:var(--vxe-ui-scrollbar-y-width);height:var(--vxe-ui-scrollbar-x-height)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb{border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-scrollbar-thumb-background-color)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb:hover{background-color:var(--vxe-ui-scrollbar-thumb-hover-background-color)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb:active{background-color:var(--vxe-ui-scrollbar-thumb-active-background-color)}.vxe-scrollbar.ov-x--hidden>.vxe-scrollbar--view{overflow-x:hidden}.vxe-scrollbar.ov-y--hidden>.vxe-scrollbar--view{overflow-y:hidden}.vxe-scrollbar--view{height:100%;width:100%;overflow-x:auto;overflow-y:auto}.vxe-scrollbar--track-x,.vxe-scrollbar--track-y{display:none;position:absolute;background-color:var(--vxe-ui-scrollbar-track-background-color);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-scrollbar.overflow-x>.vxe-scrollbar--track-x{display:block}.vxe-scrollbar.overflow-y>.vxe-scrollbar--track-y{display:block}.vxe-scrollbar--track-x{width:100%;left:0;height:var(--vxe-ui-scrollbar-x-height);padding:var(--vxe-ui-scrollbar-track-padding) 0}.vxe-scrollbar--track-y{height:100%;top:0;width:var(--vxe-ui-scrollbar-y-width);padding:0 var(--vxe-ui-scrollbar-track-padding)}.vxe-scrollbar.sx-pos--top>.vxe-scrollbar--track-x{top:0}.vxe-scrollbar.sx-pos--bottom>.vxe-scrollbar--track-x{bottom:0}.vxe-scrollbar.sy-pos--left>.vxe-scrollbar--track-y{left:0}.vxe-scrollbar.sy-pos--right>.vxe-scrollbar--track-y{right:0}.vxe-scrollbar.overflow-x.overflow-y>.vxe-scrollbar--track-x{width:calc(100% - var(--vxe-ui-scrollbar-x-height))}.vxe-scrollbar.overflow-x.overflow-y>.vxe-scrollbar--track-y{height:calc(100% - var(--vxe-ui-scrollbar-y-width))}.vxe-scrollbar.overflow-x.overflow-y.sx-pos--top.sy-pos--left>.vxe-scrollbar--track-y,.vxe-scrollbar.overflow-x.overflow-y.sx-pos--top.sy-pos--right>.vxe-scrollbar--track-y{top:var(--vxe-ui-scrollbar-x-height)}.vxe-scrollbar.overflow-x.overflow-y.sy-pos--left.sx-pos--bottom>.vxe-scrollbar--track-x,.vxe-scrollbar.overflow-x.overflow-y.sy-pos--left.sx-pos--top>.vxe-scrollbar--track-x{left:var(--vxe-ui-scrollbar-y-width)}.vxe-scrollbar.is--padding.overflow-x.sx-pos--top{padding-top:var(--vxe-ui-scrollbar-x-height)}.vxe-scrollbar.is--padding.overflow-x.sx-pos--bottom{padding-bottom:var(--vxe-ui-scrollbar-x-height)}.vxe-scrollbar.is--padding.overflow-y.sy-pos--left{padding-left:var(--vxe-ui-scrollbar-y-width)}.vxe-scrollbar.is--padding.overflow-y.sy-pos--right{padding-right:var(--vxe-ui-scrollbar-y-width)}.vxe-scrollbar--thumb-y{width:100%}.vxe-scrollbar--thumb-x{height:100%}.vxe-scrollbar--thumb-x,.vxe-scrollbar--thumb-y{border-radius:var(--vxe-ui-scrollbar-thumb-border-radius);background-color:var(--vxe-ui-scrollbar-thumb-background-color)}.vxe-scrollbar--thumb-x:hover,.vxe-scrollbar--thumb-y:hover{background-color:var(--vxe-ui-scrollbar-thumb-hover-background-color)}.vxe-scrollbar--thumb-x:active,.vxe-scrollbar--thumb-y:active{background-color:var(--vxe-ui-scrollbar-thumb-active-background-color)}.vxe-scrollbar.theme--light{--vxe-ui-scrollbar-thumb-background-color:rgba(0,0,0,0.4);--vxe-ui-scrollbar-thumb-hover-background-color:rgba(0,0,0,0.5);--vxe-ui-scrollbar-thumb-active-background-color:rgba(0,0,0,0.6)}.vxe-scrollbar.theme--dark{--vxe-ui-scrollbar-thumb-background-color:rgba(255,255,255,0.4);--vxe-ui-scrollbar-thumb-hover-background-color:rgba(255,255,255,0.5);--vxe-ui-scrollbar-thumb-active-background-color:rgba(255,255,255,0.6)}
1
+ .vxe-scrollbar{position:relative}.vxe-scrollbar.is--virtual>.vxe-scrollbar--view{scrollbar-width:none;-ms-overflow-style:none}.vxe-scrollbar.is--virtual>.vxe-scrollbar--view::-webkit-scrollbar{display:none}.vxe-scrollbar.is--virtual.ov-x--auto-hide:hover>.vxe-scrollbar--track-x{opacity:1}.vxe-scrollbar.is--virtual.ov-x--auto-hide>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-scrollbar.is--virtual.ov-y--auto-hide:hover>.vxe-scrollbar--track-y{opacity:1}.vxe-scrollbar.is--virtual.ov-y--auto-hide>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar{width:var(--vxe-ui-scrollbar-current-y-width);height:var(--vxe-ui-scrollbar-current-x-height)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb{border-radius:var(--vxe-ui-base-border-radius);background-color:var(--vxe-ui-scrollbar-thumb-background-color)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb:hover{background-color:var(--vxe-ui-scrollbar-thumb-hover-background-color)}.vxe-scrollbar.is--native>.vxe-scrollbar--view::-webkit-scrollbar-thumb:active{background-color:var(--vxe-ui-scrollbar-thumb-active-background-color)}.vxe-scrollbar.ov-x--hidden>.vxe-scrollbar--view{overflow-x:hidden}.vxe-scrollbar.ov-y--hidden>.vxe-scrollbar--view{overflow-y:hidden}.vxe-scrollbar--view{height:100%;width:100%;overflow-x:auto;overflow-y:auto}.vxe-scrollbar--track-x,.vxe-scrollbar--track-y{display:none;position:absolute;background-color:var(--vxe-ui-scrollbar-track-background-color);overflow:hidden;-webkit-user-select:none;-moz-user-select:none;user-select:none}.vxe-scrollbar.overflow-x>.vxe-scrollbar--track-x{display:block}.vxe-scrollbar.overflow-y>.vxe-scrollbar--track-y{display:block}.vxe-scrollbar--track-x{width:100%;left:0;height:var(--vxe-ui-scrollbar-current-x-height);padding:var(--vxe-ui-scrollbar-track-padding) 0}.vxe-scrollbar--track-y{height:100%;top:0;width:var(--vxe-ui-scrollbar-current-y-width);padding:0 var(--vxe-ui-scrollbar-track-padding)}.vxe-scrollbar.sx-pos--top>.vxe-scrollbar--track-x{top:0}.vxe-scrollbar.sx-pos--bottom>.vxe-scrollbar--track-x{bottom:0}.vxe-scrollbar.sy-pos--left>.vxe-scrollbar--track-y{left:0}.vxe-scrollbar.sy-pos--right>.vxe-scrollbar--track-y{right:0}.vxe-scrollbar.overflow-x.overflow-y>.vxe-scrollbar--track-x{width:calc(100% - var(--vxe-ui-scrollbar-current-x-height))}.vxe-scrollbar.overflow-x.overflow-y>.vxe-scrollbar--track-y{height:calc(100% - var(--vxe-ui-scrollbar-current-y-width))}.vxe-scrollbar.overflow-x.overflow-y.sx-pos--top.sy-pos--left>.vxe-scrollbar--track-y,.vxe-scrollbar.overflow-x.overflow-y.sx-pos--top.sy-pos--right>.vxe-scrollbar--track-y{top:var(--vxe-ui-scrollbar-current-x-height)}.vxe-scrollbar.overflow-x.overflow-y.sy-pos--left.sx-pos--bottom>.vxe-scrollbar--track-x,.vxe-scrollbar.overflow-x.overflow-y.sy-pos--left.sx-pos--top>.vxe-scrollbar--track-x{left:var(--vxe-ui-scrollbar-current-y-width)}.vxe-scrollbar.is--fluent-overlay{--vxe-ui-scrollbar-current-y-width:var(--vxe-ui-scrollbar-overlay-y-width);--vxe-ui-scrollbar-current-x-height:var(--vxe-ui-scrollbar-overlay-x-height)}.vxe-scrollbar.is--fluent-overlay>.vxe-scrollbar--track-x:hover,.vxe-scrollbar.is--fluent-overlay>.vxe-scrollbar--track-y:hover{--vxe-ui-scrollbar-current-y-width:var(--vxe-ui-scrollbar-overlay-action-y-width);--vxe-ui-scrollbar-current-x-height:var(--vxe-ui-scrollbar-overlay-action-x-height)}.vxe-scrollbar.is--default-mode{--vxe-ui-scrollbar-current-y-width:var(--vxe-ui-scrollbar-y-width);--vxe-ui-scrollbar-current-x-height:var(--vxe-ui-scrollbar-x-height)}.vxe-scrollbar.is--padding.overflow-x.sx-pos--top{padding-top:var(--vxe-ui-scrollbar-current-x-height)}.vxe-scrollbar.is--padding.overflow-x.sx-pos--bottom{padding-bottom:var(--vxe-ui-scrollbar-current-x-height)}.vxe-scrollbar.is--padding.overflow-y.sy-pos--left{padding-left:var(--vxe-ui-scrollbar-current-y-width)}.vxe-scrollbar.is--padding.overflow-y.sy-pos--right{padding-right:var(--vxe-ui-scrollbar-current-y-width)}.vxe-scrollbar--thumb-y{width:100%}.vxe-scrollbar--thumb-x{height:100%}.vxe-scrollbar--thumb-x,.vxe-scrollbar--thumb-y{border-radius:var(--vxe-ui-scrollbar-thumb-border-radius);background-color:var(--vxe-ui-scrollbar-thumb-background-color)}.vxe-scrollbar--thumb-x:hover,.vxe-scrollbar--thumb-y:hover{background-color:var(--vxe-ui-scrollbar-thumb-hover-background-color)}.vxe-scrollbar--thumb-x:active,.vxe-scrollbar--thumb-y:active{background-color:var(--vxe-ui-scrollbar-thumb-active-background-color)}.vxe-scrollbar.theme--light{--vxe-ui-scrollbar-thumb-background-color:rgba(0,0,0,0.4);--vxe-ui-scrollbar-thumb-hover-background-color:rgba(0,0,0,0.5);--vxe-ui-scrollbar-thumb-active-background-color:rgba(0,0,0,0.6)}.vxe-scrollbar.theme--dark{--vxe-ui-scrollbar-thumb-background-color:rgba(255,255,255,0.4);--vxe-ui-scrollbar-thumb-hover-background-color:rgba(255,255,255,0.5);--vxe-ui-scrollbar-thumb-active-background-color:rgba(255,255,255,0.6)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vxe-pc-ui",
3
- "version": "4.20.11",
3
+ "version": "4.20.13",
4
4
  "description": "A vue based PC component library",
5
5
  "scripts": {
6
6
  "update": "npm install --legacy-peer-deps",
@@ -66,8 +66,8 @@
66
66
  "typescript": "~5.9.3",
67
67
  "vue": "3.4.27",
68
68
  "vue-router": "~4.5.1",
69
- "vxe-table": "^4.22.3",
70
- "vxe-gantt": "^4.8.0"
69
+ "vxe-table": "^4.23.1",
70
+ "vxe-gantt": "^4.9.1"
71
71
  },
72
72
  "vetur": {
73
73
  "tags": "helper/vetur/tags.json",
@@ -335,12 +335,14 @@ export default defineVxeComponent({
335
335
 
336
336
  const computeScrollbarWrapperClss = computed(() => {
337
337
  const { yThumbHeight, xThumbWidth } = reactData
338
+ const scrollbarOpts = computeScrollbarOpts.value
338
339
  const scrollbarXToTop = computeScrollbarXToTop.value
339
340
  const scrollbarYToLeft = computeScrollbarYToLeft.value
340
341
  const scrollXVisible = computeScrollXVisible.value
341
342
  const scrollYVisible = computeScrollYVisible.value
342
343
  return domUtils.buildClass([
343
344
  'vxe-scrollbar is--virtual',
345
+ scrollbarOpts.fluentOverlay ? 'is--fluent-overlay' : 'is--default-mode',
344
346
  `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
345
347
  `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
346
348
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
@@ -1970,13 +1972,17 @@ export default defineVxeComponent({
1970
1972
  if (isVScrollbar) {
1971
1973
  if (!scrollObserver) {
1972
1974
  const el = refElem.value
1973
- const viewInnerEl = refVirtualSpaceElem.value
1975
+ const viewSpaceEl = refVirtualSpaceElem.value
1976
+ const viewInnerEl = refVirtualBody.value
1974
1977
  const scrollObserver = globalResize.create(() => {
1975
1978
  reScrollFlag.value++
1976
1979
  })
1977
1980
  if (el) {
1978
1981
  scrollObserver.observe(el)
1979
1982
  }
1983
+ if (viewSpaceEl) {
1984
+ scrollObserver.observe(viewSpaceEl)
1985
+ }
1980
1986
  if (viewInnerEl) {
1981
1987
  scrollObserver.observe(viewInnerEl)
1982
1988
  }
@@ -49,6 +49,10 @@ export default defineVxeComponent({
49
49
  type: Boolean as PropType<VxeScrollbarPropTypes.Native>,
50
50
  default: () => getConfig().scrollbar.native
51
51
  },
52
+ fluentOverlay: {
53
+ type: Boolean as PropType<VxeScrollbarPropTypes.FluentOverlay>,
54
+ default: () => getConfig().scrollbar.fluentOverlay
55
+ },
52
56
  padding: {
53
57
  type: Boolean as PropType<VxeScrollbarPropTypes.Padding>,
54
58
  default: () => getConfig().scrollbar.padding
@@ -185,7 +189,7 @@ export default defineVxeComponent({
185
189
  })
186
190
 
187
191
  const computeWrapperClss = computed(() => {
188
- const { native, theme, className, padding } = props
192
+ const { native, theme, className, padding, fluentOverlay } = props
189
193
  const { yThumbHeight, xThumbWidth } = reactData
190
194
  const vSize = computeSize.value
191
195
  const xToTop = computeXToTop.value
@@ -198,6 +202,7 @@ export default defineVxeComponent({
198
202
  'vxe-scrollbar',
199
203
  vSize ? `size--${vSize}` : '',
200
204
  theme ? `theme--${theme}` : '',
205
+ fluentOverlay ? 'is--fluent-overlay' : 'is--default-mode',
201
206
  `ov-x--${xVisible === false ? 'hidden' : 'visible'}`,
202
207
  `ov-y--${yVisible === false ? 'hidden' : 'visible'}`,
203
208
  `sx-pos--${xToTop ? 'top' : 'bottom'}`,
@@ -529,12 +529,14 @@ export default defineVxeComponent({
529
529
 
530
530
  const computeScrollbarWrapperClss = computed(() => {
531
531
  const { yThumbHeight, xThumbWidth } = reactData
532
+ const scrollbarOpts = computeScrollbarOpts.value
532
533
  const scrollbarXToTop = computeScrollbarXToTop.value
533
534
  const scrollbarYToLeft = computeScrollbarYToLeft.value
534
535
  const scrollXVisible = computeScrollXVisible.value
535
536
  const scrollYVisible = computeScrollYVisible.value
536
537
  return domUtils.buildClass([
537
538
  'vxe-scrollbar is--virtual',
539
+ scrollbarOpts.fluentOverlay ? 'is--fluent-overlay' : 'is--default-mode',
538
540
  `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
539
541
  `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
540
542
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
@@ -1560,13 +1562,17 @@ export default defineVxeComponent({
1560
1562
  if (isVScrollbar) {
1561
1563
  if (!scrollObserver) {
1562
1564
  const el = refElem.value
1563
- const viewInnerEl = refVirtualSpaceElem.value
1565
+ const viewSpaceEl = refVirtualSpaceElem.value
1566
+ const viewInnerEl = refVirtualBody.value
1564
1567
  const scrollObserver = globalResize.create(() => {
1565
1568
  reScrollFlag.value++
1566
1569
  })
1567
1570
  if (el) {
1568
1571
  scrollObserver.observe(el)
1569
1572
  }
1573
+ if (viewSpaceEl) {
1574
+ scrollObserver.observe(viewSpaceEl)
1575
+ }
1570
1576
  if (viewInnerEl) {
1571
1577
  scrollObserver.observe(viewInnerEl)
1572
1578
  }
@@ -280,7 +280,7 @@ export default defineVxeComponent({
280
280
  if (index > -1) {
281
281
  const tabEl = children[index] as HTMLDivElement
282
282
  if (tabEl) {
283
- const tabHeight = tabEl.clientHeight
283
+ let tabHeight = tabEl.clientHeight
284
284
  const tabWidth = tabEl.clientWidth
285
285
  if (tabType === 'card') {
286
286
  lintWidth = tabWidth
@@ -291,8 +291,12 @@ export default defineVxeComponent({
291
291
  lintHeight = tabHeight
292
292
  lintTop = tabEl.offsetTop - 1
293
293
  } else {
294
- lintHeight = Math.max(4, Math.floor(tabHeight * 0.6))
295
- lintTop = tabEl.offsetTop + Math.floor((tabHeight - lintHeight) / 2)
294
+ const tabStyle = getComputedStyle(tabEl)
295
+ const paddingTop = XEUtils.toNumber(tabStyle.paddingTop)
296
+ const paddingBottom = XEUtils.toNumber(tabStyle.paddingBottom)
297
+ tabHeight -= (paddingTop + paddingBottom)
298
+ lintHeight = Math.max(4, tabHeight)
299
+ lintTop = tabEl.offsetTop + paddingTop + Math.floor((tabHeight - lintHeight) / 2)
296
300
  }
297
301
  }
298
302
  }
@@ -301,7 +305,7 @@ export default defineVxeComponent({
301
305
  if (index > -1) {
302
306
  const tabEl = children[index] as HTMLDivElement
303
307
  if (tabEl) {
304
- const tabWidth = tabEl.clientWidth
308
+ let tabWidth = tabEl.clientWidth
305
309
  if (tabType === 'card') {
306
310
  lintWidth = tabWidth + 1
307
311
  lintLeft = tabEl.offsetLeft
@@ -309,8 +313,12 @@ export default defineVxeComponent({
309
313
  lintWidth = tabWidth
310
314
  lintLeft = tabEl.offsetLeft - 1
311
315
  } else {
312
- lintWidth = Math.max(4, Math.floor(tabWidth * 0.6))
313
- lintLeft = tabEl.offsetLeft + Math.floor((tabWidth - lintWidth) / 2)
316
+ const tabStyle = getComputedStyle(tabEl)
317
+ const paddingLeft = XEUtils.toNumber(tabStyle.paddingLeft)
318
+ const paddingRight = XEUtils.toNumber(tabStyle.paddingRight)
319
+ tabWidth -= (paddingLeft + paddingRight)
320
+ lintWidth = Math.max(4, tabWidth)
321
+ lintLeft = tabEl.offsetLeft + paddingLeft + Math.floor((tabWidth - lintWidth) / 2)
314
322
  }
315
323
  }
316
324
  }
@@ -470,12 +470,14 @@ export default defineVxeComponent({
470
470
 
471
471
  const computeScrollbarWrapperClss = computed(() => {
472
472
  const { yThumbHeight, xThumbWidth } = reactData
473
+ const scrollbarOpts = computeScrollbarOpts.value
473
474
  const scrollbarXToTop = computeScrollbarXToTop.value
474
475
  const scrollbarYToLeft = computeScrollbarYToLeft.value
475
476
  const scrollXVisible = computeScrollXVisible.value
476
477
  const scrollYVisible = computeScrollYVisible.value
477
478
  return domUtils.buildClass([
478
479
  'vxe-scrollbar is--virtual',
480
+ scrollbarOpts.fluentOverlay ? 'is--fluent-overlay' : 'is--default-mode',
479
481
  `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
480
482
  `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
481
483
  `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
@@ -3144,13 +3146,17 @@ export default defineVxeComponent({
3144
3146
  if (isVScrollbar) {
3145
3147
  if (!scrollObserver) {
3146
3148
  const el = refElem.value
3147
- const viewInnerEl = refVirtualSpaceElem.value
3149
+ const viewSpaceEl = refVirtualSpaceElem.value
3150
+ const viewInnerEl = refVirtualBody.value
3148
3151
  const scrollObserver = globalResize.create(() => {
3149
3152
  reScrollFlag.value++
3150
3153
  })
3151
3154
  if (el) {
3152
3155
  scrollObserver.observe(el)
3153
3156
  }
3157
+ if (viewSpaceEl) {
3158
+ scrollObserver.observe(viewSpaceEl)
3159
+ }
3154
3160
  if (viewInnerEl) {
3155
3161
  scrollObserver.observe(viewInnerEl)
3156
3162
  }
@@ -35,8 +35,8 @@
35
35
  }
36
36
  &.is--native {
37
37
  & > .vxe-scrollbar--view::-webkit-scrollbar {
38
- width: var(--vxe-ui-scrollbar-y-width);
39
- height: var(--vxe-ui-scrollbar-x-height);
38
+ width: var(--vxe-ui-scrollbar-current-y-width);
39
+ height: var(--vxe-ui-scrollbar-current-x-height);
40
40
  }
41
41
  & > .vxe-scrollbar--view::-webkit-scrollbar-thumb {
42
42
  border-radius: var(--vxe-ui-base-border-radius);
@@ -95,13 +95,13 @@
95
95
  .vxe-scrollbar--track-x {
96
96
  width: 100%;
97
97
  left: 0;
98
- height: var(--vxe-ui-scrollbar-x-height);
98
+ height: var(--vxe-ui-scrollbar-current-x-height);
99
99
  padding: var(--vxe-ui-scrollbar-track-padding) 0;
100
100
  }
101
101
  .vxe-scrollbar--track-y {
102
102
  height: 100%;
103
103
  top: 0;
104
- width: var(--vxe-ui-scrollbar-y-width);
104
+ width: var(--vxe-ui-scrollbar-current-y-width);
105
105
  padding: 0 var(--vxe-ui-scrollbar-track-padding);
106
106
  }
107
107
  .vxe-scrollbar {
@@ -128,16 +128,16 @@
128
128
  &.overflow-x {
129
129
  &.overflow-y {
130
130
  & > .vxe-scrollbar--track-x {
131
- width: calc(100% - var(--vxe-ui-scrollbar-x-height));
131
+ width: calc(100% - var(--vxe-ui-scrollbar-current-x-height));
132
132
  }
133
133
  & > .vxe-scrollbar--track-y {
134
- height: calc(100% - var(--vxe-ui-scrollbar-y-width));
134
+ height: calc(100% - var(--vxe-ui-scrollbar-current-y-width));
135
135
  }
136
136
  &.sx-pos--top {
137
137
  &.sy-pos--left,
138
138
  &.sy-pos--right {
139
139
  & > .vxe-scrollbar--track-y {
140
- top: var(--vxe-ui-scrollbar-x-height);
140
+ top: var(--vxe-ui-scrollbar-current-x-height);
141
141
  }
142
142
  }
143
143
  }
@@ -145,7 +145,7 @@
145
145
  &.sx-pos--top,
146
146
  &.sx-pos--bottom {
147
147
  & > .vxe-scrollbar--track-x {
148
- left: var(--vxe-ui-scrollbar-y-width);
148
+ left: var(--vxe-ui-scrollbar-current-y-width);
149
149
  }
150
150
  }
151
151
  }
@@ -153,22 +153,40 @@
153
153
  }
154
154
  }
155
155
 
156
+ .vxe-scrollbar {
157
+ &.is--fluent-overlay {
158
+ --vxe-ui-scrollbar-current-y-width: var(--vxe-ui-scrollbar-overlay-y-width);
159
+ --vxe-ui-scrollbar-current-x-height: var(--vxe-ui-scrollbar-overlay-x-height);
160
+ & > .vxe-scrollbar--track-x,
161
+ & > .vxe-scrollbar--track-y {
162
+ &:hover {
163
+ --vxe-ui-scrollbar-current-y-width: var(--vxe-ui-scrollbar-overlay-action-y-width);
164
+ --vxe-ui-scrollbar-current-x-height: var(--vxe-ui-scrollbar-overlay-action-x-height);
165
+ }
166
+ }
167
+ }
168
+ &.is--default-mode {
169
+ --vxe-ui-scrollbar-current-y-width: var(--vxe-ui-scrollbar-y-width);
170
+ --vxe-ui-scrollbar-current-x-height: var(--vxe-ui-scrollbar-x-height);
171
+ }
172
+ }
173
+
156
174
  .vxe-scrollbar {
157
175
  &.is--padding {
158
176
  &.overflow-x {
159
177
  &.sx-pos--top {
160
- padding-top: var(--vxe-ui-scrollbar-x-height);
178
+ padding-top: var(--vxe-ui-scrollbar-current-x-height);
161
179
  }
162
180
  &.sx-pos--bottom {
163
- padding-bottom: var(--vxe-ui-scrollbar-x-height);
181
+ padding-bottom: var(--vxe-ui-scrollbar-current-x-height);
164
182
  }
165
183
  }
166
184
  &.overflow-y {
167
185
  &.sy-pos--left {
168
- padding-left: var(--vxe-ui-scrollbar-y-width);
186
+ padding-left: var(--vxe-ui-scrollbar-current-y-width);
169
187
  }
170
188
  &.sy-pos--right {
171
- padding-right: var(--vxe-ui-scrollbar-y-width);
189
+ padding-right: var(--vxe-ui-scrollbar-current-y-width);
172
190
  }
173
191
  }
174
192
  }
@@ -322,6 +322,10 @@
322
322
  /*scrollbar*/
323
323
  --vxe-ui-scrollbar-y-width: 10px;
324
324
  --vxe-ui-scrollbar-x-height: var(--vxe-ui-scrollbar-y-width);
325
+ --vxe-ui-scrollbar-overlay-y-width: 4px;
326
+ --vxe-ui-scrollbar-overlay-x-height: var(--vxe-ui-scrollbar-overlay-y-width);
327
+ --vxe-ui-scrollbar-overlay-action-y-width: 12px;
328
+ --vxe-ui-scrollbar-overlay-action-x-height: var(--vxe-ui-scrollbar-overlay-action-y-width);
325
329
  --vxe-ui-scrollbar-track-background-color: transparent;
326
330
  --vxe-ui-scrollbar-track-padding: 0;
327
331
  --vxe-ui-scrollbar-thumb-border-radius: var(--vxe-ui-base-border-radius);
@@ -34,7 +34,7 @@ export namespace VxeCardPropTypes {
34
34
  export type Padding = boolean
35
35
  export type Size = VxeComponentSizeType
36
36
  export type UseScrollbar = VxeComponentIsVScrollbar
37
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
37
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
38
38
  /**
39
39
  * 滚动条宽度
40
40
  */
@@ -75,7 +75,7 @@ export namespace VxeDrawerPropTypes {
75
75
  export type BeforeHideMethod = (params: VxeDrawerDefines.DrawerVisibleParams) => Promise<any>
76
76
  export type Slots = VxeDrawerSlots
77
77
  export type UseScrollbar = VxeComponentIsVScrollbar
78
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
78
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
79
79
  /**
80
80
  * 滚动条宽度
81
81
  */
@@ -95,7 +95,7 @@ export namespace VxeIconPickerPropTypes {
95
95
  }
96
96
  export type Transfer = boolean
97
97
  export type UseScrollbar = VxeComponentIsVScrollbar
98
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
98
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
99
99
  /**
100
100
  * 滚动条宽度
101
101
  */
@@ -1,5 +1,5 @@
1
1
  import { RenderFunction, ComputedRef, SetupContext, Ref } from 'vue'
2
- import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentBaseOptions, VxeComponentEventParams, ValueOf, VxeComponentSizeType, VxeComponentStyleType,VxeComponentIsVScrollbar } from '@vxe-ui/core'
2
+ import { DefineVxeComponentApp, DefineVxeComponentOptions, DefineVxeComponentInstance, VxeComponentBaseOptions, VxeComponentEventParams, ValueOf, VxeComponentSizeType, VxeComponentStyleType, VxeComponentIsVScrollbar } from '@vxe-ui/core'
3
3
  import { VxeScrollbarProps } from './scrollbar'
4
4
 
5
5
  /* eslint-disable no-use-before-define,@typescript-eslint/ban-types */
@@ -37,7 +37,7 @@ export namespace VxeLayoutAsidePropTypes {
37
37
  animation?: boolean
38
38
  }
39
39
  export type UseScrollbar = VxeComponentIsVScrollbar
40
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
40
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
41
41
  /**
42
42
  * 滚动条宽度
43
43
  */
@@ -32,7 +32,7 @@ export namespace VxeLayoutBodyPropTypes {
32
32
  export type ShowBacktop = boolean
33
33
  export interface BacktopConfig extends Omit<VxeBacktopProps, 'target'> {}
34
34
  export type UseScrollbar = VxeComponentIsVScrollbar
35
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
35
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
36
36
  /**
37
37
  * 滚动条宽度
38
38
  */
@@ -228,7 +228,7 @@ export namespace VxeListPropTypes {
228
228
  enabled?: boolean
229
229
  }
230
230
  export type UseScrollbar = VxeComponentIsVScrollbar
231
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible'> {
231
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible'> {
232
232
  /**
233
233
  * 滚动条宽度
234
234
  */
@@ -87,7 +87,16 @@ export namespace VxeMenuPropTypes {
87
87
  }
88
88
  export type AppendTo = string | HTMLElement | ((params: {}) => string | HTMLElement)
89
89
  export type UseScrollbar = VxeComponentIsVScrollbar
90
- export interface ScrollbarConfig extends VxeScrollbarProps {}
90
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
91
+ /**
92
+ * 滚动条宽度
93
+ */
94
+ width?: number | string
95
+ /**
96
+ * 滚动条高度
97
+ */
98
+ height?: number | string
99
+ }
91
100
  }
92
101
 
93
102
  export interface VxeMenuProps {
@@ -128,7 +128,7 @@ export namespace VxeModalPropTypes {
128
128
  }) => Promise<any>
129
129
  export type Slots = VxeModalSlots
130
130
  export type UseScrollbar = VxeComponentIsVScrollbar
131
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
131
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
132
132
  /**
133
133
  * 滚动条宽度
134
134
  */
@@ -38,6 +38,7 @@ export namespace VxeScrollbarPropTypes {
38
38
  export type Native = boolean
39
39
  export type Padding = boolean
40
40
  export type AutoHide = boolean
41
+ export type FluentOverlay = boolean
41
42
  export type Visible = boolean
42
43
  export interface XConfig {
43
44
  height?: number | string
@@ -136,6 +137,10 @@ export interface VxeScrollbarProps {
136
137
  * 是否自动隐藏
137
138
  */
138
139
  autoHide?: VxeScrollbarPropTypes.AutoHide
140
+ /**
141
+ * 是否悬浮叠加滚动条,默认细线,鼠标悬浮上去滑块变宽
142
+ */
143
+ fluentOverlay?: VxeScrollbarPropTypes.FluentOverlay
139
144
  /**
140
145
  * 是否显示
141
146
  */
@@ -203,7 +203,7 @@ export namespace VxeSelectPropTypes {
203
203
  */
204
204
  export interface ScrollY extends VirtualYConfig {}
205
205
  export type UseScrollbar = VxeComponentIsVScrollbar
206
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
206
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
207
207
  /**
208
208
  * 滚动条宽度
209
209
  */
@@ -3041,6 +3041,10 @@ export namespace VxeTablePropTypes {
3041
3041
  * 是否自动隐藏滚动条
3042
3042
  */
3043
3043
  autoHide?: boolean
3044
+ /**
3045
+ * 是否悬浮叠加滚动条,默认细线,鼠标悬浮上去滑块变宽
3046
+ */
3047
+ fluentOverlay?: boolean
3044
3048
  /**
3045
3049
  * 是否显示
3046
3050
  */
@@ -50,7 +50,7 @@ export namespace VxeTooltipPropTypes {
50
50
  export type AppendTo = string | HTMLElement | ((params: {}) => string | HTMLElement)
51
51
  export type Transfer = boolean
52
52
  export type UseScrollbar = VxeComponentIsVScrollbar
53
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
53
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible' | 'className' | 'viewAttrs' | 'viewClassName' | 'viewInnerClassName'> {
54
54
  /**
55
55
  * 滚动条宽度
56
56
  */
@@ -333,7 +333,7 @@ export namespace VxeTreePropTypes {
333
333
  enabled?: boolean
334
334
  }
335
335
  export type UseScrollbar = VxeComponentIsVScrollbar
336
- export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'visible'> {
336
+ export interface ScrollbarConfig extends Pick<VxeScrollbarProps, 'xConfig' | 'yConfig' | 'padding' | 'autoHide' | 'fluentOverlay' | 'visible'> {
337
337
  /**
338
338
  * 滚动条宽度
339
339
  */