vxe-pc-ui 3.19.8 → 3.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/es/card/src/card.js +18 -3
  2. package/es/icon/style.css +1 -1
  3. package/es/language/fr-FR.js +29 -29
  4. package/es/layout-aside/src/layout-aside.js +8 -5
  5. package/es/layout-body/src/layout-body.js +22 -11
  6. package/es/list/src/list.js +409 -21
  7. package/es/list/style.css +43 -0
  8. package/es/list/style.min.css +1 -1
  9. package/es/scrollbar/src/scrollbar.js +69 -17
  10. package/es/scrollbar/style.css +1 -0
  11. package/es/style.css +1 -1
  12. package/es/style.min.css +1 -1
  13. package/es/tabs/src/tabs.js +19 -3
  14. package/es/tree/src/tree.js +439 -56
  15. package/es/tree/style.css +43 -0
  16. package/es/tree/style.min.css +1 -1
  17. package/es/ui/index.js +1 -1
  18. package/es/ui/src/log.js +1 -1
  19. package/es/ui/src/utils.js +12 -0
  20. package/es/vxe-list/style.css +43 -0
  21. package/es/vxe-list/style.min.css +1 -1
  22. package/es/vxe-scrollbar/style.css +1 -0
  23. package/es/vxe-tree/style.css +43 -0
  24. package/es/vxe-tree/style.min.css +1 -1
  25. package/lib/card/src/card.js +18 -3
  26. package/lib/card/src/card.min.js +1 -1
  27. package/lib/icon/style/style.css +1 -1
  28. package/lib/icon/style/style.min.css +1 -1
  29. package/lib/index.umd.js +956 -126
  30. package/lib/index.umd.min.js +1 -1
  31. package/lib/language/fr-FR.js +29 -29
  32. package/lib/language/fr-FR.min.js +1 -1
  33. package/lib/language/fr-FR.umd.js +29 -29
  34. package/lib/layout-aside/src/layout-aside.js +8 -8
  35. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  36. package/lib/layout-body/src/layout-body.js +26 -19
  37. package/lib/layout-body/src/layout-body.min.js +1 -1
  38. package/lib/list/src/list.js +383 -22
  39. package/lib/list/src/list.min.js +1 -1
  40. package/lib/list/style/style.css +43 -0
  41. package/lib/list/style/style.min.css +1 -1
  42. package/lib/scrollbar/src/scrollbar.js +74 -15
  43. package/lib/scrollbar/src/scrollbar.min.js +1 -1
  44. package/lib/scrollbar/style/style.css +1 -0
  45. package/lib/style.css +1 -1
  46. package/lib/style.min.css +1 -1
  47. package/lib/tabs/src/tabs.js +20 -7
  48. package/lib/tabs/src/tabs.min.js +1 -1
  49. package/lib/tree/src/tree.js +416 -53
  50. package/lib/tree/src/tree.min.js +1 -1
  51. package/lib/tree/style/style.css +43 -0
  52. package/lib/tree/style/style.min.css +1 -1
  53. package/lib/ui/index.js +1 -1
  54. package/lib/ui/index.min.js +1 -1
  55. package/lib/ui/src/log.js +1 -1
  56. package/lib/ui/src/log.min.js +1 -1
  57. package/lib/ui/src/utils.js +14 -0
  58. package/lib/ui/src/utils.min.js +1 -1
  59. package/lib/vxe-list/style/style.css +43 -0
  60. package/lib/vxe-list/style/style.min.css +1 -1
  61. package/lib/vxe-scrollbar/style/style.css +1 -0
  62. package/lib/vxe-tree/style/style.css +43 -0
  63. package/lib/vxe-tree/style/style.min.css +1 -1
  64. package/package.json +1 -1
  65. package/packages/card/src/card.ts +19 -3
  66. package/packages/language/fr-FR.ts +903 -903
  67. package/packages/layout-aside/src/layout-aside.ts +8 -5
  68. package/packages/layout-body/src/layout-body.ts +26 -14
  69. package/packages/list/src/list.ts +444 -25
  70. package/packages/scrollbar/src/scrollbar.ts +79 -17
  71. package/packages/tabs/src/tabs.ts +20 -7
  72. package/packages/tree/src/tree.ts +482 -67
  73. package/packages/ui/src/utils.ts +14 -0
  74. package/styles/components/list.scss +76 -0
  75. package/styles/components/scrollbar.scss +3 -0
  76. package/styles/components/tree.scss +76 -0
  77. package/types/components/card.d.ts +10 -1
  78. package/types/components/layout-aside.d.ts +10 -1
  79. package/types/components/layout-body.d.ts +10 -1
  80. package/types/components/list.d.ts +33 -2
  81. package/types/components/scrollbar.d.ts +16 -2
  82. package/types/components/table-plugins/extend-cell-area.d.ts +1 -1
  83. package/types/components/table.d.ts +71 -4
  84. package/types/components/tabs.d.ts +10 -1
  85. package/types/components/tree.d.ts +33 -2
  86. /package/es/icon/{iconfont.1791862954819.ttf → iconfont.1791950618327.ttf} +0 -0
  87. /package/es/icon/{iconfont.1791862954819.woff → iconfont.1791950618327.woff} +0 -0
  88. /package/es/icon/{iconfont.1791862954819.woff2 → iconfont.1791950618327.woff2} +0 -0
  89. /package/es/{iconfont.1791862954819.ttf → iconfont.1791950618327.ttf} +0 -0
  90. /package/es/{iconfont.1791862954819.woff → iconfont.1791950618327.woff} +0 -0
  91. /package/es/{iconfont.1791862954819.woff2 → iconfont.1791950618327.woff2} +0 -0
  92. /package/lib/icon/style/{iconfont.1791862954819.ttf → iconfont.1791950618327.ttf} +0 -0
  93. /package/lib/icon/style/{iconfont.1791862954819.woff → iconfont.1791950618327.woff} +0 -0
  94. /package/lib/icon/style/{iconfont.1791862954819.woff2 → iconfont.1791950618327.woff2} +0 -0
  95. /package/lib/{iconfont.1791862954819.ttf → iconfont.1791950618327.ttf} +0 -0
  96. /package/lib/{iconfont.1791862954819.woff → iconfont.1791950618327.woff} +0 -0
  97. /package/lib/{iconfont.1791862954819.woff2 → iconfont.1791950618327.woff2} +0 -0
