UNPKG

@mantine/core

Version:

React components library focused on usability, accessibility and developer experience

102 lines (98 loc) 3.87 kB
'use client'; 'use strict'; var React = require('react'); require('clsx'); require('@mantine/hooks'); require('../../../core/MantineProvider/Mantine.context.cjs'); require('../../../core/MantineProvider/default-theme.cjs'); require('../../../core/MantineProvider/MantineProvider.cjs'); require('../../../core/MantineProvider/MantineThemeProvider/MantineThemeProvider.cjs'); require('../../../core/Box/Box.cjs'); var DirectionProvider = require('../../../core/DirectionProvider/DirectionProvider.cjs'); var ScrollArea_context = require('../ScrollArea.context.cjs'); var getThumbRatio = require('../utils/get-thumb-ratio.cjs'); var getThumbOffsetFromScroll = require('../utils/get-thumb-offset-from-scroll.cjs'); var getScrollPositionFromPointer = require('../utils/get-scroll-position-from-pointer.cjs'); var ScrollbarX = require('./ScrollbarX.cjs'); var ScrollbarY = require('./ScrollbarY.cjs'); const ScrollAreaScrollbarVisible = React.forwardRef((props, forwardedRef) => { const { orientation = "vertical", ...scrollbarProps } = props; const { dir } = DirectionProvider.useDirection(); const context = ScrollArea_context.useScrollAreaContext(); const thumbRef = React.useRef(null); const pointerOffsetRef = React.useRef(0); const [sizes, setSizes] = React.useState({ content: 0, viewport: 0, scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 } }); const thumbRatio = getThumbRatio.getThumbRatio(sizes.viewport, sizes.content); const commonProps = { ...scrollbarProps, sizes, onSizesChange: setSizes, hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1), onThumbChange: (thumb) => { thumbRef.current = thumb; }, onThumbPointerUp: () => { pointerOffsetRef.current = 0; }, onThumbPointerDown: (pointerPos) => { pointerOffsetRef.current = pointerPos; } }; const getScrollPosition = (pointerPos, direction) => getScrollPositionFromPointer.getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, direction); if (orientation === "horizontal") { return /* @__PURE__ */ React.createElement( ScrollbarX.ScrollAreaScrollbarX, { ...commonProps, ref: forwardedRef, onThumbPositionChange: () => { if (context.viewport && thumbRef.current) { const scrollPos = context.viewport.scrollLeft; const offset = getThumbOffsetFromScroll.getThumbOffsetFromScroll(scrollPos, sizes, dir); thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`; } }, onWheelScroll: (scrollPos) => { if (context.viewport) context.viewport.scrollLeft = scrollPos; }, onDragScroll: (pointerPos) => { if (context.viewport) { context.viewport.scrollLeft = getScrollPosition(pointerPos, dir); } } } ); } if (orientation === "vertical") { return /* @__PURE__ */ React.createElement( ScrollbarY.ScrollAreaScrollbarY, { ...commonProps, ref: forwardedRef, onThumbPositionChange: () => { if (context.viewport && thumbRef.current) { const scrollPos = context.viewport.scrollTop; const offset = getThumbOffsetFromScroll.getThumbOffsetFromScroll(scrollPos, sizes); thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`; } }, onWheelScroll: (scrollPos) => { if (context.viewport) context.viewport.scrollTop = scrollPos; }, onDragScroll: (pointerPos) => { if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos); } } ); } return null; }); exports.ScrollAreaScrollbarVisible = ScrollAreaScrollbarVisible; //# sourceMappingURL=ScrollAreaScrollbarVisible.cjs.map