vxe-pc-ui 4.20.9 → 4.20.11
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.
- package/dist/all.esm.js +1874 -2040
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/date-panel/src/date-panel.js +58 -36
- package/es/date-panel/style.css +22 -20
- package/es/date-panel/style.min.css +1 -1
- package/es/icon/style.css +1 -1
- package/es/icon-picker/src/icon-picker.js +74 -38
- package/es/icon-picker/style.css +9 -3
- package/es/icon-picker/style.min.css +1 -1
- package/es/list/src/list.js +12 -165
- package/es/scrollbar/src/scrollbar.js +20 -173
- package/es/select/src/select.js +246 -8
- package/es/select/style.css +44 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tooltip/src/tooltip.js +2 -4
- package/es/tooltip/style.css +2 -0
- package/es/tooltip/style.min.css +1 -1
- package/es/tree/src/tree.js +21 -173
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-date-panel/style.css +22 -20
- package/es/vxe-date-panel/style.min.css +1 -1
- package/es/vxe-icon-picker/style.css +9 -3
- package/es/vxe-icon-picker/style.min.css +1 -1
- package/es/vxe-select/style.css +44 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tooltip/style.css +2 -0
- package/es/vxe-tooltip/style.min.css +1 -1
- package/lib/date-panel/src/date-panel.js +56 -34
- package/lib/date-panel/src/date-panel.min.js +1 -1
- package/lib/date-panel/style/style.css +22 -20
- package/lib/date-panel/style/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/icon-picker/src/icon-picker.js +101 -45
- package/lib/icon-picker/src/icon-picker.min.js +1 -1
- package/lib/icon-picker/style/style.css +9 -3
- package/lib/icon-picker/style/style.min.css +1 -1
- package/lib/index.umd.js +827 -761
- package/lib/index.umd.min.js +1 -1
- package/lib/list/src/list.js +29 -195
- package/lib/list/src/list.min.js +1 -1
- package/lib/scrollbar/src/scrollbar.js +34 -199
- package/lib/scrollbar/src/scrollbar.min.js +1 -1
- package/lib/select/src/select.js +318 -68
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +44 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tooltip/src/tooltip.js +2 -4
- package/lib/tooltip/src/tooltip.min.js +1 -1
- package/lib/tooltip/style/style.css +2 -0
- package/lib/tooltip/style/style.min.css +1 -1
- package/lib/tree/src/tree.js +40 -202
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-date-panel/style/style.css +22 -20
- package/lib/vxe-date-panel/style/style.min.css +1 -1
- package/lib/vxe-icon-picker/style/style.css +9 -3
- package/lib/vxe-icon-picker/style/style.min.css +1 -1
- package/lib/vxe-select/style/style.css +44 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tooltip/style/style.css +2 -0
- package/lib/vxe-tooltip/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/date-panel/src/date-panel.ts +58 -36
- package/packages/icon-picker/src/icon-picker.ts +80 -38
- package/packages/list/src/list.ts +28 -182
- package/packages/scrollbar/src/scrollbar.ts +36 -188
- package/packages/select/src/select.ts +281 -8
- package/packages/tooltip/src/tooltip.ts +2 -4
- package/packages/tree/src/tree.ts +37 -190
- package/styles/components/date-panel.scss +31 -29
- package/styles/components/icon-picker.scss +9 -3
- package/styles/components/select.scss +77 -0
- package/styles/components/tooltip.scss +1 -0
- package/types/components/gantt-module/gantt-view.d.ts +16 -16
- package/types/components/icon-picker.d.ts +21 -1
- package/types/components/list.d.ts +4 -0
- package/types/components/scrollbar.d.ts +7 -14
- package/types/components/select.d.ts +28 -3
- package/types/components/table.d.ts +30 -18
- package/types/components/tree.d.ts +7 -16
- /package/es/icon/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
- /package/es/icon/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
- /package/es/icon/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
- /package/es/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
- /package/es/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
- /package/es/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
- /package/lib/icon/style/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
- /package/lib/{iconfont.1792139440389.ttf → iconfont.1792226845944.ttf} +0 -0
- /package/lib/{iconfont.1792139440389.woff → iconfont.1792226845944.woff} +0 -0
- /package/lib/{iconfont.1792139440389.woff2 → iconfont.1792226845944.woff2} +0 -0
|
@@ -12,9 +12,7 @@ import VxeLoadingComponent from '../../loading'
|
|
|
12
12
|
|
|
13
13
|
import type { VxeListConstructor, VxeListPropTypes, VxeListEmits, ListReactData, VxeListPrivateMethods, ListInternalData, VxeListDefines, ValueOf, ListMethods, ListPrivateMethods, ListPrivateRef, VxeComponentStyleType } from '../../../types'
|
|
14
14
|
|
|
15
|
-
const { getConfig, getIcon, getI18n, domUtils,
|
|
16
|
-
|
|
17
|
-
const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils
|
|
15
|
+
const { getConfig, getIcon, getI18n, domUtils, useFns, menus, globalEvents, globalResize } = VxeUI
|
|
18
16
|
|
|
19
17
|
const { warnLog, errLog } = createComponentLog('tree')
|
|
20
18
|
|
|
@@ -167,9 +165,6 @@ export default defineVxeComponent({
|
|
|
167
165
|
|
|
168
166
|
const browseObj = XEUtils.browse()
|
|
169
167
|
|
|
170
|
-
const { computeSize } = useFns.useSize(props)
|
|
171
|
-
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
172
|
-
|
|
173
168
|
const reactData = reactive(createReactData())
|
|
174
169
|
|
|
175
170
|
const internalData = createInternalData()
|
|
@@ -183,14 +178,12 @@ export default defineVxeComponent({
|
|
|
183
178
|
const refVirtualSpaceElem = ref() as Ref<HTMLDivElement>
|
|
184
179
|
const refVirtualBody = ref() as Ref<HTMLDivElement>
|
|
185
180
|
|
|
186
|
-
const refTrackXElem = ref<HTMLDivElement>()
|
|
187
|
-
const refTrackYElem = ref<HTMLDivElement>()
|
|
188
|
-
const refThumbXElem = ref<HTMLDivElement>()
|
|
189
|
-
const refThumbYElem = ref<HTMLDivElement>()
|
|
190
|
-
|
|
191
181
|
const refDragRowLineElem = ref<HTMLDivElement>()
|
|
192
182
|
const refDragTipElem = ref<HTMLDivElement>()
|
|
193
183
|
|
|
184
|
+
const { computeSize } = useFns.useSize(props)
|
|
185
|
+
const { computeIsVScrollbar } = useFns.useVScrollbar(props)
|
|
186
|
+
|
|
194
187
|
const refMaps: ListPrivateRef = {
|
|
195
188
|
refElem
|
|
196
189
|
}
|
|
@@ -204,6 +197,22 @@ export default defineVxeComponent({
|
|
|
204
197
|
getRefMaps: () => refMaps
|
|
205
198
|
} as unknown as VxeListConstructor & VxeListPrivateMethods
|
|
206
199
|
|
|
200
|
+
const {
|
|
201
|
+
refTrackXElem,
|
|
202
|
+
refTrackYElem,
|
|
203
|
+
refThumbXElem,
|
|
204
|
+
refThumbYElem,
|
|
205
|
+
updateThumbSize,
|
|
206
|
+
updateThumbOffset,
|
|
207
|
+
clickTrackXEvent,
|
|
208
|
+
clickTrackYEvent,
|
|
209
|
+
pointerdownThumbXEvent,
|
|
210
|
+
pointermoveThumbXEvent,
|
|
211
|
+
cleatPointerThumbEvent,
|
|
212
|
+
pointerdownThumbYEvent,
|
|
213
|
+
pointermoveThumbYEvent
|
|
214
|
+
} = useFns.useInitVScrollbar($xeList)
|
|
215
|
+
|
|
207
216
|
const computeRowOpts = computed(() => {
|
|
208
217
|
return Object.assign({}, getConfig().list.rowConfig, props.rowConfig)
|
|
209
218
|
})
|
|
@@ -593,7 +602,10 @@ export default defineVxeComponent({
|
|
|
593
602
|
const scrollLeft = scrollBodyElem.scrollLeft
|
|
594
603
|
const isX = scrollLeft !== internalData.lastScrollLeft
|
|
595
604
|
const isY = scrollTop !== internalData.lastScrollTop
|
|
596
|
-
|
|
605
|
+
const isVScrollbar = computeIsVScrollbar.value
|
|
606
|
+
if (isVScrollbar) {
|
|
607
|
+
updateThumbOffset()
|
|
608
|
+
}
|
|
597
609
|
internalData.lastScrollTop = scrollTop
|
|
598
610
|
internalData.lastScrollLeft = scrollLeft
|
|
599
611
|
if (reactData.scrollYLoad) {
|
|
@@ -1618,6 +1630,10 @@ export default defineVxeComponent({
|
|
|
1618
1630
|
|
|
1619
1631
|
const listMethods: ListMethods = {
|
|
1620
1632
|
dispatchEvent,
|
|
1633
|
+
getScrollViewElem () {
|
|
1634
|
+
const viewEl = refVirtualWrapper.value
|
|
1635
|
+
return viewEl || null
|
|
1636
|
+
},
|
|
1621
1637
|
loadData,
|
|
1622
1638
|
/**
|
|
1623
1639
|
* 重新加载数据
|
|
@@ -1969,176 +1985,6 @@ export default defineVxeComponent({
|
|
|
1969
1985
|
}
|
|
1970
1986
|
}
|
|
1971
1987
|
|
|
1972
|
-
const updateThumbSize = () => {
|
|
1973
|
-
const viewEl = refVirtualWrapper.value
|
|
1974
|
-
if (!viewEl) {
|
|
1975
|
-
return
|
|
1976
|
-
}
|
|
1977
|
-
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
1978
|
-
return
|
|
1979
|
-
}
|
|
1980
|
-
const trackXEl = refTrackXElem.value
|
|
1981
|
-
const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0
|
|
1982
|
-
const thumbXElem = refThumbXElem.value
|
|
1983
|
-
if (thumbXElem) {
|
|
1984
|
-
thumbXElem.style.width = xThumbWidth + 'px'
|
|
1985
|
-
}
|
|
1986
|
-
reactData.xThumbWidth = xThumbWidth
|
|
1987
|
-
|
|
1988
|
-
const trackYEl = refTrackYElem.value
|
|
1989
|
-
|
|
1990
|
-
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
|
|
1991
|
-
const thumbYElem = refThumbYElem.value
|
|
1992
|
-
if (thumbYElem) {
|
|
1993
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
1994
|
-
}
|
|
1995
|
-
reactData.yThumbHeight = yThumbHeight
|
|
1996
|
-
}
|
|
1997
|
-
|
|
1998
|
-
const updateThumbOffset = () => {
|
|
1999
|
-
const viewEl = refVirtualWrapper.value
|
|
2000
|
-
if (!viewEl) {
|
|
2001
|
-
return
|
|
2002
|
-
}
|
|
2003
|
-
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
2004
|
-
return
|
|
2005
|
-
}
|
|
2006
|
-
const { xThumbWidth, yThumbHeight } = reactData
|
|
2007
|
-
const trackXEl = refTrackXElem.value
|
|
2008
|
-
const thumbXElem = refThumbXElem.value
|
|
2009
|
-
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
|
|
2010
|
-
internalData.xThumbLeft = xThumbLeft
|
|
2011
|
-
if (thumbXElem && xThumbWidth) {
|
|
2012
|
-
thumbXElem.style.width = xThumbWidth + 'px'
|
|
2013
|
-
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
|
|
2014
|
-
}
|
|
2015
|
-
|
|
2016
|
-
const trackYEl = refTrackYElem.value
|
|
2017
|
-
const thumbYElem = refThumbYElem.value
|
|
2018
|
-
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
|
|
2019
|
-
internalData.yThumbTop = yThumbTop
|
|
2020
|
-
if (thumbYElem && yThumbHeight) {
|
|
2021
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
2022
|
-
thumbYElem.style.transform = `translateY(${yThumbTop}px)`
|
|
2023
|
-
}
|
|
2024
|
-
}
|
|
2025
|
-
|
|
2026
|
-
const clickTrackXEvent = (evnt: MouseEvent) => {
|
|
2027
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
2028
|
-
if (trackEl !== evnt.target) {
|
|
2029
|
-
return
|
|
2030
|
-
}
|
|
2031
|
-
const viewEl = refVirtualWrapper.value
|
|
2032
|
-
if (!viewEl) {
|
|
2033
|
-
return
|
|
2034
|
-
}
|
|
2035
|
-
const { xThumbWidth } = reactData
|
|
2036
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2037
|
-
viewEl.scrollTo({
|
|
2038
|
-
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
2039
|
-
behavior: 'auto'
|
|
2040
|
-
})
|
|
2041
|
-
}
|
|
2042
|
-
|
|
2043
|
-
const clickTrackYEvent = (evnt: MouseEvent) => {
|
|
2044
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
2045
|
-
if (trackEl !== evnt.target) {
|
|
2046
|
-
return
|
|
2047
|
-
}
|
|
2048
|
-
const viewEl = refVirtualWrapper.value
|
|
2049
|
-
if (!viewEl) {
|
|
2050
|
-
return
|
|
2051
|
-
}
|
|
2052
|
-
const { yThumbHeight } = reactData
|
|
2053
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2054
|
-
viewEl.scrollTo({
|
|
2055
|
-
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
2056
|
-
behavior: 'auto'
|
|
2057
|
-
})
|
|
2058
|
-
}
|
|
2059
|
-
|
|
2060
|
-
const pointerdownThumbXEvent = (evnt: PointerEvent) => {
|
|
2061
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2062
|
-
internalData.isThumbDrag = true
|
|
2063
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
2064
|
-
|
|
2065
|
-
const viewEl = refVirtualWrapper.value
|
|
2066
|
-
if (!viewEl) {
|
|
2067
|
-
return
|
|
2068
|
-
}
|
|
2069
|
-
const { xThumbWidth } = reactData
|
|
2070
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2071
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2072
|
-
const pointerPosition = evnt.clientX - trackRect.left
|
|
2073
|
-
// 记录 thumb 的偏移
|
|
2074
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
2075
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
2076
|
-
}
|
|
2077
|
-
|
|
2078
|
-
const pointermoveThumbXEvent = (evnt: PointerEvent) => {
|
|
2079
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2080
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2081
|
-
return
|
|
2082
|
-
}
|
|
2083
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
2084
|
-
if (isThumbDrag) {
|
|
2085
|
-
const viewEl = refVirtualWrapper.value
|
|
2086
|
-
if (!viewEl) {
|
|
2087
|
-
return
|
|
2088
|
-
}
|
|
2089
|
-
const { xThumbWidth } = reactData
|
|
2090
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2091
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2092
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2093
|
-
// 更新偏移
|
|
2094
|
-
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
2095
|
-
}
|
|
2096
|
-
}
|
|
2097
|
-
|
|
2098
|
-
const cleatPointerThumbEvent = (evnt: PointerEvent) => {
|
|
2099
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2100
|
-
thumbEl.releasePointerCapture(evnt.pointerId)
|
|
2101
|
-
internalData.isThumbDrag = false
|
|
2102
|
-
}
|
|
2103
|
-
|
|
2104
|
-
const pointerdownThumbYEvent = (evnt: PointerEvent) => {
|
|
2105
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2106
|
-
internalData.isThumbDrag = true
|
|
2107
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
2108
|
-
|
|
2109
|
-
const viewEl = refVirtualWrapper.value
|
|
2110
|
-
if (!viewEl) {
|
|
2111
|
-
return
|
|
2112
|
-
}
|
|
2113
|
-
const { yThumbHeight } = reactData
|
|
2114
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2115
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2116
|
-
const pointerPosition = evnt.clientY - trackRect.top
|
|
2117
|
-
// 记录 thumb 的偏移
|
|
2118
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
2119
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
2120
|
-
}
|
|
2121
|
-
|
|
2122
|
-
const pointermoveThumbYEvent = (evnt: PointerEvent) => {
|
|
2123
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2124
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
2125
|
-
return
|
|
2126
|
-
}
|
|
2127
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
2128
|
-
if (isThumbDrag) {
|
|
2129
|
-
const viewEl = refVirtualWrapper.value
|
|
2130
|
-
if (!viewEl) {
|
|
2131
|
-
return
|
|
2132
|
-
}
|
|
2133
|
-
const { yThumbHeight } = reactData
|
|
2134
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
2135
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
2136
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
2137
|
-
// 更新偏移
|
|
2138
|
-
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
2139
|
-
}
|
|
2140
|
-
}
|
|
2141
|
-
|
|
2142
1988
|
Object.assign($xeList, listMethods, listPrivateMethods)
|
|
2143
1989
|
|
|
2144
1990
|
const renderDragTip = () => {
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { ref, h, reactive, computed, PropType, onMounted, onBeforeUnmount, nextTick, watch } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
3
|
import XEUtils from 'xe-utils'
|
|
4
|
-
import { VxeUI } from '../../ui'
|
|
4
|
+
import { VxeUI, useFns } from '../../ui'
|
|
5
5
|
import { toCssUnit } from '../../ui/src/dom'
|
|
6
6
|
import { getDefaultConfig } from '../../ui/src/utils'
|
|
7
7
|
import VxeLoadingComponent from '../../loading'
|
|
8
8
|
|
|
9
9
|
import type { ScrollbarReactData, ScrollbarInternalData, VxeScrollbarEmits, ScrollbarMethods, ScrollbarPrivateMethods, VxeScrollbarPropTypes, ValueOf, ScrollbarPrivateRef, VxeScrollbarPrivateComputed, VxeScrollbarConstructor, VxeScrollbarPrivateMethods, VxeComponentStyleType } from '../../../types'
|
|
10
10
|
|
|
11
|
-
const { getConfig, createEvent, domUtils,
|
|
12
|
-
|
|
13
|
-
const { getThumbOffsetSize, getThumbSize, getScrollFromClick, getScrollFromDrag } = scrollbarUtils
|
|
11
|
+
const { getConfig, createEvent, domUtils, globalResize, globalEvents, renderEmptyElement } = VxeUI
|
|
14
12
|
|
|
15
13
|
function createReactData (): ScrollbarReactData {
|
|
16
14
|
return {
|
|
@@ -21,7 +19,7 @@ function createReactData (): ScrollbarReactData {
|
|
|
21
19
|
|
|
22
20
|
function createInternalData (): ScrollbarInternalData {
|
|
23
21
|
return {
|
|
24
|
-
//
|
|
22
|
+
// scrollObserver: undefined,
|
|
25
23
|
// isThumbDrag: false,
|
|
26
24
|
thumbDragOffset: 0,
|
|
27
25
|
yThumbTop: 0,
|
|
@@ -85,6 +83,10 @@ export default defineVxeComponent({
|
|
|
85
83
|
type: String as PropType<VxeScrollbarPropTypes.ViewInnerClassName>,
|
|
86
84
|
default: () => getConfig().scrollbar.viewInnerClassName
|
|
87
85
|
},
|
|
86
|
+
size: {
|
|
87
|
+
type: String as PropType<VxeScrollbarPropTypes.Size>,
|
|
88
|
+
default: () => getConfig().scrollbar.size || getConfig().size
|
|
89
|
+
},
|
|
88
90
|
/**
|
|
89
91
|
* 已废弃
|
|
90
92
|
* @deprecated
|
|
@@ -111,15 +113,13 @@ export default defineVxeComponent({
|
|
|
111
113
|
const refElem = ref<HTMLDivElement>()
|
|
112
114
|
const refViewElem = ref<HTMLDivElement>()
|
|
113
115
|
const refViewInnerElem = ref<HTMLDivElement>()
|
|
114
|
-
const refTrackXElem = ref<HTMLDivElement>()
|
|
115
|
-
const refTrackYElem = ref<HTMLDivElement>()
|
|
116
|
-
const refThumbXElem = ref<HTMLDivElement>()
|
|
117
|
-
const refThumbYElem = ref<HTMLDivElement>()
|
|
118
116
|
|
|
119
117
|
const reactData = reactive(createReactData())
|
|
120
118
|
|
|
121
119
|
const internalData = createInternalData()
|
|
122
120
|
|
|
121
|
+
const { computeSize } = useFns.useSize(props)
|
|
122
|
+
|
|
123
123
|
const computeWrapperStyle = computed(() => {
|
|
124
124
|
const { width, height, minWidth, minHeight, maxWidth, maxHeight } = props
|
|
125
125
|
const barWidth = computeYWidth.value
|
|
@@ -187,6 +187,7 @@ export default defineVxeComponent({
|
|
|
187
187
|
const computeWrapperClss = computed(() => {
|
|
188
188
|
const { native, theme, className, padding } = props
|
|
189
189
|
const { yThumbHeight, xThumbWidth } = reactData
|
|
190
|
+
const vSize = computeSize.value
|
|
190
191
|
const xToTop = computeXToTop.value
|
|
191
192
|
const yToLeft = computeYToLeft.value
|
|
192
193
|
const xVisible = computeXVisible.value
|
|
@@ -195,6 +196,7 @@ export default defineVxeComponent({
|
|
|
195
196
|
const yAutoHide = computeYAutoHide.value
|
|
196
197
|
return domUtils.buildClass([
|
|
197
198
|
'vxe-scrollbar',
|
|
199
|
+
vSize ? `size--${vSize}` : '',
|
|
198
200
|
theme ? `theme--${theme}` : '',
|
|
199
201
|
`ov-x--${xVisible === false ? 'hidden' : 'visible'}`,
|
|
200
202
|
`ov-y--${yVisible === false ? 'hidden' : 'visible'}`,
|
|
@@ -263,17 +265,33 @@ export default defineVxeComponent({
|
|
|
263
265
|
getComputeMaps: () => computeMaps
|
|
264
266
|
} as unknown as VxeScrollbarConstructor & VxeScrollbarPrivateMethods
|
|
265
267
|
|
|
268
|
+
const {
|
|
269
|
+
refTrackXElem,
|
|
270
|
+
refTrackYElem,
|
|
271
|
+
refThumbXElem,
|
|
272
|
+
refThumbYElem,
|
|
273
|
+
updateThumbSize,
|
|
274
|
+
updateThumbOffset,
|
|
275
|
+
clickTrackXEvent,
|
|
276
|
+
clickTrackYEvent,
|
|
277
|
+
pointerdownThumbXEvent,
|
|
278
|
+
pointermoveThumbXEvent,
|
|
279
|
+
cleatPointerThumbEvent,
|
|
280
|
+
pointerdownThumbYEvent,
|
|
281
|
+
pointermoveThumbYEvent
|
|
282
|
+
} = useFns.useInitVScrollbar($xeScrollbar)
|
|
283
|
+
|
|
266
284
|
const dispatchEvent = (type: ValueOf<VxeScrollbarEmits>, params: Record<string, any>, evnt: Event | null) => {
|
|
267
285
|
emit(type, createEvent(evnt, { $scrollbar: $xeScrollbar }, params))
|
|
268
286
|
}
|
|
269
287
|
|
|
270
288
|
const scrollbarMethods: ScrollbarMethods = {
|
|
271
289
|
dispatchEvent,
|
|
272
|
-
|
|
290
|
+
getScrollViewElem () {
|
|
273
291
|
const viewEl = refViewElem.value
|
|
274
292
|
return viewEl || null
|
|
275
293
|
},
|
|
276
|
-
|
|
294
|
+
getScrollViewInnerElem () {
|
|
277
295
|
const viewInnerEl = refViewInnerElem.value
|
|
278
296
|
return viewInnerEl || null
|
|
279
297
|
},
|
|
@@ -333,60 +351,6 @@ export default defineVxeComponent({
|
|
|
333
351
|
}
|
|
334
352
|
}
|
|
335
353
|
|
|
336
|
-
const updateThumbSize = () => {
|
|
337
|
-
const viewEl = refViewElem.value
|
|
338
|
-
if (!viewEl) {
|
|
339
|
-
return
|
|
340
|
-
}
|
|
341
|
-
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
342
|
-
return
|
|
343
|
-
}
|
|
344
|
-
const trackXEl = refTrackXElem.value
|
|
345
|
-
const xThumbWidth = trackXEl ? getThumbSize(viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth) : 0
|
|
346
|
-
const thumbXElem = refThumbXElem.value
|
|
347
|
-
if (thumbXElem) {
|
|
348
|
-
thumbXElem.style.width = xThumbWidth + 'px'
|
|
349
|
-
}
|
|
350
|
-
reactData.xThumbWidth = xThumbWidth
|
|
351
|
-
|
|
352
|
-
const trackYEl = refTrackYElem.value
|
|
353
|
-
|
|
354
|
-
const yThumbHeight = trackYEl ? getThumbSize(viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight) : 0
|
|
355
|
-
const thumbYElem = refThumbYElem.value
|
|
356
|
-
if (thumbYElem) {
|
|
357
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
358
|
-
}
|
|
359
|
-
reactData.yThumbHeight = yThumbHeight
|
|
360
|
-
}
|
|
361
|
-
|
|
362
|
-
const updateThumbOffset = () => {
|
|
363
|
-
const viewEl = refViewElem.value
|
|
364
|
-
if (!viewEl) {
|
|
365
|
-
return
|
|
366
|
-
}
|
|
367
|
-
if (!viewEl.clientHeight || !viewEl.clientHeight) {
|
|
368
|
-
return
|
|
369
|
-
}
|
|
370
|
-
const { xThumbWidth, yThumbHeight } = reactData
|
|
371
|
-
const trackXEl = refTrackXElem.value
|
|
372
|
-
const thumbXElem = refThumbXElem.value
|
|
373
|
-
const xThumbLeft = trackXEl && xThumbWidth ? getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackXEl.clientWidth, xThumbWidth) : 0
|
|
374
|
-
internalData.xThumbLeft = xThumbLeft
|
|
375
|
-
if (thumbXElem && xThumbWidth) {
|
|
376
|
-
thumbXElem.style.width = xThumbWidth + 'px'
|
|
377
|
-
thumbXElem.style.transform = `translateX(${xThumbLeft}px)`
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
const trackYEl = refTrackYElem.value
|
|
381
|
-
const thumbYElem = refThumbYElem.value
|
|
382
|
-
const yThumbTop = trackYEl && yThumbHeight ? getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackYEl.clientHeight, yThumbHeight) : 0
|
|
383
|
-
internalData.yThumbTop = yThumbTop
|
|
384
|
-
if (thumbYElem && yThumbHeight) {
|
|
385
|
-
thumbYElem.style.height = yThumbHeight + 'px'
|
|
386
|
-
thumbYElem.style.transform = `translateY(${yThumbTop}px)`
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
354
|
const scrollEvent = (evnt: Event) => {
|
|
391
355
|
const { xThumbWidth, yThumbHeight } = reactData
|
|
392
356
|
const { lastScrollTop, lastScrollLeft } = internalData
|
|
@@ -460,122 +424,6 @@ export default defineVxeComponent({
|
|
|
460
424
|
}, evnt)
|
|
461
425
|
}
|
|
462
426
|
|
|
463
|
-
const clickTrackXEvent = (evnt: MouseEvent) => {
|
|
464
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
465
|
-
if (trackEl !== evnt.target) {
|
|
466
|
-
return
|
|
467
|
-
}
|
|
468
|
-
const viewEl = refViewElem.value
|
|
469
|
-
if (!viewEl) {
|
|
470
|
-
return
|
|
471
|
-
}
|
|
472
|
-
const { xThumbWidth } = reactData
|
|
473
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
474
|
-
viewEl.scrollTo({
|
|
475
|
-
left: getScrollFromClick(evnt.clientX - trackRect.left, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth),
|
|
476
|
-
behavior: 'auto'
|
|
477
|
-
})
|
|
478
|
-
}
|
|
479
|
-
|
|
480
|
-
const clickTrackYEvent = (evnt: MouseEvent) => {
|
|
481
|
-
const trackEl = evnt.currentTarget as HTMLDivElement
|
|
482
|
-
if (trackEl !== evnt.target) {
|
|
483
|
-
return
|
|
484
|
-
}
|
|
485
|
-
const viewEl = refViewElem.value
|
|
486
|
-
if (!viewEl) {
|
|
487
|
-
return
|
|
488
|
-
}
|
|
489
|
-
const { yThumbHeight } = reactData
|
|
490
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
491
|
-
viewEl.scrollTo({
|
|
492
|
-
top: getScrollFromClick(evnt.clientY - trackRect.top, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight),
|
|
493
|
-
behavior: 'auto'
|
|
494
|
-
})
|
|
495
|
-
}
|
|
496
|
-
|
|
497
|
-
const pointerdownThumbXEvent = (evnt: PointerEvent) => {
|
|
498
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
499
|
-
internalData.isThumbDrag = true
|
|
500
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
501
|
-
|
|
502
|
-
const viewEl = refViewElem.value
|
|
503
|
-
if (!viewEl) {
|
|
504
|
-
return
|
|
505
|
-
}
|
|
506
|
-
const { xThumbWidth } = reactData
|
|
507
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
508
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
509
|
-
const pointerPosition = evnt.clientX - trackRect.left
|
|
510
|
-
// 记录 thumb 的偏移
|
|
511
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollLeft, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
512
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
const pointermoveThumbXEvent = (evnt: PointerEvent) => {
|
|
516
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
517
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
518
|
-
return
|
|
519
|
-
}
|
|
520
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
521
|
-
if (isThumbDrag) {
|
|
522
|
-
const viewEl = refViewElem.value
|
|
523
|
-
if (!viewEl) {
|
|
524
|
-
return
|
|
525
|
-
}
|
|
526
|
-
const { xThumbWidth } = reactData
|
|
527
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
528
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
529
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
530
|
-
// 更新偏移
|
|
531
|
-
viewEl.scrollLeft = getScrollFromDrag(evnt.clientX - trackRect.left, thumbDragOffset, viewEl.clientWidth, viewEl.scrollWidth, trackEl.clientWidth, xThumbWidth)
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
const cleatPointerThumbEvent = (evnt: PointerEvent) => {
|
|
536
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
537
|
-
thumbEl.releasePointerCapture(evnt.pointerId)
|
|
538
|
-
internalData.isThumbDrag = false
|
|
539
|
-
}
|
|
540
|
-
|
|
541
|
-
const pointerdownThumbYEvent = (evnt: PointerEvent) => {
|
|
542
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
543
|
-
internalData.isThumbDrag = true
|
|
544
|
-
thumbEl.setPointerCapture(evnt.pointerId)
|
|
545
|
-
|
|
546
|
-
const viewEl = refViewElem.value
|
|
547
|
-
if (!viewEl) {
|
|
548
|
-
return
|
|
549
|
-
}
|
|
550
|
-
const { yThumbHeight } = reactData
|
|
551
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
552
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
553
|
-
const pointerPosition = evnt.clientY - trackRect.top
|
|
554
|
-
// 记录 thumb 的偏移
|
|
555
|
-
const thumbOffset = getThumbOffsetSize(viewEl.scrollTop, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
556
|
-
internalData.thumbDragOffset = pointerPosition - thumbOffset
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
const pointermoveThumbYEvent = (evnt: PointerEvent) => {
|
|
560
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
561
|
-
if (!thumbEl.hasPointerCapture(evnt.pointerId)) {
|
|
562
|
-
return
|
|
563
|
-
}
|
|
564
|
-
const { isThumbDrag, thumbDragOffset } = internalData
|
|
565
|
-
if (isThumbDrag) {
|
|
566
|
-
const viewEl = refViewElem.value
|
|
567
|
-
if (!viewEl) {
|
|
568
|
-
return
|
|
569
|
-
}
|
|
570
|
-
const { yThumbHeight } = reactData
|
|
571
|
-
const thumbEl = evnt.currentTarget as HTMLDivElement
|
|
572
|
-
const trackEl = thumbEl.parentElement as HTMLDivElement
|
|
573
|
-
const trackRect = trackEl.getBoundingClientRect()
|
|
574
|
-
// 更新偏移
|
|
575
|
-
viewEl.scrollTop = getScrollFromDrag(evnt.clientY - trackRect.top, thumbDragOffset, viewEl.clientHeight, viewEl.scrollHeight, trackEl.clientHeight, yThumbHeight)
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
|
|
579
427
|
const scrollbarPrivateMethods: ScrollbarPrivateMethods = {
|
|
580
428
|
}
|
|
581
429
|
|
|
@@ -704,18 +552,18 @@ export default defineVxeComponent({
|
|
|
704
552
|
const viewEl = refViewElem.value
|
|
705
553
|
const viewInnerEl = refViewInnerElem.value
|
|
706
554
|
if (autoResize) {
|
|
707
|
-
const
|
|
555
|
+
const scrollObserver = globalResize.create(() => {
|
|
708
556
|
if (props.autoResize) {
|
|
709
557
|
reFlag.value++
|
|
710
558
|
}
|
|
711
559
|
})
|
|
712
560
|
if (viewEl) {
|
|
713
|
-
|
|
561
|
+
scrollObserver.observe(viewEl)
|
|
714
562
|
}
|
|
715
563
|
if (viewInnerEl) {
|
|
716
|
-
|
|
564
|
+
scrollObserver.observe(viewInnerEl)
|
|
717
565
|
}
|
|
718
|
-
internalData.
|
|
566
|
+
internalData.scrollObserver = scrollObserver
|
|
719
567
|
}
|
|
720
568
|
|
|
721
569
|
reFlag.value++
|
|
@@ -725,9 +573,9 @@ export default defineVxeComponent({
|
|
|
725
573
|
})
|
|
726
574
|
|
|
727
575
|
onBeforeUnmount(() => {
|
|
728
|
-
const {
|
|
729
|
-
if (
|
|
730
|
-
|
|
576
|
+
const { scrollObserver } = internalData
|
|
577
|
+
if (scrollObserver) {
|
|
578
|
+
scrollObserver.disconnect()
|
|
731
579
|
}
|
|
732
580
|
globalEvents.off($xeScrollbar, 'resize')
|
|
733
581
|
})
|