@@ -1,12 +1,13 @@
1
1
  import { defineVxeComponent } from '../../ui/src/comp';
2
2
  import XEUtils from 'xe-utils';
3
- import { VxeUI, getConfig, getIcon, getI18n, menus, globalEvents, globalResize, createEvent, globalMixins, renderEmptyElement } from '../../ui';
3
+ import { VxeUI, getConfig, getIcon, getI18n, domUtils, menus, globalEvents, globalResize, createEvent, globalMixins, renderEmptyElement } from '../../ui';
4
4
  import { crossListDragRowGlobal, getCrossListDragRowInfo } from './store';
5
5
  import { addClass, getTpImg, hasClass, isScale, removeClass, toCssUnit } from '../../ui/src/dom';
6
- import { isEnableConf, getText, enModelValue, deModelValue } from '../../ui/src/utils';
6
+ import { isEnableConf, getText, enModelValue, deModelValue, getDefaultConfig } from '../../ui/src/utils';
7
7
  import { getSlotVNs } from '../../ui/src/vn';
8
8
  import { createComponentLog } from '../../ui/src/log';
9
9
  import { moveRowAnimateToTb, clearRowAnimate } from '../../ui/src/anime';
10
+ import { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } from '../../scrollbar/src/util';
10
11
  import { getItemCacheObj } from './util';
11
12
  import VxeLoadingComponent from '../../loading';
12
13
  const { warnLog, errLog } = createComponentLog('tree');
