naive-ui
Version:
A Vue 3 Component Library. Fairly Complete, Theme Customizable, Uses TypeScript, Fast
662 lines (661 loc) • 31.3 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.XScrollbar = void 0;
const evtd_1 = require("evtd");
const seemly_1 = require("seemly");
const vooks_1 = require("vooks");
const vue_1 = require("vue");
const vueuc_1 = require("vueuc");
const _mixins_1 = require("../../../_mixins");
const _utils_1 = require("../../../_utils");
const styles_1 = require("../styles");
const index_cssr_1 = __importDefault(require("./styles/index.cssr"));
const scrollbarProps = Object.assign(Object.assign({}, _mixins_1.useTheme.props), { duration: {
type: Number,
default: 0
}, scrollable: {
type: Boolean,
default: true
}, xScrollable: Boolean, trigger: {
type: String,
default: 'hover'
}, useUnifiedContainer: Boolean, triggerDisplayManually: Boolean,
// If container is set, resize observer won't not attached
container: Function, content: Function, containerClass: String, containerStyle: [String, Object], contentClass: [String, Array], contentStyle: [String, Object], horizontalRailStyle: [String, Object], verticalRailStyle: [String, Object], onScroll: Function, onWheel: Function, onResize: Function, internalOnUpdateScrollLeft: Function, internalHoistYRail: Boolean, yPlacement: {
type: String,
default: 'right'
}, xPlacement: {
type: String,
default: 'bottom'
} });
const Scrollbar = (0, vue_1.defineComponent)({
name: 'Scrollbar',
props: scrollbarProps,
inheritAttrs: false,
setup(props) {
const { mergedClsPrefixRef, inlineThemeDisabled, mergedRtlRef } = (0, _mixins_1.useConfig)(props);
const rtlEnabledRef = (0, _mixins_1.useRtl)('Scrollbar', mergedRtlRef, mergedClsPrefixRef);
// dom ref
const wrapperRef = (0, vue_1.ref)(null);
const containerRef = (0, vue_1.ref)(null);
const contentRef = (0, vue_1.ref)(null);
const yRailRef = (0, vue_1.ref)(null);
const xRailRef = (0, vue_1.ref)(null);
// data ref
const contentHeightRef = (0, vue_1.ref)(null);
const contentWidthRef = (0, vue_1.ref)(null);
const containerHeightRef = (0, vue_1.ref)(null);
const containerWidthRef = (0, vue_1.ref)(null);
const yRailSizeRef = (0, vue_1.ref)(null);
const xRailSizeRef = (0, vue_1.ref)(null);
const containerScrollTopRef = (0, vue_1.ref)(0);
const containerScrollLeftRef = (0, vue_1.ref)(0);
const isShowXBarRef = (0, vue_1.ref)(false);
const isShowYBarRef = (0, vue_1.ref)(false);
let yBarPressed = false;
let xBarPressed = false;
let xBarVanishTimerId;
let yBarVanishTimerId;
let memoYTop = 0;
let memoXLeft = 0;
let memoMouseX = 0;
let memoMouseY = 0;
const isIos = (0, vooks_1.useIsIos)();
const themeRef = (0, _mixins_1.useTheme)('Scrollbar', '-scrollbar', index_cssr_1.default, styles_1.scrollbarLight, props, mergedClsPrefixRef);
const yBarSizeRef = (0, vue_1.computed)(() => {
const { value: containerHeight } = containerHeightRef;
const { value: contentHeight } = contentHeightRef;
const { value: yRailSize } = yRailSizeRef;
if (containerHeight === null
|| contentHeight === null
|| yRailSize === null) {
return 0;
}
else {
return Math.min(containerHeight, (yRailSize * containerHeight) / contentHeight
+ (0, seemly_1.depx)(themeRef.value.self.width) * 1.5);
}
});
const yBarSizePxRef = (0, vue_1.computed)(() => {
return `${yBarSizeRef.value}px`;
});
const xBarSizeRef = (0, vue_1.computed)(() => {
const { value: containerWidth } = containerWidthRef;
const { value: contentWidth } = contentWidthRef;
const { value: xRailSize } = xRailSizeRef;
if (containerWidth === null
|| contentWidth === null
|| xRailSize === null) {
return 0;
}
else {
return ((xRailSize * containerWidth) / contentWidth
+ (0, seemly_1.depx)(themeRef.value.self.height) * 1.5);
}
});
const xBarSizePxRef = (0, vue_1.computed)(() => {
return `${xBarSizeRef.value}px`;
});
const yBarTopRef = (0, vue_1.computed)(() => {
const { value: containerHeight } = containerHeightRef;
const { value: containerScrollTop } = containerScrollTopRef;
const { value: contentHeight } = contentHeightRef;
const { value: yRailSize } = yRailSizeRef;
if (containerHeight === null
|| contentHeight === null
|| yRailSize === null) {
return 0;
}
else {
const heightDiff = contentHeight - containerHeight;
if (!heightDiff)
return 0;
return ((containerScrollTop / heightDiff) * (yRailSize - yBarSizeRef.value));
}
});
const yBarTopPxRef = (0, vue_1.computed)(() => {
return `${yBarTopRef.value}px`;
});
const xBarLeftRef = (0, vue_1.computed)(() => {
const { value: containerWidth } = containerWidthRef;
const { value: containerScrollLeft } = containerScrollLeftRef;
const { value: contentWidth } = contentWidthRef;
const { value: xRailSize } = xRailSizeRef;
if (containerWidth === null
|| contentWidth === null
|| xRailSize === null) {
return 0;
}
else {
const widthDiff = contentWidth - containerWidth;
if (!widthDiff)
return 0;
return ((containerScrollLeft / widthDiff) * (xRailSize - xBarSizeRef.value));
}
});
const xBarLeftPxRef = (0, vue_1.computed)(() => {
return `${xBarLeftRef.value}px`;
});
const needYBarRef = (0, vue_1.computed)(() => {
const { value: containerHeight } = containerHeightRef;
const { value: contentHeight } = contentHeightRef;
return (containerHeight !== null
&& contentHeight !== null
&& contentHeight > containerHeight);
});
const needXBarRef = (0, vue_1.computed)(() => {
const { value: containerWidth } = containerWidthRef;
const { value: contentWidth } = contentWidthRef;
return (containerWidth !== null
&& contentWidth !== null
&& contentWidth > containerWidth);
});
const mergedShowXBarRef = (0, vue_1.computed)(() => {
const { trigger } = props;
return trigger === 'none' || isShowXBarRef.value;
});
const mergedShowYBarRef = (0, vue_1.computed)(() => {
const { trigger } = props;
return trigger === 'none' || isShowYBarRef.value;
});
const mergedContainerRef = (0, vue_1.computed)(() => {
const { container } = props;
if (container)
return container();
return containerRef.value;
});
const mergedContentRef = (0, vue_1.computed)(() => {
const { content } = props;
if (content)
return content();
return contentRef.value;
});
const scrollTo = (options, y) => {
if (!props.scrollable)
return;
if (typeof options === 'number') {
scrollToPosition(options, y !== null && y !== void 0 ? y : 0, 0, false, 'auto');
return;
}
const { left, top, index, elSize, position, behavior, el, debounce = true } = options;
if (left !== undefined || top !== undefined) {
scrollToPosition(left !== null && left !== void 0 ? left : 0, top !== null && top !== void 0 ? top : 0, 0, false, behavior);
}
if (el !== undefined) {
scrollToPosition(0, el.offsetTop, el.offsetHeight, debounce, behavior);
}
else if (index !== undefined && elSize !== undefined) {
scrollToPosition(0, index * elSize, elSize, debounce, behavior);
}
else if (position === 'bottom') {
scrollToPosition(0, Number.MAX_SAFE_INTEGER, 0, false, behavior);
}
else if (position === 'top') {
scrollToPosition(0, 0, 0, false, behavior);
}
};
const activateState = (0, _utils_1.useReactivated)(() => {
// Only restore for builtin container & content
if (!props.container) {
// remount
scrollTo({
top: containerScrollTopRef.value,
left: containerScrollLeftRef.value
});
}
});
// methods
const handleContentResize = () => {
if (activateState.isDeactivated)
return;
sync();
};
const handleContainerResize = (e) => {
if (activateState.isDeactivated)
return;
const { onResize } = props;
if (onResize)
onResize(e);
sync();
};
const scrollBy = (options, y) => {
if (!props.scrollable)
return;
const { value: container } = mergedContainerRef;
if (!container)
return;
if (typeof options === 'object') {
container.scrollBy(options);
}
else {
container.scrollBy(options, y || 0);
}
};
function scrollToPosition(left, top, elSize, debounce, behavior) {
const { value: container } = mergedContainerRef;
if (!container)
return;
if (debounce) {
const { scrollTop, offsetHeight } = container;
if (top > scrollTop) {
if (top + elSize <= scrollTop + offsetHeight) {
// do nothing
}
else {
container.scrollTo({
left,
top: top + elSize - offsetHeight,
behavior
});
}
return;
}
}
container.scrollTo({
left,
top,
behavior
});
}
function handleMouseEnterWrapper() {
showXBar();
showYBar();
sync();
}
function handleMouseLeaveWrapper() {
hideBar();
}
function hideBar() {
hideYBar();
hideXBar();
}
function hideYBar() {
if (yBarVanishTimerId !== undefined) {
window.clearTimeout(yBarVanishTimerId);
}
yBarVanishTimerId = window.setTimeout(() => {
isShowYBarRef.value = false;
}, props.duration);
}
function hideXBar() {
if (xBarVanishTimerId !== undefined) {
window.clearTimeout(xBarVanishTimerId);
}
xBarVanishTimerId = window.setTimeout(() => {
isShowXBarRef.value = false;
}, props.duration);
}
function showXBar() {
if (xBarVanishTimerId !== undefined) {
window.clearTimeout(xBarVanishTimerId);
}
isShowXBarRef.value = true;
}
function showYBar() {
if (yBarVanishTimerId !== undefined) {
window.clearTimeout(yBarVanishTimerId);
}
isShowYBarRef.value = true;
}
function handleScroll(e) {
const { onScroll } = props;
if (onScroll)
onScroll(e);
syncScrollState();
}
function syncScrollState() {
// only collect scroll state, do not trigger any dom event
const { value: container } = mergedContainerRef;
if (container) {
containerScrollTopRef.value = container.scrollTop;
containerScrollLeftRef.value
= container.scrollLeft * ((rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value) ? -1 : 1);
}
}
function syncPositionState() {
// only collect position state, do not trigger any dom event
// Don't use getClientBoundingRect because element may be scale transformed
const { value: content } = mergedContentRef;
if (content) {
contentHeightRef.value = content.offsetHeight;
contentWidthRef.value = content.offsetWidth;
}
const { value: container } = mergedContainerRef;
if (container) {
containerHeightRef.value = container.offsetHeight;
containerWidthRef.value = container.offsetWidth;
}
const { value: xRailEl } = xRailRef;
const { value: yRailEl } = yRailRef;
if (xRailEl) {
xRailSizeRef.value = xRailEl.offsetWidth;
}
if (yRailEl) {
yRailSizeRef.value = yRailEl.offsetHeight;
}
}
/**
* Sometimes there's only one element that we can scroll,
* For example for textarea, there won't be a content element.
*/
function syncUnifiedContainer() {
const { value: container } = mergedContainerRef;
if (container) {
containerScrollTopRef.value = container.scrollTop;
containerScrollLeftRef.value
= container.scrollLeft * ((rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value) ? -1 : 1);
containerHeightRef.value = container.offsetHeight;
containerWidthRef.value = container.offsetWidth;
contentHeightRef.value = container.scrollHeight;
contentWidthRef.value = container.scrollWidth;
}
const { value: xRailEl } = xRailRef;
const { value: yRailEl } = yRailRef;
if (xRailEl) {
xRailSizeRef.value = xRailEl.offsetWidth;
}
if (yRailEl) {
yRailSizeRef.value = yRailEl.offsetHeight;
}
}
function sync() {
if (!props.scrollable)
return;
if (props.useUnifiedContainer) {
syncUnifiedContainer();
}
else {
syncPositionState();
syncScrollState();
}
}
function isMouseUpAway(e) {
var _a;
return !((_a = wrapperRef.value) === null || _a === void 0 ? void 0 : _a.contains((0, seemly_1.getPreciseEventTarget)(e)));
}
function handleXScrollMouseDown(e) {
e.preventDefault();
e.stopPropagation();
xBarPressed = true;
(0, evtd_1.on)('mousemove', window, handleXScrollMouseMove, true);
(0, evtd_1.on)('mouseup', window, handleXScrollMouseUp, true);
memoXLeft = containerScrollLeftRef.value;
memoMouseX = (rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value)
? window.innerWidth - e.clientX
: e.clientX;
}
function handleXScrollMouseMove(e) {
if (!xBarPressed)
return;
if (xBarVanishTimerId !== undefined) {
window.clearTimeout(xBarVanishTimerId);
}
if (yBarVanishTimerId !== undefined) {
window.clearTimeout(yBarVanishTimerId);
}
const { value: containerWidth } = containerWidthRef;
const { value: contentWidth } = contentWidthRef;
const { value: xBarSize } = xBarSizeRef;
if (containerWidth === null || contentWidth === null)
return;
const dX = (rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value)
? window.innerWidth - e.clientX - memoMouseX
: e.clientX - memoMouseX;
const dScrollLeft = (dX * (contentWidth - containerWidth)) / (containerWidth - xBarSize);
const toScrollLeftUpperBound = contentWidth - containerWidth;
let toScrollLeft = memoXLeft + dScrollLeft;
toScrollLeft = Math.min(toScrollLeftUpperBound, toScrollLeft);
toScrollLeft = Math.max(toScrollLeft, 0);
const { value: container } = mergedContainerRef;
if (container) {
container.scrollLeft = toScrollLeft * ((rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value) ? -1 : 1);
const { internalOnUpdateScrollLeft } = props;
if (internalOnUpdateScrollLeft)
internalOnUpdateScrollLeft(toScrollLeft);
}
}
function handleXScrollMouseUp(e) {
e.preventDefault();
e.stopPropagation();
(0, evtd_1.off)('mousemove', window, handleXScrollMouseMove, true);
(0, evtd_1.off)('mouseup', window, handleXScrollMouseUp, true);
xBarPressed = false;
sync();
if (isMouseUpAway(e)) {
hideBar();
}
}
function handleYScrollMouseDown(e) {
e.preventDefault();
e.stopPropagation();
yBarPressed = true;
(0, evtd_1.on)('mousemove', window, handleYScrollMouseMove, true);
(0, evtd_1.on)('mouseup', window, handleYScrollMouseUp, true);
memoYTop = containerScrollTopRef.value;
memoMouseY = e.clientY;
}
function handleYScrollMouseMove(e) {
if (!yBarPressed)
return;
if (xBarVanishTimerId !== undefined) {
window.clearTimeout(xBarVanishTimerId);
}
if (yBarVanishTimerId !== undefined) {
window.clearTimeout(yBarVanishTimerId);
}
const { value: containerHeight } = containerHeightRef;
const { value: contentHeight } = contentHeightRef;
const { value: yBarSize } = yBarSizeRef;
if (containerHeight === null || contentHeight === null)
return;
const dY = e.clientY - memoMouseY;
const dScrollTop = (dY * (contentHeight - containerHeight)) / (containerHeight - yBarSize);
const toScrollTopUpperBound = contentHeight - containerHeight;
let toScrollTop = memoYTop + dScrollTop;
toScrollTop = Math.min(toScrollTopUpperBound, toScrollTop);
toScrollTop = Math.max(toScrollTop, 0);
const { value: container } = mergedContainerRef;
if (container) {
container.scrollTop = toScrollTop;
}
}
function handleYScrollMouseUp(e) {
e.preventDefault();
e.stopPropagation();
(0, evtd_1.off)('mousemove', window, handleYScrollMouseMove, true);
(0, evtd_1.off)('mouseup', window, handleYScrollMouseUp, true);
yBarPressed = false;
sync();
if (isMouseUpAway(e)) {
hideBar();
}
}
(0, vue_1.watchEffect)(() => {
const { value: needXBar } = needXBarRef;
const { value: needYBar } = needYBarRef;
const { value: mergedClsPrefix } = mergedClsPrefixRef;
const { value: xRailEl } = xRailRef;
const { value: yRailEl } = yRailRef;
if (xRailEl) {
if (!needXBar) {
xRailEl.classList.add(`${mergedClsPrefix}-scrollbar-rail--disabled`);
}
else {
xRailEl.classList.remove(`${mergedClsPrefix}-scrollbar-rail--disabled`);
}
}
if (yRailEl) {
if (!needYBar) {
yRailEl.classList.add(`${mergedClsPrefix}-scrollbar-rail--disabled`);
}
else {
yRailEl.classList.remove(`${mergedClsPrefix}-scrollbar-rail--disabled`);
}
}
});
(0, vue_1.onMounted)(() => {
// if container exist, it always can't be resolved when scrollbar is mounted
// for example:
// - component
// - scrollbar
// - inner
// if you pass inner to scrollbar, you may use a ref inside component
// however, when scrollbar is mounted, ref is not ready at component
// you need to init by yourself
if (props.container)
return;
sync();
});
(0, vue_1.onBeforeUnmount)(() => {
if (xBarVanishTimerId !== undefined) {
window.clearTimeout(xBarVanishTimerId);
}
if (yBarVanishTimerId !== undefined) {
window.clearTimeout(yBarVanishTimerId);
}
(0, evtd_1.off)('mousemove', window, handleYScrollMouseMove, true);
(0, evtd_1.off)('mouseup', window, handleYScrollMouseUp, true);
});
const cssVarsRef = (0, vue_1.computed)(() => {
const { common: { cubicBezierEaseInOut }, self: { color, colorHover, height, width, borderRadius, railInsetHorizontalTop, railInsetHorizontalBottom, railInsetVerticalRight, railInsetVerticalLeft, railColor } } = themeRef.value;
const { top: railTopHorizontalTop, right: railRightHorizontalTop, bottom: railBottomHorizontalTop, left: railLeftHorizontalTop } = (0, seemly_1.getPadding)(railInsetHorizontalTop);
const { top: railTopHorizontalBottom, right: railRightHorizontalBottom, bottom: railBottomHorizontalBottom, left: railLeftHorizontalBottom } = (0, seemly_1.getPadding)(railInsetHorizontalBottom);
const { top: railTopVerticalRight, right: railRightVerticalRight, bottom: railBottomVerticalRight, left: railLeftVerticalRight } = (0, seemly_1.getPadding)((rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value)
? (0, _utils_1.rtlInset)(railInsetVerticalRight)
: railInsetVerticalRight);
const { top: railTopVerticalLeft, right: railRightVerticalLeft, bottom: railBottomVerticalLeft, left: railLeftVerticalLeft } = (0, seemly_1.getPadding)((rtlEnabledRef === null || rtlEnabledRef === void 0 ? void 0 : rtlEnabledRef.value)
? (0, _utils_1.rtlInset)(railInsetVerticalLeft)
: railInsetVerticalLeft);
return {
'--n-scrollbar-bezier': cubicBezierEaseInOut,
'--n-scrollbar-color': color,
'--n-scrollbar-color-hover': colorHover,
'--n-scrollbar-border-radius': borderRadius,
'--n-scrollbar-width': width,
'--n-scrollbar-height': height,
'--n-scrollbar-rail-top-horizontal-top': railTopHorizontalTop,
'--n-scrollbar-rail-right-horizontal-top': railRightHorizontalTop,
'--n-scrollbar-rail-bottom-horizontal-top': railBottomHorizontalTop,
'--n-scrollbar-rail-left-horizontal-top': railLeftHorizontalTop,
'--n-scrollbar-rail-top-horizontal-bottom': railTopHorizontalBottom,
'--n-scrollbar-rail-right-horizontal-bottom': railRightHorizontalBottom,
'--n-scrollbar-rail-bottom-horizontal-bottom': railBottomHorizontalBottom,
'--n-scrollbar-rail-left-horizontal-bottom': railLeftHorizontalBottom,
'--n-scrollbar-rail-top-vertical-right': railTopVerticalRight,
'--n-scrollbar-rail-right-vertical-right': railRightVerticalRight,
'--n-scrollbar-rail-bottom-vertical-right': railBottomVerticalRight,
'--n-scrollbar-rail-left-vertical-right': railLeftVerticalRight,
'--n-scrollbar-rail-top-vertical-left': railTopVerticalLeft,
'--n-scrollbar-rail-right-vertical-left': railRightVerticalLeft,
'--n-scrollbar-rail-bottom-vertical-left': railBottomVerticalLeft,
'--n-scrollbar-rail-left-vertical-left': railLeftVerticalLeft,
'--n-scrollbar-rail-color': railColor
};
});
const themeClassHandle = inlineThemeDisabled
? (0, _mixins_1.useThemeClass)('scrollbar', undefined, cssVarsRef, props)
: undefined;
const exposedMethods = {
scrollTo,
scrollBy,
sync,
syncUnifiedContainer,
handleMouseEnterWrapper,
handleMouseLeaveWrapper
};
return Object.assign(Object.assign({}, exposedMethods), { mergedClsPrefix: mergedClsPrefixRef, rtlEnabled: rtlEnabledRef, containerScrollTop: containerScrollTopRef, wrapperRef,
containerRef,
contentRef,
yRailRef,
xRailRef, needYBar: needYBarRef, needXBar: needXBarRef, yBarSizePx: yBarSizePxRef, xBarSizePx: xBarSizePxRef, yBarTopPx: yBarTopPxRef, xBarLeftPx: xBarLeftPxRef, isShowXBar: mergedShowXBarRef, isShowYBar: mergedShowYBarRef, isIos,
handleScroll,
handleContentResize,
handleContainerResize,
handleYScrollMouseDown,
handleXScrollMouseDown, cssVars: inlineThemeDisabled ? undefined : cssVarsRef, themeClass: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.themeClass, onRender: themeClassHandle === null || themeClassHandle === void 0 ? void 0 : themeClassHandle.onRender });
},
render() {
var _a;
const { $slots, mergedClsPrefix, triggerDisplayManually, rtlEnabled, internalHoistYRail, yPlacement, xPlacement, xScrollable } = this;
if (!this.scrollable)
return (_a = $slots.default) === null || _a === void 0 ? void 0 : _a.call($slots);
const triggerIsNone = this.trigger === 'none';
const createYRail = (className, style) => {
return ((0, vue_1.h)("div", { ref: "yRailRef", class: [
`${mergedClsPrefix}-scrollbar-rail`,
`${mergedClsPrefix}-scrollbar-rail--vertical`,
`${mergedClsPrefix}-scrollbar-rail--vertical--${yPlacement}`,
className
], "data-scrollbar-rail": true, style: [style || '', this.verticalRailStyle], "aria-hidden": true }, (0, vue_1.h)((triggerIsNone ? _utils_1.Wrapper : vue_1.Transition), triggerIsNone ? null : { name: 'fade-in-transition' }, {
default: () => this.needYBar && this.isShowYBar && !this.isIos ? ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-scrollbar-rail__scrollbar`, style: {
height: this.yBarSizePx,
top: this.yBarTopPx
}, onMousedown: this.handleYScrollMouseDown })) : null
})));
};
const createChildren = () => {
var _a, _b;
(_a = this.onRender) === null || _a === void 0 ? void 0 : _a.call(this);
return (0, vue_1.h)('div', (0, vue_1.mergeProps)(this.$attrs, {
role: 'none',
ref: 'wrapperRef',
class: [
`${mergedClsPrefix}-scrollbar`,
this.themeClass,
rtlEnabled && `${mergedClsPrefix}-scrollbar--rtl`
],
style: this.cssVars,
onMouseenter: triggerDisplayManually
? undefined
: this.handleMouseEnterWrapper,
onMouseleave: triggerDisplayManually
? undefined
: this.handleMouseLeaveWrapper
}), [
this.container ? ((_b = $slots.default) === null || _b === void 0 ? void 0 : _b.call($slots)) : ((0, vue_1.h)("div", { role: "none", ref: "containerRef", class: [
`${mergedClsPrefix}-scrollbar-container`,
this.containerClass
], style: this.containerStyle, onScroll: this.handleScroll, onWheel: this.onWheel },
(0, vue_1.h)(vueuc_1.VResizeObserver, { onResize: this.handleContentResize }, {
default: () => ((0, vue_1.h)("div", { ref: "contentRef", role: "none", style: [
{
width: this.xScrollable ? 'fit-content' : null
},
this.contentStyle
], class: [
`${mergedClsPrefix}-scrollbar-content`,
this.contentClass
] }, $slots))
}))),
internalHoistYRail ? null : createYRail(undefined, undefined),
xScrollable && ((0, vue_1.h)("div", { ref: "xRailRef", class: [
`${mergedClsPrefix}-scrollbar-rail`,
`${mergedClsPrefix}-scrollbar-rail--horizontal`,
`${mergedClsPrefix}-scrollbar-rail--horizontal--${xPlacement}`
], style: this.horizontalRailStyle, "data-scrollbar-rail": true, "aria-hidden": true }, (0, vue_1.h)((triggerIsNone ? _utils_1.Wrapper : vue_1.Transition), triggerIsNone ? null : { name: 'fade-in-transition' }, {
default: () => this.needXBar && this.isShowXBar && !this.isIos ? ((0, vue_1.h)("div", { class: `${mergedClsPrefix}-scrollbar-rail__scrollbar`, style: {
width: this.xBarSizePx,
right: rtlEnabled ? this.xBarLeftPx : undefined,
left: rtlEnabled ? undefined : this.xBarLeftPx
}, onMousedown: this.handleXScrollMouseDown })) : null
})))
]);
};
const scrollbarNode = this.container ? (createChildren()) : ((0, vue_1.h)(vueuc_1.VResizeObserver, { onResize: this.handleContainerResize }, {
default: createChildren
}));
if (internalHoistYRail) {
return ((0, vue_1.h)(vue_1.Fragment, null,
scrollbarNode,
createYRail(this.themeClass, this.cssVars)));
}
else {
return scrollbarNode;
}
}
});
exports.default = Scrollbar;
exports.XScrollbar = Scrollbar;
;