@@ -40,6 +41,9 @@ function createReactData() {
40
41
  updateCheckboxFlag: 1,
41
42
  isAllChecked: false,
42
43
  isAllIndeterminate: false,
44
+ // 滚动条
45
+ yThumbHeight: 0,
46
+ xThumbWidth: 0,
43
47
  insertRowFlag: 1,
44
48
  removeRowFlag: 1,
45
49
  dragRow: null,
@@ -49,13 +53,18 @@ function createReactData() {
49
53
  }
50
54
  function createInternalData() {
51
55
  return {
52
- resizeObserver: undefined,
53
56
  fullData: [],
54
57
  afterList: [],
55
58
  fullKeyMaps: {},
56
59
  rowMaps: {},
57
- lastScrollLeft: 0,
60
+ // 滚动条
61
+ // resizeObserver: undefined,
62
+ // isThumbDrag: false,
63
+ thumbDragOffset: 0,
64
+ yThumbTop: 0,
65
+ xThumbLeft: 0,
58
66
  lastScrollTop: 0,
67
+ lastScrollLeft: 0,
59
68
  scrollYStore: {
60
69
  startIndex: 0,
61
70
  endIndex: 0,
@@ -111,7 +120,12 @@ export default {
111
120
  dragConfig: Object,
112
121
  menuConfig: Object,
113
122
  virtualYConfig: Object,
114
- scrollY: Object
123
+ scrollY: Object,
124
+ useScrollbar: {
125
+ type: Boolean,
126
+ default: () => getConfig().list.useScrollbar
127
+ },
128
+ scrollbarConfig: Object
115
129
  },
116
130
  data() {
117
131
  const xID = XEUtils.uniqueId();
@@ -171,11 +185,20 @@ export default {
171
185
  computeWrapperStyles() {
172
186
  const $xeList = this;
173
187
  const rowHeight = $xeList.computeRowHeight;
174
- const style = {};
188
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
189
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
190
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
191
+ const barWidth = getDefaultConfig(getDefaultConfig(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
192
+ const barHeight = getDefaultConfig(getDefaultConfig(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
193
+ const stys = {};
175
194
  if (rowHeight) {
176
- style['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
195
+ stys['--vxe-ui-list-row-height'] = toCssUnit(rowHeight);
177
196
  }
178
- return style;
197
+ if (barWidth || barHeight) {
198
+ stys['--vxe-ui-scrollbar-y-width'] = toCssUnit(barWidth || barHeight);
199
+ stys['--vxe-ui-scrollbar-x-height'] = toCssUnit(barHeight || barWidth);
200
+ }
201
+ return stys;
179
202
  },
180
203
  computeVirtualStyles() {
181
204
  const $xeList = this;
@@ -192,6 +215,81 @@ export default {
192
215
  style.maxHeight = toCssUnit(Math.max(20, customMaxHeight - headHeight - footHeight));
193
216
  }
194
217
  return style;
218
+ },
219
+ computeScrollbarOpts() {
220
+ const $xeList = this;
221
+ const props = $xeList;
222
+ return Object.assign({}, getConfig().list.scrollbarConfig, props.scrollbarConfig);
223
+ },
224
+ computeScrollbarXOpts() {
225
+ const $xeList = this;
226
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
227
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig);
228
+ },
229
+ computeScrollbarYOpts() {
230
+ const $xeList = this;
231
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
232
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
233
+ },
234
+ computeScrollXVisible() {
235
+ const $xeList = this;
236
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
237
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
238
+ return getDefaultConfig(scrollbarXOpts.visible, scrollbarOpts.visible);
239
+ },
240
+ computeScrollYVisible() {
241
+ const $xeList = this;
242
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
243
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
244
+ return getDefaultConfig(scrollbarYOpts.visible, scrollbarOpts.visible);
245
+ },
246
+ computeScrollXAutoHide() {
247
+ const $xeList = this;
248
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
249
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
250
+ return getDefaultConfig(getDefaultConfig(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
251
+ },
252
+ computeScrollYAutoHide() {
253
+ const $xeList = this;
254
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
255
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
256
+ return getDefaultConfig(getDefaultConfig(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
257
+ },
258
+ computeScrollbarWrapperClss() {
259
+ const $xeList = this;
260
+ const reactData = $xeList.reactData;
261
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
262
+ const { padding } = scrollbarOpts;
263
+ const { yThumbHeight, xThumbWidth } = reactData;
264
+ const scrollbarXToTop = $xeList.computeScrollbarXToTop;
265
+ const scrollbarYToLeft = $xeList.computeScrollbarYToLeft;
266
+ const scrollXVisible = $xeList.computeScrollXVisible;
267
+ const scrollYVisible = $xeList.computeScrollYVisible;
268
+ const scrollXAutoHide = $xeList.computeScrollXAutoHide;
269
+ const scrollYAutoHide = $xeList.computeScrollYAutoHide;
270
+ return domUtils.buildClass([
271
+ 'vxe-scrollbar is--virtual',
272
+ `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}`,
273
+ `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}`,
274
+ `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`,
275
+ `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`
276
+ ], {
277
+ 'is--padding': padding,
278
+ 'ov-x--auto-hide': scrollXAutoHide,
279
+ 'ov-y--auto-hide': scrollYAutoHide,
280
+ 'overflow-y': yThumbHeight,
281
+ 'overflow-x': xThumbWidth
282
+ });
283
+ },
284
+ computeScrollbarXToTop() {
285
+ const $xeList = this;
286
+ const scrollbarXOpts = $xeList.computeScrollbarXOpts;
287
+ return scrollbarXOpts.position === 'top';
288
+ },
289
+ computeScrollbarYToLeft() {
290
+ const $xeList = this;
291
+ const scrollbarYOpts = $xeList.computeScrollbarYOpts;
292
+ return scrollbarYOpts.position === 'left';
195
293
  } }),
196
294
  methods: {
197
295
  //
@@ -518,6 +616,11 @@ export default {
518
616
  }
519
617
  });
520
618
  },
619
+ updateScrollbar() {
620
+ const $xeList = this;
621
+ $xeList.updateThumbSize();
622
+ $xeList.updateThumbOffset();
623
+ },
521
624
  /**
522
625
  * 重新计算列表
523
626
  */
@@ -537,6 +640,7 @@ export default {
537
640
  parentHeight = parentEl.clientHeight - Math.ceil(XEUtils.toNumber(parentStyle.paddingLeft) + XEUtils.toNumber(parentStyle.paddingRight));
538
641
  }
539
642
  reactData.parentHeight = parentHeight;
643
+ $xeList.updateScrollbar();
540
644
  $xeList.updateHeight();
541
645
  if (el.clientWidth && el.clientHeight) {
542
646
  return $xeList.computeScrollLoad();
@@ -571,6 +675,7 @@ export default {
571
675
  const scrollLeft = scrollBodyElem.scrollLeft;
572
676
  const isX = scrollLeft !== internalData.lastScrollLeft;
573
677
  const isY = scrollTop !== internalData.lastScrollTop;
678
+ $xeList.updateThumbOffset();
574
679
  internalData.lastScrollTop = scrollTop;
575
680
  internalData.lastScrollLeft = scrollLeft;
576
681
  if (reactData.scrollYLoad) {
@@ -1827,6 +1932,186 @@ export default {
1827
1932
  }
1828
1933
  $xeList.dispatchEvent('row-menu', { row }, evnt);
1829
1934
  },
1935
+ // 滚动条
1936
+ updateThumbSize() {
1937
+ const $xeList = this;
1938
+ const reactData = $xeList.reactData;
1939
+ const viewEl = $xeList.$refs.refVirtualWrapper;
1940
+ if (!viewEl) {
1941
+ return;
1942
+ }
1943
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
1944
+ return;
1945
+ }
1946
+ const trackXEl = $xeList.$refs.refTrackXElem;
1947
+ const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0;
1948
+ const thumbXElem = $xeList.$refs.refThumbXElem;
1949
+ if (thumbXElem) {
1950
+ thumbXElem.style.width = xThumbWidth + 'px';
1951
+ }
1952
+ reactData.xThumbWidth = xThumbWidth;
1953
+ const trackYEl = $xeList.$refs.refTrackYElem;
1954
+ const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0;
1955
+ const thumbYElem = $xeList.$refs.refThumbYElem;
1956
+ if (thumbYElem) {
1957
+ thumbYElem.style.height = yThumbHeight + 'px';
1958
+ }
1959
+ reactData.yThumbHeight = yThumbHeight;
1960
+ },
1961
+ updateThumbOffset() {
1962
+ const $xeList = this;
1963
+ const reactData = $xeList.reactData;
1964
+ const internalData = $xeList.internalData;
1965
+ const viewEl = $xeList.$refs.refVirtualWrapper;
1966
+ if (!viewEl) {
1967
+ return;
1968
+ }
1969
+ if (!viewEl.clientHeight || !viewEl.clientHeight) {
1970
+ return;
1971
+ }
1972
+ const { xThumbWidth, yThumbHeight } = reactData;
1973
+ const trackXEl = $xeList.$refs.refTrackXElem;
1974
+ const thumbXElem = $xeList.$refs.refThumbXElem;
1975
+ const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0;
1976
+ internalData.xThumbLeft = xThumbLeft;
1977
+ if (thumbXElem && xThumbWidth) {
1978
+ thumbXElem.style.width = xThumbWidth + 'px';
1979
+ thumbXElem.style.transform = `translateX(${xThumbLeft}px)`;
1980
+ }
1981
+ const trackYEl = $xeList.$refs.refTrackYElem;
1982
+ const thumbYElem = $xeList.$refs.refThumbYElem;
1983
+ const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0;
1984
+ internalData.yThumbTop = yThumbTop;
1985
+ if (thumbYElem && yThumbHeight) {
1986
+ thumbYElem.style.height = yThumbHeight + 'px';
1987
+ thumbYElem.style.transform = `translateY(${yThumbTop}px)`;
1988
+ }
1989
+ },
1990
+ clickTrackXEvent(evnt) {
1991
+ const $xeList = this;
1992
+ const reactData = $xeList.reactData;
1993
+ const trackEl = evnt.currentTarget;
1994
+ if (trackEl !== evnt.target) {
1995
+ return;
1996
+ }
1997
+ const viewEl = $xeList.$refs.refVirtualWrapper;
1998
+ if (!viewEl) {
1999
+ return;
2000
+ }
2001
+ const { xThumbWidth } = reactData;
2002
+ const trackRect = trackEl.getBoundingClientRect();
2003
+ viewEl.scrollTo({
2004
+ left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
2005
+ behavior: 'auto'
2006
+ });
2007
+ },
2008
+ clickTrackYEvent(evnt) {
2009
+ const $xeList = this;
2010
+ const reactData = $xeList.reactData;
2011
+ const trackEl = evnt.currentTarget;
2012
+ if (trackEl !== evnt.target) {
2013
+ return;
2014
+ }
2015
+ const viewEl = $xeList.$refs.refVirtualWrapper;
2016
+ if (!viewEl) {
2017
+ return;
2018
+ }
2019
+ const { yThumbHeight } = reactData;
2020
+ const trackRect = trackEl.getBoundingClientRect();
2021
+ viewEl.scrollTo({
2022
+ top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
2023
+ behavior: 'auto'
2024
+ });
2025
+ },
2026
+ pointerdownThumbXEvent(evnt) {
2027
+ const $xeList = this;
2028
+ const reactData = $xeList.reactData;
2029
+ const internalData = $xeList.internalData;
2030
+ const thumbEl = evnt.currentTarget;
2031
+ internalData.isThumbDrag = true;
2032
+ thumbEl.setPointerCapture(evnt.pointerId);
2033
+ const viewEl = $xeList.$refs.refVirtualWrapper;
2034
+ if (!viewEl) {
2035
+ return;
2036
+ }
2037
+ const { xThumbWidth } = reactData;
2038
+ const trackEl = thumbEl.parentElement;
2039
+ const trackRect = trackEl.getBoundingClientRect();
2040
+ const pointerPosition = evnt.clientX - trackRect.left;
2041
+ // 记录 thumb 的偏移
2042
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
2043
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
2044
+ },
2045
+ pointermoveThumbXEvent(evnt) {
2046
+ const $xeList = this;
2047
+ const reactData = $xeList.reactData;
2048
+ const internalData = $xeList.internalData;
2049
+ const thumbEl = evnt.currentTarget;
2050
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
2051
+ return;
2052
+ }
2053
+ const { isThumbDrag, thumbDragOffset } = internalData;
2054
+ if (isThumbDrag) {
2055
+ const viewEl = $xeList.$refs.refVirtualWrapper;
2056
+ if (!viewEl) {
2057
+ return;
2058
+ }
2059
+ const { xThumbWidth } = reactData;
2060
+ const thumbEl = evnt.currentTarget;
2061
+ const trackEl = thumbEl.parentElement;
2062
+ const trackRect = trackEl.getBoundingClientRect();
2063
+ // 更新偏移
2064
+ viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth);
2065
+ }
2066
+ },
2067
+ cleatPointerThumbEvent(evnt) {
2068
+ const $xeList = this;
2069
+ const internalData = $xeList.internalData;
2070
+ const thumbEl = evnt.currentTarget;
2071
+ thumbEl.releasePointerCapture(evnt.pointerId);
2072
+ internalData.isThumbDrag = false;
2073
+ },
2074
+ pointerdownThumbYEvent(evnt) {
2075
+ const $xeList = this;
2076
+ const reactData = $xeList.reactData;
2077
+ const internalData = $xeList.internalData;
2078
+ const thumbEl = evnt.currentTarget;
2079
+ internalData.isThumbDrag = true;
2080
+ thumbEl.setPointerCapture(evnt.pointerId);
2081
+ const viewEl = $xeList.$refs.refVirtualWrapper;
2082
+ if (!viewEl) {
2083
+ return;
2084
+ }
2085
+ const { yThumbHeight } = reactData;
2086
+ const trackEl = thumbEl.parentElement;
2087
+ const trackRect = trackEl.getBoundingClientRect();
2088
+ const pointerPosition = evnt.clientY - trackRect.top;
2089
+ // 记录 thumb 的偏移
2090
+ const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
2091
+ internalData.thumbDragOffset = pointerPosition - thumbOffset;
2092
+ },
2093
+ pointermoveThumbYEvent(evnt) {
2094
+ const $xeList = this;
2095
+ const reactData = $xeList.reactData;
2096
+ const internalData = $xeList.internalData;
2097
+ const thumbEl = evnt.currentTarget;
2098
+ if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
2099
+ return;
2100
+ }
2101
+ const { isThumbDrag, thumbDragOffset } = internalData;
2102
+ if (isThumbDrag) {
2103
+ const viewEl = $xeList.$refs.refVirtualWrapper;
2104
+ if (!viewEl) {
2105
+ return;
2106
+ }
2107
+ const { yThumbHeight } = reactData;
2108
+ const thumbEl = evnt.currentTarget;
2109
+ const trackEl = thumbEl.parentElement;
2110
+ const trackRect = trackEl.getBoundingClientRect();
2111
+ // 更新偏移
2112
+ viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight);
2113
+ }
2114
+ },
1830
2115
  //
1831
2116
  // Render
1832
2117
  //
@@ -2056,8 +2341,8 @@ export default {
2056
2341
  const props = $xeList;
2057
2342
  const reactData = $xeList.reactData;
2058
2343
  const slots = $xeList.$scopedSlots;
2059
- const { showCheckbox, className, loading } = props;
2060
- const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate } = reactData;
2344
+ const { showCheckbox, className, loading, useScrollbar } = props;
2345
+ const { bodyHeight, topSpaceHeight, rowList, isAllChecked, isAllIndeterminate, xThumbWidth, yThumbHeight } = reactData;
2061
2346
  const defaultSlot = slots.default;
2062
2347
  const headerSlot = slots.header;
2063
2348
  const footerSlot = slots.footer;
@@ -2070,6 +2355,15 @@ export default {
2070
2355
  const { trigger, isCrossListDrag } = dragOpts;
2071
2356
  const rowOpts = $xeList.computeRowOpts;
2072
2357
  const { isHover, padding } = rowOpts;
2358
+ const isDrag = $xeList.computeIsDrag;
2359
+ const scrollbarOpts = $xeList.computeScrollbarOpts;
2360
+ const scrollXVisible = $xeList.computeScrollXVisible;
2361
+ const scrollYVisible = $xeList.computeScrollYVisible;
2362
+ const scrollbarXToTop = $xeList.computeScrollbarXToTop;
2363
+ const scrollbarYToLeft = $xeList.computeScrollbarYToLeft;
2364
+ const scrollXAutoHide = $xeList.computeScrollXAutoHide;
2365
+ const scrollYAutoHide = $xeList.computeScrollYAutoHide;
2366
+ const scrollbarWrapperClss = $xeList.computeScrollbarWrapperClss;
2073
2367
  const showDefChekboxHead = showCheckbox && checkboxOpts.showHeader !== false;
2074
2368
  const leOns = {};
2075
2369
  if (isCrossListDrag && !rowList.length) {
@@ -2077,10 +2371,25 @@ export default {
2077
2371
  }
2078
2372
  return h('div', {
2079
2373
  ref: 'refElem',
2080
- class: ['vxe-list', className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '', {
2374
+ class: [
2375
+ 'vxe-list',
2376
+ useScrollbar ? `ov-x--${scrollXVisible === false ? 'hidden' : 'visible'}` : '',
2377
+ useScrollbar ? `ov-y--${scrollYVisible === false ? 'hidden' : 'visible'}` : '',
2378
+ useScrollbar ? `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}` : '',
2379
+ useScrollbar ? `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}` : '',
2380
+ className ? (XEUtils.isFunction(className) ? className({ $list: $xeList }) : className) : '',
2381
+ {
2081
2382
  [`size--${vSize}`]: vSize,
2383
+ 'is--virtual-scrollbar': useScrollbar,
2384
+ 'ov-padding': useScrollbar && scrollbarOpts.padding,
2385
+ 'ov-x--auto-hide': useScrollbar && scrollXAutoHide,
2386
+ 'ov-y--auto-hide': useScrollbar && scrollYAutoHide,
2387
+ 'overflow-y': yThumbHeight,
2388
+ 'overflow-x': xThumbWidth,
2389
+ 'is--drag': isDrag,
2082
2390
  'is--loading': loading
2083
- }],
2391
+ }
2392
+ ],
2084
2393
  on: leOns,
2085
2394
  style: wrapperStyles
2086
2395
  }, [
@@ -2149,6 +2458,57 @@ export default {
2149
2458
  class: 'vxe-list--footer-wrapper'
2150
2459
  }, footerSlot({ items: rowList, $list: $xeList }))
2151
2460
  : renderEmptyElement($xeList),
2461
+ /**
2462
+ * 滚动条
2463
+ */
2464
+ useScrollbar
2465
+ ? h('div', {
2466
+ class: scrollbarWrapperClss
2467
+ }, [
2468
+ scrollXVisible === false
2469
+ ? renderEmptyElement($xeList)
2470
+ : h('div', {
2471
+ ref: 'refTrackXElem',
2472
+ class: 'vxe-scrollbar--track-x',
2473
+ on: {
2474
+ click: $xeList.clickTrackXEvent
2475
+ }
2476
+ }, [
2477
+ h('div', {
2478
+ ref: 'refThumbXElem',
2479
+ class: 'vxe-scrollbar--thumb-x',
2480
+ on: {
2481
+ pointerdown: $xeList.pointerdownThumbXEvent,
2482
+ pointermove: $xeList.pointermoveThumbXEvent,
2483
+ pointerup: $xeList.cleatPointerThumbEvent,
2484
+ pointercancel: $xeList.cleatPointerThumbEvent,
2485
+ lostpointercapture: $xeList.cleatPointerThumbEvent
2486
+ }
2487
+ })
2488
+ ]),
2489
+ scrollYVisible === false
2490
+ ? renderEmptyElement($xeList)
2491
+ : h('div', {
2492
+ ref: 'refTrackYElem',
2493
+ class: 'vxe-scrollbar--track-y',
2494
+ on: {
2495
+ click: $xeList.clickTrackYEvent
2496
+ }
2497
+ }, [
2498
+ h('div', {
2499
+ ref: 'refThumbYElem',
2500
+ class: 'vxe-scrollbar--thumb-y',
2501
+ on: {
2502
+ pointerdown: $xeList.pointerdownThumbYEvent,
2503
+ pointermove: $xeList.pointermoveThumbYEvent,
2504
+ pointerup: $xeList.cleatPointerThumbEvent,
2505
+ pointercancel: $xeList.cleatPointerThumbEvent,
2506
+ lostpointercapture: $xeList.cleatPointerThumbEvent
2507
+ }
2508
+ })
2509
+ ])
2510
+ ])
2511
+ : renderEmptyElement($xeList),
2152
2512
  /**
2153
2513
  * 拖拽提示
2154
2514
  */
@@ -2183,13 +2543,29 @@ export default {
2183
2543
  const $xeList = this;
2184
2544
  $xeList.reFlag++;
2185
2545
  },
2546
+ useScrollbar() {
2547
+ const $xeList = this;
2548
+ $xeList.reFlag++;
2549
+ },
2186
2550
  computeRowHeight() {
2187
2551
  const $xeList = this;
2188
2552
  $xeList.reFlag++;
2189
2553
  },
2190
- reFlag() {
2554
+ computeScrollXVisible() {
2555
+ const $xeList = this;
2556
+ $xeList.$nextTick(() => {
2557
+ $xeList.reFlag++;
2558
+ });
2559
+ },
2560
+ computeScrollYVisible() {
2191
2561
  const $xeList = this;
2192
2562
  $xeList.$nextTick(() => {
2563
+ $xeList.reFlag++;
2564
+ });
2565
+ },
2566
+ reFlag() {
2567
+ const $xeList = this;
2568
+ $xeList.recalculate().then(() => {
2193
2569
  $xeList.recalculate();
2194
2570
  });
2195
2571
  },
@@ -2213,7 +2589,7 @@ export default {
2213
2589
  const $xeList = this;
2214
2590
  const props = $xeList;
2215
2591
  const internalData = $xeList.internalData;
2216
- const { showSeq, showRadio, showCheckbox } = props;
2592
+ const { showSeq, showRadio, showCheckbox, autoResize, useScrollbar } = props;
2217
2593
  const rowOpts = $xeList.computeRowOpts;
2218
2594
  const { useKey, keyField } = rowOpts;
2219
2595
  const isDrag = $xeList.computeIsDrag;
@@ -2234,21 +2610,33 @@ export default {
2234
2610
  if (useKey && !keyField) {
2235
2611
  errLog('vxe.error.reqSupportProp', ['row-config.useKey', 'row-config.keyField']);
2236
2612
  }
2237
- if (props.autoResize) {
2613
+ if (useScrollbar || autoResize) {
2238
2614
  const el = $xeList.$refs.refElem;
2239
- const resizeObserver = globalResize.create(() => $xeList.recalculate());
2240
- resizeObserver.observe(el);
2615
+ const viewInnerEl = $xeList.$refs.refVirtualBody;
2616
+ const resizeObserver = globalResize.create(() => {
2617
+ $xeList.reFlag++;
2618
+ });
2241
2619
  if (el) {
2242
- resizeObserver.observe(el.parentElement);
2620
+ resizeObserver.observe(el);
2621
+ if (autoResize) {
2622
+ resizeObserver.observe(el.parentElement);
2623
+ }
2624
+ }
2625
+ if (viewInnerEl) {
2626
+ resizeObserver.observe(viewInnerEl);
2243
2627
  }
2244
2628
  internalData.resizeObserver = resizeObserver;
2245
2629
  }
2246
- $xeList.recalculate();
2247
- globalEvents.on($xeList, 'resize', $xeList.recalculate);
2630
+ $xeList.reFlag++;
2631
+ globalEvents.on($xeList, 'resize', () => {
2632
+ $xeList.reFlag++;
2633
+ });
2248
2634
  },
2249
2635
  activated() {
2250
2636
  const $xeList = this;
2251
- $xeList.recalculate().then(() => $xeList.refreshScroll());
2637
+ $xeList.recalculate().then(() => {
2638
+ $xeList.refreshScroll();
2639
+ });
2252
2640
  },
2253
2641
  beforeDestroy() {
2254
2642
  const $xeList = this;
package/es/list/style.css CHANGED
@@ -379,4 +379,47 @@
379
379
  .vxe-list--radio-option .vxe-radio--label {
380
380
  padding-left: 0.4em;
381
381
  vertical-align: middle;
382
+ }
383
+
384
+ .vxe-list.ov-padding.overflow-x.sx-pos--top {
385
+ padding-top: var(--vxe-ui-scrollbar-x-height);
386
+ }
387
+ .vxe-list.ov-padding.overflow-x.sx-pos--bottom {
388
+ padding-bottom: var(--vxe-ui-scrollbar-x-height);
389
+ }
390
+ .vxe-list.ov-padding.overflow-y.sy-pos--left {
391
+ padding-left: var(--vxe-ui-scrollbar-y-width);
392
+ }
393
+ .vxe-list.ov-padding.overflow-y.sy-pos--right {
394
+ padding-right: var(--vxe-ui-scrollbar-y-width);
395
+ }
396
+ .vxe-list.ov-x--hidden > .vxe-list--virtual-wrapper {
397
+ overflow-x: hidden;
398
+ }
399
+ .vxe-list.ov-y--hidden > .vxe-list--virtual-wrapper {
400
+ overflow-y: hidden;
401
+ }
402
+ .vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-x {
403
+ opacity: 1;
404
+ }
405
+ .vxe-list.is--virtual-scrollbar.ov-x--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-x {
406
+ opacity: 0;
407
+ transition: opacity 0.8s ease-in-out;
408
+ }
409
+ .vxe-list.is--virtual-scrollbar.ov-y--auto-hide:hover > .vxe-scrollbar > .vxe-scrollbar--track-y {
410
+ opacity: 1;
411
+ }
412
+ .vxe-list.is--virtual-scrollbar.ov-y--auto-hide > .vxe-scrollbar > .vxe-scrollbar--track-y {
413
+ opacity: 0;
414
+ transition: opacity 0.8s ease-in-out;
415
+ }
416
+ .vxe-list > .vxe-scrollbar {
417
+ position: unset;
418
+ }
419
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper {
420
+ scrollbar-width: none;
421
+ -ms-overflow-style: none;
422
+ }
423
+ .vxe-list.is--virtual-scrollbar > .vxe-list--virtual-wrapper::-webkit-scrollbar {
424
+ display: none;
382
425
  }
@@ -1 +1 @@
1
- @charset "UTF-8";.vxe-list{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-list.size--medium{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-medium)}.vxe-list.size--small{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-small)}.vxe-list.size--mini{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-mini)}.vxe-list{position:relative;display:block;padding:0;font-size:var(--vxe-ui-list-current-font-size);color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family);direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow-x:auto;overflow-y:auto;outline:0}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--header-wrapper{display:flex;flex-direction:row;align-items:center;min-height:var(--vxe-ui-list-row-height)}.vxe-list--header-left{display:flex;flex-direction:row;align-items:center;flex-shrink:0}.vxe-list--header-content{flex-grow:1;overflow:auto}.vxe-list--body.trigger--row>.vxe-list--row:not(.is--drag-disabled):active{cursor:grabbing}.vxe-list--body.is--padding>.vxe-list--row{padding:0 var(--vxe-ui-list-current-padding)}.vxe-list--body.checkbox--highlight .vxe-list--row.is-checkbox--checked{background-color:var(--vxe-ui-list-row-checkbox-checked-background-color)}.vxe-list--body.radio--highlight .vxe-list--row.is-radio--checked{background-color:var(--vxe-ui-list-row-radio-checked-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover{background-color:var(--vxe-ui-list-row-hover-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover.is--current{background-color:var(--vxe-ui-list-row-hover-current-background-color)}.vxe-list--body.row--hover.radio--highlight .vxe-list--row.is-radio--checked:hover{background-color:var(--vxe-ui-list-row-hover-radio-checked-background-color)}.vxe-list--body.row--hover.checkbox--highlight .vxe-list--row.is-checkbox--checked:hover{background-color:var(--vxe-ui-list-row-hover-checkbox-checked-background-color)}.vxe-list--row.is--current{background-color:var(--vxe-ui-list-row-current-background-color)}.vxe-list--virtual-wrapper{height:100px}.vxe-list--row{display:flex;flex-direction:row;align-items:center}.vxe-list--row-content,.vxe-list--row-drag,.vxe-list--row-extra{display:flex;flex-direction:row;align-items:center}.vxe-list--row-drag{flex-shrink:0;padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--row-content{flex-grow:1;height:var(--vxe-ui-list-row-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--row-extra{flex-shrink:0}.vxe-list--drag-handle:not(.is--disabled){cursor:grab}.vxe-list--drag-handle:not(.is--disabled):active{cursor:grabbing}.vxe-list--drag-handle:not(.is--disabled):hover{color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-handle.is--disabled{color:var(--vxe-ui-input-disabled-color);cursor:not-allowed}.vxe-list--row.row--drag-move{transition:transform .5s ease}.vxe-list--row.row--drag-origin{opacity:.3}.vxe-list--drag-row-line{display:none;position:absolute;top:0;left:0;z-index:11;pointer-events:none}.vxe-list--drag-row-line{width:100%;height:1px;border:2px solid transparent}.vxe-list--drag-row-line[drag-pos=top]{border-top-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-pos=bottom]{border-bottom-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-to-child=y]{border-top-color:transparent;border-bottom-color:transparent;border-left-color:var(--vxe-ui-status-success-color)}.vxe-list--drag-row-line.is--guides{background-color:var(--vxe-ui-list-drag-over-background-color)}.vxe-body--row-list-move{transition-property:transform;transition-duration:.35s}.vxe-list--drag-sort-tip{display:none;position:absolute;top:0;left:0;padding:.6em 1.4em;max-width:50%;min-width:100px;border-radius:var(--vxe-ui-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background-color:var(--vxe-ui-layout-background-color);box-shadow:0 0 10px 0 rgba(0,0,0,.2);z-index:33}.vxe-list--drag-sort-tip[drag-status=normal] .vxe-list--drag-sort-tip-normal-status{display:block}.vxe-list--drag-sort-tip[drag-status=sub] .vxe-list--drag-sort-tip-sub-status{display:block}.vxe-list--drag-sort-tip[drag-status=disabled] .vxe-list--drag-sort-tip-disabled-status{display:block}.vxe-list--drag-sort-tip-wrapper{display:flex;flex-direction:row;align-items:center}.vxe-list--drag-sort-tip-status{padding-right:.4em}.vxe-list--drag-sort-tip-disabled-status{display:none;flex-shrink:0;color:var(--vxe-ui-status-error-color)}.vxe-list--drag-sort-tip-normal-status,.vxe-list--drag-sort-tip-sub-status{display:none}.vxe-list--drag-sort-tip-content{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--checkbox-header{padding-right:var(--vxe-ui-list-current-padding);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-header{cursor:pointer}.vxe-list--checkbox-header .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-header .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-header.is--checked,.vxe-list--checkbox-header.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-header.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--hidden{cursor:default}.vxe-list--checkbox-header.is--readonly{cursor:auto}.vxe-list--checkbox-header.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-header.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-header .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--checkbox-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--checkbox-option{cursor:pointer}.vxe-list--checkbox-option .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-option .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-option.is--checked,.vxe-list--checkbox-option.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-option.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--hidden{cursor:default}.vxe-list--checkbox-option.is--readonly{cursor:auto}.vxe-list--checkbox-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-option.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-option .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--radio-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--radio-option{cursor:pointer}.vxe-list--radio-option .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-list--radio-option .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--radio-option.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--readonly{cursor:auto}.vxe-list--radio-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--radio-option.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--radio-option .vxe-radio--label{padding-left:.4em;vertical-align:middle}
1
+ @charset "UTF-8";.vxe-list{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-default);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-default)}.vxe-list.size--medium{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-medium);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-medium)}.vxe-list.size--small{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-small);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-small)}.vxe-list.size--mini{--vxe-ui-list-current-font-size:var(--vxe-ui-font-size-mini);--vxe-ui-list-current-padding:var(--vxe-ui-layout-padding-mini)}.vxe-list{position:relative;display:block;padding:0;font-size:var(--vxe-ui-list-current-font-size);color:var(--vxe-ui-font-color);font-family:var(--vxe-ui-font-family);direction:ltr}.vxe-list .vxe-list--virtual-wrapper{position:relative;overflow-x:auto;overflow-y:auto;outline:0}.vxe-list .vxe-list--y-space{width:0;float:left}.vxe-list .vxe-list--body,.vxe-list .vxe-list--virtual-wrapper{padding:0;margin:0;border:0;outline:0}.vxe-list--header-wrapper{display:flex;flex-direction:row;align-items:center;min-height:var(--vxe-ui-list-row-height)}.vxe-list--header-left{display:flex;flex-direction:row;align-items:center;flex-shrink:0}.vxe-list--header-content{flex-grow:1;overflow:auto}.vxe-list--body.trigger--row>.vxe-list--row:not(.is--drag-disabled):active{cursor:grabbing}.vxe-list--body.is--padding>.vxe-list--row{padding:0 var(--vxe-ui-list-current-padding)}.vxe-list--body.checkbox--highlight .vxe-list--row.is-checkbox--checked{background-color:var(--vxe-ui-list-row-checkbox-checked-background-color)}.vxe-list--body.radio--highlight .vxe-list--row.is-radio--checked{background-color:var(--vxe-ui-list-row-radio-checked-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover{background-color:var(--vxe-ui-list-row-hover-background-color)}.vxe-list--body.row--hover .vxe-list--row:hover.is--current{background-color:var(--vxe-ui-list-row-hover-current-background-color)}.vxe-list--body.row--hover.radio--highlight .vxe-list--row.is-radio--checked:hover{background-color:var(--vxe-ui-list-row-hover-radio-checked-background-color)}.vxe-list--body.row--hover.checkbox--highlight .vxe-list--row.is-checkbox--checked:hover{background-color:var(--vxe-ui-list-row-hover-checkbox-checked-background-color)}.vxe-list--row.is--current{background-color:var(--vxe-ui-list-row-current-background-color)}.vxe-list--virtual-wrapper{height:100px}.vxe-list--row{display:flex;flex-direction:row;align-items:center}.vxe-list--row-content,.vxe-list--row-drag,.vxe-list--row-extra{display:flex;flex-direction:row;align-items:center}.vxe-list--row-drag{flex-shrink:0;padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--row-content{flex-grow:1;height:var(--vxe-ui-list-row-height);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--row-extra{flex-shrink:0}.vxe-list--drag-handle:not(.is--disabled){cursor:grab}.vxe-list--drag-handle:not(.is--disabled):active{cursor:grabbing}.vxe-list--drag-handle:not(.is--disabled):hover{color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-handle.is--disabled{color:var(--vxe-ui-input-disabled-color);cursor:not-allowed}.vxe-list--row.row--drag-move{transition:transform .5s ease}.vxe-list--row.row--drag-origin{opacity:.3}.vxe-list--drag-row-line{display:none;position:absolute;top:0;left:0;z-index:11;pointer-events:none}.vxe-list--drag-row-line{width:100%;height:1px;border:2px solid transparent}.vxe-list--drag-row-line[drag-pos=top]{border-top-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-pos=bottom]{border-bottom-color:var(--vxe-ui-font-primary-color)}.vxe-list--drag-row-line[drag-to-child=y]{border-top-color:transparent;border-bottom-color:transparent;border-left-color:var(--vxe-ui-status-success-color)}.vxe-list--drag-row-line.is--guides{background-color:var(--vxe-ui-list-drag-over-background-color)}.vxe-body--row-list-move{transition-property:transform;transition-duration:.35s}.vxe-list--drag-sort-tip{display:none;position:absolute;top:0;left:0;padding:.6em 1.4em;max-width:50%;min-width:100px;border-radius:var(--vxe-ui-border-radius);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;background-color:var(--vxe-ui-layout-background-color);box-shadow:0 0 10px 0 rgba(0,0,0,.2);z-index:33}.vxe-list--drag-sort-tip[drag-status=normal] .vxe-list--drag-sort-tip-normal-status{display:block}.vxe-list--drag-sort-tip[drag-status=sub] .vxe-list--drag-sort-tip-sub-status{display:block}.vxe-list--drag-sort-tip[drag-status=disabled] .vxe-list--drag-sort-tip-disabled-status{display:block}.vxe-list--drag-sort-tip-wrapper{display:flex;flex-direction:row;align-items:center}.vxe-list--drag-sort-tip-status{padding-right:.4em}.vxe-list--drag-sort-tip-disabled-status{display:none;flex-shrink:0;color:var(--vxe-ui-status-error-color)}.vxe-list--drag-sort-tip-normal-status,.vxe-list--drag-sort-tip-sub-status{display:none}.vxe-list--drag-sort-tip-content{flex-grow:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vxe-list--checkbox-header{padding-right:var(--vxe-ui-list-current-padding);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-header{cursor:pointer}.vxe-list--checkbox-header .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-header .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-header.is--checked,.vxe-list--checkbox-header.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-header.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-header.is--hidden{cursor:default}.vxe-list--checkbox-header.is--readonly{cursor:auto}.vxe-list--checkbox-header.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-header.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-header .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--checkbox-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--checkbox-option{cursor:pointer}.vxe-list--checkbox-option .vxe-checkbox--icon{font-size:1.22em;transition:all .2s ease-in-out}.vxe-list--checkbox-option .vxe-checkbox--icon{color:var(--vxe-ui-input-border-color);vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--checkbox-option.is--checked,.vxe-list--checkbox-option.is--indeterminate{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--checked .vxe-checkbox--icon,.vxe-list--checkbox-option.is--indeterminate .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option:not(.is--disabled):hover .vxe-checkbox--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--checkbox-option.is--hidden{cursor:default}.vxe-list--checkbox-option.is--readonly{cursor:auto}.vxe-list--checkbox-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--checkbox-option.is--disabled .vxe-checkbox--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--checkbox-option .vxe-checkbox--label{padding-left:.4em;vertical-align:middle}.vxe-list--radio-option{padding-right:var(--vxe-ui-list-current-padding)}.vxe-list--radio-option{cursor:pointer}.vxe-list--radio-option .vxe-radio--icon{font-size:1.26em;transition:all .2s ease-in-out}.vxe-list--radio-option .vxe-radio--icon{color:var(--vxe-ui-input-border-color);border-radius:50%;vertical-align:middle;font-weight:700;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vxe-list--radio-option.is--checked{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--checked .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option:not(.is--disabled):hover .vxe-radio--icon{color:var(--vxe-ui-font-primary-color)}.vxe-list--radio-option.is--readonly{cursor:auto}.vxe-list--radio-option.is--disabled{color:var(--vxe-ui-font-disabled-color);cursor:not-allowed}.vxe-list--radio-option.is--disabled .vxe-radio--icon{color:var(--vxe-ui-input-disabled-color)}.vxe-list--radio-option .vxe-radio--label{padding-left:.4em;vertical-align:middle}.vxe-list.ov-padding.overflow-x.sx-pos--top{padding-top:var(--vxe-ui-scrollbar-x-height)}.vxe-list.ov-padding.overflow-x.sx-pos--bottom{padding-bottom:var(--vxe-ui-scrollbar-x-height)}.vxe-list.ov-padding.overflow-y.sy-pos--left{padding-left:var(--vxe-ui-scrollbar-y-width)}.vxe-list.ov-padding.overflow-y.sy-pos--right{padding-right:var(--vxe-ui-scrollbar-y-width)}.vxe-list.ov-x--hidden>.vxe-list--virtual-wrapper{overflow-x:hidden}.vxe-list.ov-y--hidden>.vxe-list--virtual-wrapper{overflow-y:hidden}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:1}.vxe-list.is--virtual-scrollbar.ov-x--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-x{opacity:0;transition:opacity .8s ease-in-out}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide:hover>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:1}.vxe-list.is--virtual-scrollbar.ov-y--auto-hide>.vxe-scrollbar>.vxe-scrollbar--track-y{opacity:0;transition:opacity .8s ease-in-out}.vxe-list>.vxe-scrollbar{position:unset}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper{scrollbar-width:none;-ms-overflow-style:none}.vxe-list.is--virtual-scrollbar>.vxe-list--virtual-wrapper::-webkit-scrollbar{display:none}